Files
Sun1602/Server/AuthSystem/AuthCommon/AuthInternal.cpp
T
2022-10-26 12:25:11 +08:00

216 lines
6.9 KiB
C++

#include "stdafx.h"
#include "AuthInternal.hxx"
#if defined(_DEBUG_SHOW_THE_PACKET_FLOW_)
#define CATE_PROTO_NODE(category, protocol) \
{ category, protocol, sizeof(MSG_##protocol), "MSG_"#protocol }
struct CateProtoNode {
union {
struct {
BYTE category, protocol;
};
WORD category_and_protocol;
};
WORD packet_size;
const char* name;
};
#include "AuthProtocol_AS.h"
#include "AuthProtocol_BS.h"
#include <SunAuth/AuthProtocol_CF.h>
#include "AuthProtocol_FS.h"
#include <SunAuth/AuthProtocol_GA.h>
#include "AuthProtocol_RS.h"
static CateProtoNode cateProtoNode[] =
{
// 접속후 LoginFront에서 최초로 클라이언트로 보냄
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_READY_CMD),
// 클라이언트가 접속 요청(버전확인)
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_VERIFY_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_VERIFY_ACK),
// ID, PW 체크 - START!
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_ID_PASSWORD_CHECK_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_ID_PASSWORD_CHECK_SYN),
//#ifdef _SHAPE_AUTH
// // ID, PW 체크 - 형상 인증
// CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_SHAPE_SYN),
// CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_SHAPE_SYN),
// CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_SHAPE_ACK),
// CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_SHAPE_ACK),
//#endif
#ifdef _SECURE_AUTH
// ID, PW 체크 - 매트릭스 카드 인증
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_MATRIX_CARD_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_MATRIX_CARD_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_MATRIX_CARD_ACK),
CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_MATRIX_CARD_ACK),
#endif
#ifdef _JP000000_ONETIMEPASSWORD_AUTHFLOW_
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_OTP_PASS_CMD),
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_OTP_PASS_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_OTP_PASS_ACK),
//CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_MATRIX_CARD_ACK),
#endif
// ID, PW 체크 - END!
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_ID_PASSWORD_CHECK_ACK),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_ID_PASSWORD_CHECK_ACK),
// 서버 목록 요청
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_SERVER_LIST_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_SERVER_LIST_NTF),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_SERVER_LIST_WORLD_ACK),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_SERVER_LIST_CHANNEL_ACK),
// 서버 선택 - START!
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_SERVER_SELECT_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_SERVER_SELECT_SYN),
// 서버 선택 - GameAgent 검증 및 미리 알림
CATE_PROTO_NODE(CATEGORY_AUTH, SA_AUTH_NEWCLIENT_TO_GAMEAGENT_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, AG_AUTH_NEWCLIENT_TO_GAMEAGENT_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_NEWCLIENT_TO_GAMEAGENT_ACK),
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_NEWCLIENT_TO_GAMEAGENT_ACK),
// 서버 선택 - END!
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_SERVER_SELECT_ACK),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_SERVER_SELECT_ACK),
// PC LOGIN, LOGOUT CMD From GameAgent
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_PC_LOGIN_CMD),
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_PC_LOGIN_CMD),
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_PC_LOGOUT_CMD),
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_PC_LOGOUT_CMD),
// PC LOGOUT ASK To GameAgent
CATE_PROTO_NODE(CATEGORY_AUTH, SA_AUTH_ASK_PC_LOGOUT_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, AG_AUTH_ASK_PC_LOGOUT_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_ASK_PC_LOGOUT_ACK),
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_ASK_PC_LOGOUT_ACK),
// GameAgent LOGIN
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_GAMEAGENT_LOGIN_CMD),
// Billing 마감을 GameAgnet에 알림
CATE_PROTO_NODE(CATEGORY_AUTH, SA_AUTH_BILLING_ALARM_CMD),
CATE_PROTO_NODE(CATEGORY_AUTH, AG_AUTH_BILLING_ALARM_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_BILLING_ALARM_ACK),
// Client Disconnect 통지 받음 From LoginFront
CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_CLIENT_DISCONNECT_CMD),
// Client Disconnect 명령 내림 To LoginFront
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_CLIENT_DISCONNECT_CMD),
// PC Name과 UserCount NTF From GameAgent
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_PC_NAME_NTF),
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_PC_NAME_NTF),
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_USER_COUNT_NTF),
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_USER_COUNT_NTF),
// NTF To LoginFront
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_GAME_VERSION_NTF),
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_CONTROL_IPLIST_NTF),
// NTF To AuthAgent
CATE_PROTO_NODE(CATEGORY_AUTH, SA_AUTH_AGENT_IP_LIST_NTF),
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_REAUTH_PASS_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, FS_AUTH_REAUTH_PASS_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, AU_AUTH_SERVER_SELECT_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, AU_AUTH_SERVER_SELECT_ACK),
// 런쳐가 패치버전 요청
CATE_PROTO_NODE(CATEGORY_AUTH, CF_AUTH_REQ_PATCH_VER_SYN),
CATE_PROTO_NODE(CATEGORY_AUTH, FC_AUTH_REQ_PATCH_VER_ACK),
{ 0, 0, 0, 0 },
};
static CateProtoNode cateProtoFilterNode[] =
{
CATE_PROTO_NODE(CATEGORY_AUTH, SF_AUTH_SERVER_LIST_NTF),// AuthServer -> LoginFront
CATE_PROTO_NODE(CATEGORY_AUTH, GA_AUTH_USER_COUNT_NTF), // GameAgent -> AuthAgent
CATE_PROTO_NODE(CATEGORY_AUTH, AS_AUTH_USER_COUNT_NTF), // AuthAgent -> AuthServer
{ 0, 0, 0, 0 },
};
void
AuthPacketFlowAnalysis::Instance()
{
}
void
AuthPacketFlowAnalysis::ParsePacket(MSG_BASE* msg, WORD size)
{
const WORD protocol = MAKEWORD(msg->m_byCategory, msg->m_byProtocol);
CateProtoNode* it = 0;
it = cateProtoFilterNode;
while(const WORD src = it->category_and_protocol) {
if(src == protocol) {
return;
}
++it;
}
it = cateProtoNode;
while(const WORD src = it->category_and_protocol) {
if(src != protocol) {
++it;
continue;
}
printf("[%-40s][%4u]\n", it->name, it->packet_size);
return;
}
return ParsePacket((MSG_BASE_INTERNAL*)msg, size);
}
void
AuthPacketFlowAnalysis::ParsePacket(MSG_BASE_INTERNAL* msg, WORD size)
{
const WORD protocol = MAKEWORD(msg->m_byCategory, msg->m_byProtocol);
CateProtoNode* it = 0;
it = cateProtoFilterNode;
while(const WORD src = it->category_and_protocol) {
if(src == protocol) {
return;
}
++it;
}
it = cateProtoNode;
while(const WORD src = it->category_and_protocol) {
if(src != protocol) {
++it;
continue;
}
printf("[%-40s][%4u]\n", it->name, it->packet_size);
return;
}
printf("Can't Find Protocol %3u:%3u\n", msg->m_byCategory, msg->m_byProtocol);
}
void
AuthPacketFlowAnalysis::TracingFlow(const char* file, const char* function, const size_t line)
{
printf("[FlowCapture] [%-40s] - line: %3u (file:%s)\n", function, line, file);
}
#else //!_DEBUG_SHOW_THE_PACKET_FLOW_
#endif //!defined(_DEBUG_SHOW_THE_PACKET_FLOW_)