#pragma once #include "SNetMessage.h" // { Auth Server <-> Client const unsigned short TM_AC_RESULT = 10000; const unsigned short TM_CA_VERSION = 10001; const unsigned short TM_AC_RESULT_WITH_STRING = 10002; /// 2011.05.20 GNE 방식 인증 - prodongi const unsigned short TM_CA_ACCOUNT = 10010; const unsigned short TM_CA_OTP_ACCOUNT = 10011; const unsigned short TM_CA_IMBC_ACCOUNT = 10012; ///< floyd 3.11.1 iMBC 채널링 구현 const unsigned short TM_CA_RUSSIA_SID = 10013; const unsigned short TM_AC_ACCOUNT_INFO = 10014; const unsigned short TM_CA_SERVER_LIST = 10021; const unsigned short TM_AC_SERVER_LIST = 10022; const unsigned short TM_CA_SELECT_SERVER = 10023; const unsigned short TM_AC_SELECT_SERVER = 10024; const unsigned short TM_AC_UPDATE_PENDING_TIME = 10025; // } ////////////////////////////////////////////////////////////////// // 업로드서버 const unsigned short TM_CU_LOGIN = 50005; const unsigned short TM_UC_LOGIN_RESULT = 50006; const unsigned short TM_CU_UPLOAD = 50007; const unsigned short TM_UC_UPLOAD = 50008; ////////////////////////////////////////////////////////////////// #pragma pack( 1 ) struct TS_AC_RESULT : TS_MESSAGE { TS_AC_RESULT( unsigned short _request_msg_id, unsigned short _result, int _value ) : request_msg_id( _request_msg_id ), result( _result ), value( _value ) { size = sizeof( *this ); id = TM_AC_RESULT; set_check_sum(); } unsigned short request_msg_id; unsigned short result; /** 1: 1이면 eula accept 함. 0이면 eula창 띄워야 함. 2: 1이면 경고창 띄움. 0이면 안 띄움. */ int value; }; /// 2011.05.20 GNE 방식 인증 - prodongi struct TS_AC_RESULT_WITH_STRING : TS_MESSAGE { TS_AC_RESULT_WITH_STRING( unsigned short _request_msg_id, unsigned short _result, int _value ) : request_msg_id( _request_msg_id ), result( _result ), value( _value ), strSize( 0 ) { size = sizeof( *this ); id = TM_AC_RESULT_WITH_STRING; set_check_sum(); } unsigned short request_msg_id; unsigned short result; int value; int strSize; // 이하해당스트링날아옴 }; struct TS_CA_VERSION : TS_MESSAGE { TS_CA_VERSION() _INIT( TM_CA_VERSION ) char szVersion[20]; }; struct TS_CA_ACCOUNT : TS_MESSAGE { TS_CA_ACCOUNT() _INIT( TM_CA_ACCOUNT ) char account[GameRule::MAX_ACCOUNT_LEN + 1]; size_t password_en_len; char password[GameRule::MAX_ACCOUNT_LEN + GameRule::MAX_CRYPTO_BLOCK_LEN + 1]; // 이후 아래와 같은 struct들이 줄줄이 따라 붙음 struct AdditionalInfo { char type; // AdditionalInfoType enum이들어감 unsigned short size; // 뒤로 data[size]가 붙어 날아 옴 }; enum AdditionalInfoType { BLACKBOX, MACADDRESS, }; }; /// 대만 OTP 사용 한 웹 로그인 struct TS_CA_OTP_ACCOUNT : TS_MESSAGE { TS_CA_OTP_ACCOUNT() _INIT( TM_CA_OTP_ACCOUNT ) char account[ GameRule::MAX_ACCOUNT_LEN + 1 ]; // #2.1.12 size_t otp_en_len; char OTP[48 + GameRule::MAX_CRYPTO_BLOCK_LEN]; }; /// floyd 3.11.1 iMBC 채널링 구현 struct TS_CA_IMBC_ACCOUNT : TS_MESSAGE { TS_CA_IMBC_ACCOUNT() _INIT( TM_CA_IMBC_ACCOUNT ) char account[ GameRule::MAX_ACCOUNT_LEN + 1 ]; ///< #2.1.12 // 실제 계정 이름 뒤에 5바이트 여유 필요(최대 MAX_ACCOUNT_LEN - 5 길이 사용 가능) size_t password_en_len; char password[48 + GameRule::MAX_CRYPTO_BLOCK_LEN]; }; struct TS_CA_RUSSIA_SID : TS_MESSAGE { TS_CA_RUSSIA_SID() _INIT( TM_CA_RUSSIA_SID ) size_t sid_en_len; char sid[ GameRule::MAX_ACCOUNT_LEN + GameRule::MAX_CRYPTO_BLOCK_LEN]; }; struct TS_AC_ACCOUNT_INFO : TS_MESSAGE { TS_AC_ACCOUNT_INFO() _INIT( TM_AC_ACCOUNT_INFO ) char account[GameRule::MAX_ACCOUNT_LEN + 1]; int user_no; }; struct TS_CA_SERVER_LIST : TS_MESSAGE { TS_CA_SERVER_LIST() _INIT( TM_CA_SERVER_LIST ) }; struct TS_CA_SELECT_SERVER : TS_MESSAGE { TS_CA_SELECT_SERVER() _INIT( TM_CA_SELECT_SERVER ) unsigned short server_idx; }; struct TS_AC_SELECT_SERVER : TS_MESSAGE { TS_AC_SELECT_SERVER() _INIT( TM_AC_SELECT_SERVER ) unsigned short result; size_t one_time_key_en_len; unsigned char one_time_key[sizeof( __int64 ) + GameRule::MAX_CRYPTO_BLOCK_LEN]; AR_TIME pending_time; }; const unsigned short TM_CS_ACCOUNT_WITH_AUTH = 2005; struct TS_CS_ACCOUNT_WITH_AUTH : TS_MESSAGE { TS_CS_ACCOUNT_WITH_AUTH() _INIT( TM_CS_ACCOUNT_WITH_AUTH ) char account[ GameRule::MAX_ACCOUNT_LEN + 1 ]; // #2.1.12 __int64 one_time_key; }; struct TS_SERVER_INFO { unsigned short server_idx; char server_name[21]; bool is_adult_server; char server_screenshot_url[256]; char server_ip[16]; int server_port; unsigned short user_ratio; }; struct TS_AC_SERVER_LIST : TS_MESSAGE { TS_AC_SERVER_LIST() _INIT( TM_AC_SERVER_LIST ) unsigned short last_login_server_idx; unsigned short count; // 이 아래로 TS_SERVER_INFO 들이 붙게 됨 }; struct TS_AC_UPDATE_PENDING_TIME : TS_MESSAGE { TS_AC_UPDATE_PENDING_TIME() _INIT( TM_AC_UPDATE_PENDING_TIME ) AR_TIME pending_time; }; struct TS_CU_LOGIN : TS_MESSAGE { TS_CU_LOGIN() _INIT( TM_CU_LOGIN ) int client_id; int account_id; int guild_id; int one_time_password; char raw_server_name[32]; }; struct TS_UC_LOGIN_RESULT : TS_MESSAGE { TS_UC_LOGIN_RESULT() _INIT( TM_UC_LOGIN_RESULT ) unsigned short result; }; struct TS_CU_UPLOAD : TS_MESSAGE { TS_CU_UPLOAD() _INIT( TM_CU_UPLOAD ) int file_length; }; struct TS_UC_UPLOAD : TS_MESSAGE { TS_UC_UPLOAD() _INIT( TM_UC_UPLOAD ) unsigned short result; }; #pragma pack()