Beispiel #1
0
bool PacketManager::sendPacket(ENetPeer *peer, uint8 *data, uint32 length, uint8 channelNo, uint32 flag)
{
	PDEBUG_LOG_LINE(Log::getMainInstance()," Sending packet:\n");
	if(length < 300)
		printPacket(data, length);

	if(length >= 8)
		_blowfish->Encrypt(data, length-(length%8)); //Encrypt everything minus the last bytes that overflow the 8 byte boundary

	ENetPacket *packet = enet_packet_create(data, length, flag);
	if(enet_peer_send(peer, channelNo, packet) < 0)
	{
		PDEBUG_LOG_LINE(Log::getMainInstance(),"Warning fail, send!");
		return false;
	}
	return true;
}
Beispiel #2
0
bool PacketManager::broadcastPacket(uint8 *data, uint32 length, uint8 channelNo, uint32 flag)
{
	PDEBUG_LOG_LINE(Log::getMainInstance()," Broadcast packet:\n");
	printPacket(data, length);

	if(length >= 8)
		_blowfish->Encrypt(data, length-(length%8)); //Encrypt everything minus the last bytes that overflow the 8 byte boundary

	ENetPacket *packet = enet_packet_create(data, length, flag);

	enet_host_broadcast(_server, channelNo, packet);
	return true;
}
Beispiel #3
0
bool PacketHandler::sendPacket(const uint8 *data, uint32 length, uint8 channelNo, uint32 flag)
{
	//PDEBUG_LOG_LINE(Logging," Sending packet:\n");
	//if(length < 300)
	//	printPacket(data, length);

	if(length >= 8)
		_blowfish->Encrypt((uint8*)data, length-(length%8)); //Encrypt everything minus the last bytes that overflow the 8 byte boundary

	ENetPacket *packet = enet_packet_create(data, length, flag);
	if(enet_peer_send(m_CurrPeer, channelNo, packet) < 0)
	{
		PDEBUG_LOG_LINE(Logging,"Warning fail, send!");
		return false;
	}
	return true;
}
Beispiel #4
0
bool PacketManager::handlePacket(ENetPeer *peer, ENetPacket *packet, uint8 channelID)
{
	if(packet->dataLength >= 8)
	{
		if(peerInfo(peer)->keyChecked)
			_blowfish->Decrypt(packet->data, packet->dataLength-(packet->dataLength%8)); //Encrypt everything minus the last bytes that overflow the 8 byte boundary
	}

	bool handled = false;

	for(uint32 i = 0; i < _packetHandlers.size(); i++)
	{
		handled = handled || _packetHandlers[i]->processPacket(peer,packet,channelID);
	}

	if(!handled)
	{
		PacketHeader* header = (PacketHeader*)packet->data;
		PDEBUG_LOG_LINE(Log::getMainInstance(),"Unknown packet: CMD %X(%i) CHANNEL %X(%i)\n", header->cmd, header->cmd,channelID,channelID);
	}

	return handled;	
}
Beispiel #5
0
bool PacketHandler::handleKeyCheck(ENetPeer *peer, ENetPacket *packet)
{
	KeyCheck *keyCheck = (KeyCheck*)packet->data;
	uint64 userId = _blowfish->Decrypt(keyCheck->checkId);

	if(userId == keyCheck->userId)
	{
		PDEBUG_LOG_LINE(Log::getMainInstance()," User got the same key as i do, go on!\n");
		peerInfo(peer)->keyChecked = true;
		peerInfo(peer)->userId = userId;
	}
	else
	{
		Log::getMainInstance()->errorLine(" WRONG KEY, GTFO!!!\n");
		return false;
	}

	//Send response as this is correct (OFC DO SOME ID CHECKS HERE!!!)
	KeyCheck response;
	response.userId = keyCheck->userId;
	response.netId = 0;
	
	return sendPacket(peer, reinterpret_cast<uint8*>(&response), sizeof(KeyCheck), CHL_HANDSHAKE);
}
Beispiel #6
0
bool PacketHandler::handlePacket(ENetPeer *peer, ENetPacket *packet, uint8 channelID)
{
	m_CurrPeer = peer;
	if(packet->dataLength >= 8)
	{
		if(peerInfo(peer)->keyChecked)
			_blowfish->Decrypt(packet->data, packet->dataLength-(packet->dataLength%8)); //Encrypt everything minus the last bytes that overflow the 8 byte boundary
	}

	PacketHeader *header = reinterpret_cast<PacketHeader*>(packet->data);	
	printf("Handling OpCode %02X\n", header->cmd);
	bool (PacketHandler::*handler)(HANDLE_ARGS) = _handlerTable[header->cmd][channelID];
	
	if(handler)
	{
		return (*this.*handler)(packet);
	}
	else
	{
		PDEBUG_LOG_LINE(Logging,"Unknown packet: CMD %X(%i) CHANNEL %X(%i)\n", header->cmd, header->cmd,channelID,channelID);
		printPacket(packet->data, packet->dataLength);
	}
	return false;	
}