diff options
Diffstat (limited to 'src/login/login.c')
-rw-r--r-- | src/login/login.c | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/src/login/login.c b/src/login/login.c index c1844cb25..4c40677fa 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -27,6 +27,7 @@ #include "login/ipban.h" #include "login/loginlog.h" #include "login/lclif.h" +#include "login/packets_ac_struct.h" #include "common/HPM.h" #include "common/cbasetypes.h" #include "common/conf.h" @@ -35,6 +36,7 @@ #include "common/memmgr.h" #include "common/md5calc.h" #include "common/nullpo.h" +#include "common/packetsstatic_len.h" #include "common/random.h" #include "common/showmsg.h" #include "common/socket.h" @@ -1368,36 +1370,37 @@ static bool login_client_login(int fd, struct login_session_data *sd) static bool login_client_login_otp(int fd, struct login_session_data *sd) __attribute__((nonnull (2))); static bool login_client_login_otp(int fd, struct login_session_data *sd) { +#if PACKETVER_MAIN_NUM >= 20170621 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO) // send ok response with fake token -#ifdef PACKETVER_ZERO -#if PACKETVER >= 20171127 - WFIFOHEAD(fd, 33); - WFIFOW(fd, 0) = 0x0ae3; - WFIFOW(fd, 2) = 33; // len - WFIFOL(fd, 4) = 0; // normal login - safestrncpy(WFIFOP(fd, 8), "S1000", 6); - safestrncpy(WFIFOP(fd, 28), "token", 6); - WFIFOSET(fd, 33); -#elif PACKETVER >= 20171123 - WFIFOHEAD(fd, 19); - WFIFOW(fd, 0) = 0x0ae3; - WFIFOW(fd, 2) = 19; // len - WFIFOL(fd, 4) = 0; // normal login - safestrncpy(WFIFOP(fd, 8), "S1000", 6); - safestrncpy(WFIFOP(fd, 14), "token", 6); - WFIFOSET(fd, 19); -#else - WFIFOHEAD(fd, 13); - WFIFOW(fd, 0) = 0x0ad1; - WFIFOW(fd, 2) = 13; // len - WFIFOL(fd, 4) = 0; // normal login - safestrncpy(WFIFOP(fd, 8), "token", 6); - WFIFOSET(fd, 13); -#endif + const int len = sizeof(struct PACKET_AC_LOGIN_OTP) + 6; // + "token" string + WFIFOHEAD(fd, len); + struct PACKET_AC_LOGIN_OTP *packet = WP2PTR(sd->fd); + memset(packet, 0, len); + packet->packet_id = HEADER_AC_LOGIN_OTP; + packet->packet_len = len; + packet->loginFlag = 0; // normal login +#if PACKETVER_MAIN_NUM >= 20171213 || PACKETVER_RE_NUM >= 20171213 || PACKETVER_ZERO_NUM >= 20171123 + safestrncpy(packet->loginFlag2, "S1000", 6); +#endif // PACKETVER_MAIN_NUM >= 20171213 || PACKETVER_RE_NUM >= 20171213 || PACKETVER_ZERO_NUM >= 20171123 + + safestrncpy(packet->token, "token", 6); + WFIFOSET(fd, len); return true; -#else // PACKETVER_ZERO +#else // PACKETVER_MAIN_NUM >= 20170621 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO) return false; -#endif // PACKETVER_ZERO +#endif // PACKETVER_MAIN_NUM >= 20170621 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO) +} + +static void login_client_login_mobile_otp_request(int fd, struct login_session_data *sd) __attribute__((nonnull (2))); +static void login_client_login_mobile_otp_request(int fd, struct login_session_data *sd) +{ +#if PACKETVER_MAIN_NUM >= 20181114 || PACKETVER_RE_NUM >= 20181114 || defined(PACKETVER_ZERO) + WFIFOHEAD(sd->fd, sizeof(struct PACKET_AC_REQ_MOBILE_OTP)); + struct PACKET_AC_REQ_MOBILE_OTP *packet = WP2PTR(sd->fd); + packet->packet_id = HEADER_AC_REQ_MOBILE_OTP; + packet->aid = sd->account_id; + WFIFOSET(fd, sizeof(struct PACKET_AC_REQ_MOBILE_OTP)); +#endif } static void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status) __attribute__((nonnull (2))); @@ -2275,6 +2278,7 @@ void login_defaults(void) login->parse_fromchar = login_parse_fromchar; login->client_login = login_client_login; login->client_login_otp = login_client_login_otp; + login->client_login_mobile_otp_request = login_client_login_mobile_otp_request; login->parse_request_connection = login_parse_request_connection; login->auth_ok = login_auth_ok; login->auth_failed = login_auth_failed; |