Example #1
0
	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);
		}
	}
Example #2
0
	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();
	}