void addChannelPeer(const QHostAddress &addr, int port) { ensurePermission(addr); StunAllocate::Channel c(addr, port); if(!pendingChannels.contains(c) && !desiredChannels.contains(c)) { pendingChannels += c; tryChannelQueued(); } }
void addChannelPeer(const QHostAddress &addr, int port) { ensurePermission(addr); StunAllocate::Channel c(addr, port); if(!desiredChannels.contains(c)) { emit q->debugLine(QString("Setting channel for peer address/port %1;%2").arg(c.address.toString()).arg(c.port)); desiredChannels += c; allocate->setChannels(desiredChannels); } }
void writeOrQueue(const QByteArray &buf, const QHostAddress &addr, int port) { Q_ASSERT(allocateStarted); StunAllocate::Channel c(addr, port); bool writeImmediately = false; bool requireChannel = desiredChannels.contains(c); QList<QHostAddress> actualPerms = allocate->permissions(); if(actualPerms.contains(addr)) { if(requireChannel) { QList<StunAllocate::Channel> actualChannels = allocate->channels(); if(actualChannels.contains(c)) writeImmediately = true; } else writeImmediately = true; } if(writeImmediately) { write(buf, addr, port); } else { Packet p; p.addr = addr; p.port = port; p.data = buf; p.requireChannel = requireChannel; outPending += p; ensurePermission(addr); } }