//input.cpp açılır ve aratılır
int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
//input.cpp fonksiyon değiştiriir.
int CInputHandshake::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
{
if (bHeader == HEADER_CG_ENTERGAME)
return 0;
if (bHeader == HEADER_CG_MARK_LOGIN)
{
if (!guild_mark_server)
{
// ²÷¾î¹ö·Á! - ¸¶Å© ¼¹ö°¡ ¾Æ´Ñµ¥ ¸¶Å©¸¦ ¿äûÇÏ·Á°í?
sys_err("Guild Mark login requested but i'm not a mark server!");
d->SetPhase(PHASE_CLOSE);
return 0;
}
// ¹«Á¶°Ç ÀÎÁõ --;
sys_log(0, "MARK_SERVER: Login");
d->SetPhase(PHASE_LOGIN);
return 0;
}
else if (bHeader == HEADER_CG_STATE_CHECKER)
{
if (d->isChannelStatusRequested()) {
return 0;
}
d->SetChannelStatusRequested(true);
db_clientdesc->DBPacket(HEADER_GD_REQUEST_CHANNELSTATUS, d->GetHandle(), NULL, 0);
}
else if (bHeader == HEADER_CG_PONG)
Pong(d);
else if (bHeader == HEADER_CG_HANDSHAKE)
Handshake(d, c_pData);
[HASH=2]#ifdef[/HASH] _IMPROVED_PACKET_ENCRYPTION_
else if (bHeader == HEADER_CG_KEY_AGREEMENT)
{
// Send out the key agreement completion packet first
// to help client to enter encryption mode
d->SendKeyAgreementCompleted();
// Flush socket output before going encrypted
d->ProcessOutput();
TPacketKeyAgreement* p = (TPacketKeyAgreement*)c_pData;
if (!d->IsCipherPrepared())
{
sys_err ("Cipher isn't prepared. %s maybe a Hacker.", inet_ntoa(d->GetAddr().sin_addr));
d->DelayedDisconnect(5);
return 0;
}
if (d->FinishHandshake(p->wAgreedLength, p->data, p->wDataLength)) {
// Handshaking succeeded
if (g_bAuthServer) {
d->SetPhase(PHASE_AUTH);
}
else {
d->SetPhase(PHASE_LOGIN);
}
}
else {
sys_log(0, "[CInputHandshake] Key agreement failed: al=%u dl=%u",
p->wAgreedLength, p->wDataLength);
d->SetPhase(PHASE_CLOSE);
}
}
[HASH=3]#endif[/HASH] // _IMPROVED_PACKET_ENCRYPTION_
else
{
sys_err("Handshake phase does not handle packet %d (fd %d)", bHeader, d->GetSocket());
d->SetPhase(PHASE_CLOSE); // maybe disconnect player from server.
return -1;
}
return 0;
}