#include "stdafx.h"
#include "BasicFamilyParser.h"
#include "QQ.h"
#include "RequestLoginTokenReplyPacket.h"
#include "LoginReplyPacket.h"
#include "RequestLoginTokenPacket.h"
#include "LoginPacket.h"
CBasicFamilyParser::CBasicFamilyParser()
{
}
CBasicFamilyParser::~CBasicFamilyParser()
{
}
CBasicInPacket* CBasicFamilyParser::ParseInPacket(BYTE *pbBuf, size_t iBufLen, CQQUser *pQQUser) const
{
CBasicInPacket* pBasicInPacket = NULL;
short sCommand = GetCommand(pbBuf, iBufLen, pQQUser);
if( sCommand == QQ.QQ_CMD_REQUEST_LOGIN_TOKEN )
{
pBasicInPacket = new CRequestLoginTokenReplyPacket(pQQUser);
}
else if( sCommand == QQ.QQ_CMD_LOGIN )
{
pBasicInPacket = new CLoginReplyPacket(pQQUser);
}
if( pBasicInPacket != NULL )
{
if( pBasicInPacket->ParseBuffer(pbBuf, iBufLen) )
return pBasicInPacket;
SAFE_DELETE(pBasicInPacket);
}
return NULL;
}
CBasicOutPacket* CBasicFamilyParser::CreateOutPacket(short sCommand, CQQUser *pQQUser) const
{
if( sCommand == QQ.QQ_CMD_REQUEST_LOGIN_TOKEN )
{
return new CRequestLoginTokenPacket(pQQUser);
}
else if( sCommand == QQ.QQ_CMD_LOGIN )
{
return new CLoginPacket(pQQUser);
}
return NULL;
}
short CBasicFamilyParser::GetCommand(BYTE *pbBuf, size_t iBufLen, CQQUser *pQQUser) const
{
if( !pQQUser->IsUDP() )
OFFSET_BYTES(pbBuf, iBufLen, 5)
else
OFFSET_BYTES(pbBuf, iBufLen, 3)
short sCommand;
GET_WORD(pbBuf, iBufLen, sCommand);
return sCommand;
}