158 lines
3.2 KiB
C++
158 lines
3.2 KiB
C++
// Packet.cpp: implementation of the CPacket class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "../stdafx.h"
|
|
#include "Packet.h"
|
|
|
|
#include "../LS_TTBotDlg.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CPacket::CPacket()
|
|
{
|
|
Clear();
|
|
}
|
|
|
|
CPacket::CPacket(DWORD ID)
|
|
{
|
|
Clear();
|
|
*m_packet_header.m_ID = ID;
|
|
m_currentPos = sizeof(PACKETHEADER);
|
|
}
|
|
|
|
CPacket::CPacket(const uint8 *buffer, uint32 size)
|
|
{
|
|
Clear();
|
|
|
|
if( size >= sizeof(PACKETHEADER) )
|
|
{
|
|
memcpy( m_pBuffer , buffer, sizeof(PACKETHEADER) );
|
|
m_currentPos = sizeof(PACKETHEADER);
|
|
|
|
if( size >= GetBufferSize() )
|
|
{
|
|
if( GetBufferSize() < m_currentPos )
|
|
{
|
|
MessageBox(NULL, "CPacket error", "error", MB_OK );
|
|
exit(1);
|
|
return;
|
|
}
|
|
memcpy( &m_pBuffer[m_currentPos], &buffer[m_currentPos], GetBufferSize() - m_currentPos );
|
|
}
|
|
}
|
|
}
|
|
|
|
CPacket::~CPacket()
|
|
{
|
|
|
|
}
|
|
|
|
void CPacket::Clear()
|
|
{
|
|
memset(m_pBuffer,0,MAX_BUFFER);
|
|
m_currentPos = 0;
|
|
m_packet_header.m_ID = (DWORD*)&m_pBuffer[PK_ID_ADDR];
|
|
m_packet_header.m_Size = (DWORD*)&m_pBuffer[PK_SIZE_ADDR];
|
|
m_packet_header.m_CheckSum = (DWORD*)&m_pBuffer[PK_CKSUM_ADDR];
|
|
m_packet_header.m_iState = (int*)&m_pBuffer[PK_FSM_ADDR];
|
|
*m_packet_header.m_Size = sizeof(PACKETHEADER);
|
|
}
|
|
|
|
void CPacket::SetBufferCopy(char *pBuf,int size)
|
|
{
|
|
Clear();
|
|
|
|
memcpy( m_pBuffer, pBuf, size );
|
|
m_currentPos = sizeof(PACKETHEADER);
|
|
}
|
|
|
|
void CPacket::SetDataAdd(char *pBuf,int size)
|
|
{
|
|
memcpy( &m_pBuffer[m_currentPos], pBuf, size );
|
|
m_currentPos += size;
|
|
*m_packet_header.m_Size = m_currentPos;
|
|
}
|
|
|
|
void CPacket::SetCheckSum( DWORD dwSum )
|
|
{
|
|
*m_packet_header.m_CheckSum = dwSum;
|
|
}
|
|
|
|
void CPacket::SetState( int iState )
|
|
{
|
|
*m_packet_header.m_iState = iState;
|
|
}
|
|
|
|
const uint8* CPacket::GetBuffer() const
|
|
{
|
|
return &m_pBuffer[0];
|
|
}
|
|
|
|
const uint8* CPacket::GetData() const
|
|
{
|
|
return &m_pBuffer[0] + sizeof(PACKETHEADER);
|
|
}
|
|
|
|
uint32 CPacket::GetBufferSize() const
|
|
{
|
|
return *m_packet_header.m_Size;
|
|
}
|
|
|
|
uint32 CPacket::GetDataSize() const
|
|
{
|
|
return *m_packet_header.m_Size - sizeof(PACKETHEADER);
|
|
}
|
|
|
|
DWORD CPacket::GetPacketID() const
|
|
{
|
|
return *m_packet_header.m_ID;
|
|
}
|
|
|
|
DWORD CPacket::GetCheckSum() const
|
|
{
|
|
return *m_packet_header.m_CheckSum;
|
|
}
|
|
|
|
int CPacket::GetState() const
|
|
{
|
|
return *m_packet_header.m_iState;
|
|
}
|
|
|
|
bool CPacket::IsValidHeader() const
|
|
{
|
|
return (GetBufferSize() >= sizeof(PACKETHEADER) );
|
|
}
|
|
|
|
bool CPacket::IsValidPacket() const
|
|
{
|
|
if(!IsValidHeader()) return false;
|
|
|
|
return (GetBufferSize() >= m_currentPos);
|
|
}
|
|
|
|
bool CPacket::CheckLeftPacketSize( int iAddSize )
|
|
{
|
|
if( m_currentPos + iAddSize >= MAX_BUFFER )
|
|
{
|
|
//LOG.PrintTimeAndLog( 0,"[ID:%d - SIZE:%d] << Packat Size Overflow!", GetPacketID(), m_currentPos + iAddSize );
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool CPacket::CheckRightPacketSize( int iAddSize )
|
|
{
|
|
if( m_currentPos + iAddSize >= MAX_BUFFER )
|
|
{
|
|
//LOG.PrintTimeAndLog( 0,"[ID:%d - SIZE:%d] >> Packat Size Overflow!", GetPacketID(), m_currentPos + iAddSize );
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|