#include "NFNet.h" #include "NFPacket.h" #include "GZip/zlib.h" #pragma comment(lib,"zlib.lib") namespace NaveNet { NFPacket::NFPacket() { Init(); } NFPacket::~NFPacket() { } VOID NFPacket::Init() { ZeroMemory(&m_Header, sizeof(PACKETHEADER)); ZeroMemory(m_Packet, sizeof(m_Packet)); } int NFPacket::EncryptPacket() { // üũ¼¶ »ý¼º¼ø¼­. // 1. Çì´õ »ý¼º (»çÀÌÁî¹× Ä¿¸Çµå ¼³Á¤.) // 2. ¾Ïȣȭ ¹× ¾ÐÃà // 3. üũ¼¶ »ý¼º. m_Header.CheckSum = ((m_Header.Command+m_Header.Size+m_Packet[0]+m_Packet[1])^0xA6F69E23)^0x62F2EA02; // »çÀÌÁî°¡ 100¹ÙÀÌÆ® ÀÌ»óÀÌ¸é ¾ÐÃàÇϰí üũ¼¶ ¼³Á¤ if(m_Header.Size >= 100) { // ¾ÐÃàÇϱâ // m_Header.Size »çÀÌÁî ÀçÁ¶Á¤ uLongf destLen = DEF_PACKETSIZE; int srcLen = GetSize(); char srcBuff[DEF_PACKETSIZE]; memcpy(srcBuff, m_Packet, srcLen); compress2((Bytef*)m_Packet, &destLen, (Bytef*)srcBuff, srcLen, 5); m_Packet[destLen]=0; SetSize((USHORT)destLen); m_Header.CheckSum = m_Header.CheckSum|0xF0000000; } else m_Header.CheckSum = m_Header.CheckSum&0x0FFFFFFF; return m_Header.Size; } VOID NFPacket::DecryptPacket() { if(m_Header.CheckSum&0xF0000000) { // ¾ÐÃàÇ®±â // m_Header.Size »çÀÌÁî ÀçÁ¶Á¤ uLongf destLen = DEF_PACKETSIZE; int srcLen = GetSize(); char srcBuff[DEF_PACKETSIZE]; memcpy(srcBuff, m_Packet, srcLen); uncompress((Bytef*)m_Packet, &destLen, (Bytef*)srcBuff, srcLen); m_Packet[destLen]=0; SetSize((USHORT)destLen); } // üũ¼¶ Á¶Á¤ m_Header.CheckSum = m_Header.CheckSum&0x0FFFFFFF; } BOOL NFPacket::IsAliveChecksum() { DWORD CheckSum = ((m_Header.Command+m_Header.Size+m_Packet[0]+m_Packet[1])^0xA6F69E23)^0x62F2EA02; CheckSum = CheckSum&0x0FFFFFFF; if(m_Header.CheckSum == CheckSum) return TRUE; return FALSE; } }