summaryrefslogtreecommitdiff
path: root/src/login/login.c
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2017-12-17 23:34:58 +0100
committerGitHub <noreply@github.com>2017-12-17 23:34:58 +0100
commitf385274cb59e251bc5aa3dc2fc918697523f7312 (patch)
tree30af8eceade42a24f517d96e6f4b2cbffee7e1d5 /src/login/login.c
parent082e635672c12be20e660091004c28920d9e2d43 (diff)
parentffd913f1323181eceed0aae178e9bdbea58e9c1d (diff)
downloadhercules-f385274cb59e251bc5aa3dc2fc918697523f7312.tar.gz
hercules-f385274cb59e251bc5aa3dc2fc918697523f7312.tar.bz2
hercules-f385274cb59e251bc5aa3dc2fc918697523f7312.tar.xz
hercules-f385274cb59e251bc5aa3dc2fc918697523f7312.zip
Merge pull request #1923 from 4144/fixpackets
Add support for Ragnarok zero clients, split packets.h again
Diffstat (limited to 'src/login/login.c')
-rw-r--r--src/login/login.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/login/login.c b/src/login/login.c
index 3db9558b8..a78276051 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -1360,6 +1360,41 @@ bool login_client_login(int fd, struct login_session_data *sd)
return false;
}
+bool login_client_login_otp(int fd, struct login_session_data *sd) __attribute__((nonnull (2)));
+bool login_client_login_otp(int fd, struct login_session_data *sd)
+{
+ // 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
+ return true;
+#else // PACKETVER_ZERO
+ return false;
+#endif // PACKETVER_ZERO
+}
+
void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status) __attribute__((nonnull (2)));
void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status)
{
@@ -2218,6 +2253,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->parse_request_connection = login_parse_request_connection;
login->auth_ok = login_auth_ok;
login->auth_failed = login_auth_failed;