From 26b82063329fd23d53851edf0776810daaf0fc6d Mon Sep 17 00:00:00 2001 From: XMRig Date: Tue, 6 Jun 2017 06:35:17 +0300 Subject: [PATCH] Basic login parse. --- src/net/Client.cpp | 30 ++++++++++++++++++++++++++++++ src/net/Client.h | 2 ++ 2 files changed, 32 insertions(+) diff --git a/src/net/Client.cpp b/src/net/Client.cpp index 8b80cd25..53b2504b 100644 --- a/src/net/Client.cpp +++ b/src/net/Client.cpp @@ -136,6 +136,21 @@ void Client::send(char *data) } +bool Client::parseLogin(const json_t *result, int *code) +{ + const char *id = json_string_value(json_object_get(result, "id")); + if (!id || strlen(id) >= sizeof(m_rpcId)) { + *code = 1; + return false; + } + + memset(m_rpcId, 0, sizeof(m_rpcId)); + memcpy(m_rpcId, id, strlen(id)); + + return true; +} + + int Client::resolve(const char *host) { setState(HostLookupState); @@ -227,6 +242,21 @@ void Client::parseResponse(int64_t id, const json_t *result, const json_t *error return; } + + if (!json_is_object(result)) { + return; + } + + if (id == 1) { + int code = -1; + if (!parseLogin(result, &code)) { + LOG_ERR("[%s:%u] login error code: %d", m_host, m_port, code); + return close(); + } + + return; + } + } diff --git a/src/net/Client.h b/src/net/Client.h index 89167aff..7db3ae3f 100644 --- a/src/net/Client.h +++ b/src/net/Client.h @@ -58,6 +58,7 @@ public: private: constexpr static size_t kRecvBufSize = 4096; + bool parseLogin(const json_t *result, int *code); int resolve(const char *host); void close(); void connect(struct sockaddr *addr); @@ -75,6 +76,7 @@ private: static Client *getClient(void *data); char *m_host; + char m_rpcId[64]; IClientListener *m_listener; int64_t m_retries; int64_t m_sequence;