Files
Sun1602/ProgramCommon/PacketControl/PacketControl_AuthFlow.h
T
2022-10-26 12:25:11 +08:00

203 lines
7.6 KiB
C++

#ifndef _PACKETCONTROL_AUTH_FLOW_H_
#define _PACKETCONTROL_AUTH_FLOW_H_
#include <SunAuth/AuthProtocol_CF.h>
//==============================================================================
// @brief: ISharemem.h
//
struct _WLAUTH_INFO;
typedef _WLAUTH_INFO WLAUTH_INFO, *PWLAUTH_INFO;
//
//
//==============================================================================
// @brief: PacketStruct_CF.h
//
struct MSG_CF_AUTH_TOKEN_PASS_SYN;
struct MSG_FC_AUTH_TOKEN_PASS_ACK;
struct MSG_CF_AUTH_TOKEN_GLOBAL_PASS_SYN;
struct MSG_FC_AUTH_TOKEN_GLOBAL_PASS_ACK;
struct MSG_CF_AUTH_TOKEN_NORTHA_PASS_SYN;
struct MSG_FC_AUTH_TOKEN_NORTHA_PASS_ACK;
//_JP000000_ONETIMEPASSWORD_AUTHFLOW_
struct MSG_CF_AUTH_OTP_PASS_SYN;
struct MSG_CF_AUTH_OTP_PASS_ACK;
//==============================================================================
// @brief: PacketStruct_GA.h
//
struct MSG_AU_AUTH_SERVER_SELECT_ACK;
//==============================================================================
// @brief: PacketStruct_CG.h
//
struct MSG_CG_CONNECTION_SERVER_SELECT_REQUEST_ACK;
//
//
//==============================================================================
// @name: namespace 'nsPacket'
//
namespace nsPacket {
//==============================================================================
// @name: CSAuthFlow
// @brief: Client & Server Packet Flow Definition for Authentication
//
struct CSAuthFlow
{
enum eMsgType;
#if defined(_SERVER)
struct Token {
BYTE* buffer;
size_t length;
};
#endif
#ifdef __KR000000_090128_CHANNELING__
//--------------------------------------------------------------------------
// @brief: in Client, MSG_CF_AUTH_TOKEN_PASS_SYN를 보내는 시점
// @returns:
// if(msg_size == 0) then FALSE;
// else { 패킷 구성 완료, 관련 처리 및 전송 }
// @code:
static WORD MakeStream(const WLAUTH_INFO& auth_info,
MSG_CF_AUTH_TOKEN_PASS_SYN::Stream* INOUT stream);
#if defined(_SERVER)
static BOOLEAN PreVerifier(const MSG_CF_AUTH_TOKEN_PASS_SYN* msg, WORD msg_size);
virtual BOOLEAN PostVerifier(const MSG_CF_AUTH_TOKEN_PASS_SYN::Stream* stream,
Token* id_info, Token* key_info);
#endif
#endif
#ifdef __NA000000_GLOBAL_AUTH_PROCESS__
//--------------------------------------------------------------------------
// @brief: in Client, MSG_CF_AUTH_TOKEN_GLOBAL_PASS_SYN를 보내는 시점
// @returns:
// if(msg_size == 0) then FALSE;
// else { 패킷 구성 완료, 관련 처리 및 전송 }
// @code:
// // user ID
static WORD MakeStream(const char* game_id, const char* auth_key, const char* mac_address,
MSG_CF_AUTH_TOKEN_GLOBAL_PASS_SYN::Stream* INOUT stream);
#if defined(_SERVER)
static BOOLEAN PreVerifier(const MSG_CF_AUTH_TOKEN_GLOBAL_PASS_SYN* msg, WORD msg_size);
virtual BOOLEAN PostVerifier(const MSG_CF_AUTH_TOKEN_GLOBAL_PASS_SYN::Stream* stream,
Token* id_info, Token* key_info);
static BOOLEAN ExtractAddinInfo(Token* INOUT extracted_key_info, //extracted 1st
Token* mac_address_info); //extracted 2nd
#endif
#endif
#ifdef __NA001334_090420_SERVER_SELECT_FACILITY__
//--------------------------------------------------------------------------
// @brief: in Client, MSG_CF_AUTH_TOKEN_PASS_SYN를 보내는 시점
// @returns:
// if(msg_size == 0) then FALSE;
// else { 패킷 구성 완료, 관련 처리 및 전송 }
// @code:
static WORD MakeStream(const char* userID, const ReAuthTokenStream& reauth_info,
MSG_CF_AUTH_REAUTH_PASS_SYN* INOUT stream);
#if defined(_SERVER)
static WORD MakeStream(const char* userID, const ReAuthTokenStream& reauth_info,
MSG_CG_CONNECTION_SERVER_SELECT_REQUEST_ACK* INOUT stream);
static WORD MakeStream(const char* nullID, const ReAuthTokenStream& reauth_info,
MSG_AU_AUTH_SERVER_SELECT_ACK* INOUT stream);
static BOOLEAN PreVerifier(const MSG_CF_AUTH_REAUTH_PASS_SYN* msg, WORD msg_size);
virtual BOOLEAN PostVerifier(const MSG_CF_AUTH_REAUTH_PASS_SYN* stream,
Token* id_info, Token* key_info);
#endif
static WORD MakeReAuthStream(const char* userID, const ReAuthTokenStream& reauth_info,
ReAuthTokenStream* stream);
#endif
#ifdef __NA000000_NORTH_AMERICA_HANGAME_CHANNELING__
static WORD MakeStream(const char* memberID, const char* authString,
MSG_CF_AUTH_TOKEN_NORTHA_PASS_SYN* INOUT stream);
#if defined(_SERVER)
static BOOLEAN PreVerifier(const MSG_CF_AUTH_TOKEN_NORTHA_PASS_SYN* msg, WORD msg_size);
virtual BOOLEAN PostVerifier(const MSG_CF_AUTH_TOKEN_NORTHA_PASS_SYN* stream,
Token* id_info, Token* key_info);
#endif
#endif
#ifdef _RU_INGAMBA_AUTH_PROCESS
static WORD MakeStream(const IngambaAuthInfo* auth_info,
MSG_CF_AUTH_PASS_RU_INGAMBA_SYN* INOUT auth_msg);
#if defined(_SERVER)
static BOOLEAN PreVerifier(const MSG_CF_AUTH_PASS_RU_INGAMBA_SYN* auth_msg, WORD msg_size);
virtual BOOLEAN PostVerifier(const MSG_CF_AUTH_PASS_RU_INGAMBA_SYN* auth_msg);
#endif
#endif
#ifdef _JP000000_ONETIMEPASSWORD_AUTHFLOW_
#ifdef _SERVER
static BOOLEAN PreVerifier(const MSG_CF_AUTH_OTP_PASS_SYN* msg, WORD msg_size);
static BOOLEAN PostVerifier(const MSG_CF_AUTH_OTP_PASS_SYN* msg, OneTimePassword* extracted);
#endif
static WORD MakeOtpStream(const char* user_id, const OneTimePassword& otp_info,
MSG_CF_AUTH_OTP_PASS_SYN* INOUT stream);
#endif
#ifdef _JP_0_20100723_GAMECHU_AUTHFLOW_
#ifdef _SERVER
static BOOLEAN PreVerifier(const MSG_CF_AUTH_TOKEN_JP_GAMECHU_SYN* msg, WORD msg_size);
static BOOLEAN PostVerifier(const MSG_CF_AUTH_TOKEN_JP_GAMECHU_SYN* msg);
#endif
static WORD MakeStream(wchar_t first_parameter[GameChuInfoStream::MAX_FIRST_PARAMETER],
wchar_t second_parameter[GameChuInfoStream::MAX_SECOND_PARAMETER],
MSG_CF_AUTH_TOKEN_JP_GAMECHU_SYN& OUT msg);
#endif
#ifdef __CN_20100909_SECURITY_TOKEN__
#ifdef _SERVER
static BOOLEAN PreVerifier(const MSG_CF_AUTH_SECURITY_TOKEN_SYN* msg, WORD msg_size);
static BOOLEAN PostVerifier(const MSG_CF_AUTH_SECURITY_TOKEN_SYN* msg);
#endif
static WORD MakeOtpStream(const char* security_token_code_,
MSG_CF_AUTH_SECURITY_TOKEN_SYN& OUT msg);
#endif
#ifdef _CN_ZY_AUTH_PROCESS
#ifdef _SERVER
static BOOLEAN PreVerifier(const MSG_CF_AUTH_ZY_PASSWORD_CHECK_SYN* msg, WORD msg_size);
#endif
#endif //_CN_ZY_AUTH_PROCESS
}; //end of namespace
//==============================================================================
// @brief: Sample Codes
//
#define __KR000000_090128_CHANNELING__SAMPLE__ (0)
#if __KR000000_090128_CHANNELING__SAMPLE__
{
WLAUTH_INFO auth_info; //<-- 값이 이미 설정되어 있다.
MSG_CF_AUTH_TOKEN_PASS_SYN msg;
WORD msg_size = nsPacket::CSAuthFlow::MakeStream(auth_info, msg);
if(msg_size) {
Crypt::PacketEncode((BYTE*)&msg->info_stream,
msg_size,
(BYTE*)&msg->info_stream,
encode_key /*AuthServer에서 받아둔 키*/);
msg_size += (WORD)sizeof(MSG_BASE);
GlobalFunc::SendPacket(CI_AUTHSERVERIDX, &msg, msg_size);
//SendPacket ~~
}
else {
// error handling
}
}
#endif
}; // end of namespace nsPacket
//
//
//==============================================================================
//#endif //__KR000000_090128_CHANNELING__
#endif //_PACKETCONTROL_AUTH_FLOW_H_