void write(const QByteArray &buf, const QHostAddress &addr, int port) { QByteArray packet = allocate->encode(buf, addr, port); if(debugLevel >= TurnClient::DL_Packet) { StunMessage msg = StunMessage::fromBinary(packet); if(!msg.isNull()) { emit q->debugLine("STUN SEND"); emit q->debugLine(StunTypes::print_packet_str(msg)); } else emit q->debugLine("Sending ChannelData-based data packet"); } writeItems += WriteItem(packet.size(), addr, port); ++outPendingWrite; if(udp) { emit q->outgoingDatagram(packet); } else { if(tls) tls->write(packet); else bs->write(packet); } }
QByteArray processNonPoolPacket(const QByteArray &buf, bool notStun, QHostAddress *addr, int *port) { if(notStun) { // not stun? maybe it is a data packet QByteArray data = allocate->decode(buf, addr, port); if(!data.isNull()) { if(debugLevel >= TurnClient::DL_Packet) emit q->debugLine("Received ChannelData-based data packet"); return data; } } else { // packet might be stun not owned by pool. // let's see StunMessage message = StunMessage::fromBinary(buf); if(!message.isNull()) { QByteArray data = allocate->decode(message, addr, port); if(!data.isNull()) { if(debugLevel >= TurnClient::DL_Packet) emit q->debugLine("Received STUN-based data packet"); return data; } else { if(debugLevel >= TurnClient::DL_Packet) emit q->debugLine("Warning: server responded with an unexpected STUN packet, skipping."); } return QByteArray(); } } if(debugLevel >= TurnClient::DL_Packet) emit q->debugLine("Warning: server responded with what doesn't seem to be a STUN or data packet, skipping."); return QByteArray(); }