diff options
author | George Hazan <ghazan@miranda.im> | 2022-01-09 14:44:33 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2022-01-09 14:44:33 +0300 |
commit | a82056a6527131bcbfae03866b010f5bb7151a2f (patch) | |
tree | 1aa501630f305ed5dfed6af9159adb734396f7d0 /protocols/ICQ-WIM/src | |
parent | 5036c841e9ac3cc32b4638ad17c531a02db7474d (diff) |
ICQ: RAPI requests code cleaning
Diffstat (limited to 'protocols/ICQ-WIM/src')
-rw-r--r-- | protocols/ICQ-WIM/src/http.cpp | 27 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/http.h | 11 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/poll.cpp | 7 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.cpp | 25 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/proto.h | 2 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/server.cpp | 37 | ||||
-rw-r--r-- | protocols/ICQ-WIM/src/version.h | 2 |
7 files changed, 58 insertions, 53 deletions
diff --git a/protocols/ICQ-WIM/src/http.cpp b/protocols/ICQ-WIM/src/http.cpp index c301e3a5b7..9e6dfe454b 100644 --- a/protocols/ICQ-WIM/src/http.cpp +++ b/protocols/ICQ-WIM/src/http.cpp @@ -99,6 +99,30 @@ void __cdecl CIcqProto::ServerThread(void*) ///////////////////////////////////////////////////////////////////////////////////////// +AsyncRapiRequest::AsyncRapiRequest(CIcqProto *ppro, const char *pszMethod, MTHttpRequestHandler pFunc) : + AsyncHttpRequest(CONN_RAPI, REQUEST_POST, ICQ_ROBUST_SERVER, pFunc) +{ + params.set_name("params"); + + if (ppro->getByte(DB_KEY_PHONEREG)) { + m_szUrl.AppendChar('/'); + m_szUrl.Append(pszMethod); + + AddHeader("Content-Type", "application/json"); + request << CHAR_PARAM("aimsid", ppro->m_aimsid); + } + else request << CHAR_PARAM("method", pszMethod); +} + +void AsyncRapiRequest::OnPush() +{ + request << CHAR_PARAM("reqId", m_reqId) << params; + + m_szParam = ptrW(json_write(&request)); +} + +///////////////////////////////////////////////////////////////////////////////////////// + AsyncHttpRequest::AsyncHttpRequest(IcqConnection conn, int iType, const char *szUrl, MTHttpRequestHandler pFunc) : m_conn(conn) { @@ -106,6 +130,7 @@ AsyncHttpRequest::AsyncHttpRequest(IcqConnection conn, int iType, const char *sz requestType = iType; m_szUrl = szUrl; m_pFunc = pFunc; + timeout = 10000; GUID packetId; UuidCreate(&packetId); @@ -237,7 +262,7 @@ void CIcqProto::Push(MHttpRequest *p) { AsyncHttpRequest *pReq = (AsyncHttpRequest*)p; - pReq->timeout = 10000; + pReq->OnPush(); { mir_cslock lck(m_csHttpQueue); m_arHttpQueue.insert(pReq); diff --git a/protocols/ICQ-WIM/src/http.h b/protocols/ICQ-WIM/src/http.h index 4f3c9cfb59..c2262a53b4 100644 --- a/protocols/ICQ-WIM/src/http.h +++ b/protocols/ICQ-WIM/src/http.h @@ -15,6 +15,17 @@ struct AsyncHttpRequest : public MTHttpRequest<CIcqProto> AsyncHttpRequest(IcqConnection, int type, const char *szUrl, MTHttpRequestHandler pFunc = nullptr); void ReplaceJsonParam(const JSONNode&); + + virtual void OnPush() {}; +}; + +struct AsyncRapiRequest : public AsyncHttpRequest +{ + JSONNode request, params; + + AsyncRapiRequest(CIcqProto *ppro, const char *pszMethod, MTHttpRequestHandler pFunc = nullptr); + + void OnPush() override; }; ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/ICQ-WIM/src/poll.cpp b/protocols/ICQ-WIM/src/poll.cpp index d831b1af3d..d61c231344 100644 --- a/protocols/ICQ-WIM/src/poll.cpp +++ b/protocols/ICQ-WIM/src/poll.cpp @@ -179,11 +179,8 @@ void CIcqProto::ProcessHistData(const JSONNode &ev) __int64 srvInfoVer = _wtoi64(ev["mchatState"]["infoVersion"].as_mstring()); __int64 srvMembersVer = _wtoi64(ev["mchatState"]["membersVersion"].as_mstring()); if (srvInfoVer != getId(hContact, "InfoVersion") || srvMembersVer != getId(hContact, "MembersVersion")) { - auto *pReq = new AsyncHttpRequest(CONN_RAPI, REQUEST_POST, ICQ_ROBUST_SERVER, &CIcqProto::OnGetChatInfo); - JSONNode request, params; params.set_name("params"); - params << WCHAR_PARAM("sn", wszId) << INT_PARAM("memberLimit", 100) << CHAR_PARAM("aimSid", m_aimsid); - request << CHAR_PARAM("method", "getChatInfo") << CHAR_PARAM("reqId", pReq->m_reqId) << params; - pReq->m_szParam = ptrW(json_write(&request)); + auto *pReq = new AsyncRapiRequest(this, "getChatInfo", &CIcqProto::OnGetChatInfo); + pReq->params << WCHAR_PARAM("sn", wszId) << INT_PARAM("memberLimit", 100) << CHAR_PARAM("aimSid", m_aimsid); pReq->pUserInfo = si; Push(pReq); } diff --git a/protocols/ICQ-WIM/src/proto.cpp b/protocols/ICQ-WIM/src/proto.cpp index 1c143f4b9d..67e5c4f394 100644 --- a/protocols/ICQ-WIM/src/proto.cpp +++ b/protocols/ICQ-WIM/src/proto.cpp @@ -330,11 +330,8 @@ void CIcqProto::SendMarkRead() while (m_arMarkReadQueue.getCount()) { IcqCacheItem *pUser = m_arMarkReadQueue[0]; - auto *pReq = new AsyncHttpRequest(CONN_RAPI, REQUEST_POST, ICQ_ROBUST_SERVER); - JSONNode request, params; params.set_name("params"); - params << WCHAR_PARAM("sn", GetUserId(pUser->m_hContact)) << INT64_PARAM("lastRead", getId(pUser->m_hContact, DB_KEY_LASTMSGID)); - request << CHAR_PARAM("method", "setDlgStateWim") << CHAR_PARAM("reqId", pReq->m_reqId) << params; - pReq->m_szParam = ptrW(json_write(&request)); + auto *pReq = new AsyncRapiRequest(this, "setDlgStateWim"); + pReq->params << WCHAR_PARAM("sn", GetUserId(pUser->m_hContact)) << INT64_PARAM("lastRead", getId(pUser->m_hContact, DB_KEY_LASTMSGID)); Push(pReq); m_arMarkReadQueue.remove(0); @@ -524,22 +521,10 @@ HANDLE CIcqProto::SearchBasic(const wchar_t *pszSearch) if (!m_bOnline) return nullptr; - bool bPhoneReg = getByte(DB_KEY_PHONEREG) != 0; - auto *pReq = new AsyncHttpRequest(CONN_RAPI, REQUEST_POST, bPhoneReg ? "https://u.icq.net/api/v65/rapi/search" : ICQ_ROBUST_SERVER, &CIcqProto::OnSearchResults); - - JSONNode request; - if (bPhoneReg) { - pReq->AddHeader("Content-Type", "application/json"); - request << CHAR_PARAM("aimsid", m_aimsid); - } - else request << CHAR_PARAM("method", "search"); - - JSONNode params; params.set_name("params"); - params << WCHAR_PARAM(*pszSearch == '+' ? "phonenum" : "keyword", pszSearch); - request << CHAR_PARAM("reqId", pReq->m_reqId) << params; - - pReq->m_szParam = ptrW(json_write(&request)); + auto *pReq = new AsyncRapiRequest(this, "search", &CIcqProto::OnSearchResults); + pReq->params << WCHAR_PARAM(*pszSearch == '+' ? "phonenum" : "keyword", pszSearch); Push(pReq); + return pReq; } diff --git a/protocols/ICQ-WIM/src/proto.h b/protocols/ICQ-WIM/src/proto.h index ea1082bc08..440d4905b4 100644 --- a/protocols/ICQ-WIM/src/proto.h +++ b/protocols/ICQ-WIM/src/proto.h @@ -213,6 +213,8 @@ struct IcqFileTransfer : public MZeroedObject class CIcqProto : public PROTO<CIcqProto> { + friend struct AsyncRapiRequest; + class CIcqProtoImpl { friend class CIcqProto; diff --git a/protocols/ICQ-WIM/src/server.cpp b/protocols/ICQ-WIM/src/server.cpp index 20eb6d63ff..b1eb751839 100644 --- a/protocols/ICQ-WIM/src/server.cpp +++ b/protocols/ICQ-WIM/src/server.cpp @@ -629,31 +629,18 @@ void CIcqProto::RetrieveUserHistory(MCONTACT hContact, __int64 startMsgId, bool if (startMsgId == 0) startMsgId = -1; - bool bPhoneReg = getByte(DB_KEY_PHONEREG) != 0; - auto *pReq = new AsyncHttpRequest(CONN_RAPI, REQUEST_POST, bPhoneReg ? "https://u.icq.net/api/v65/rapi/getHistory" : ICQ_ROBUST_SERVER, &CIcqProto::OnGetUserHistory); + __int64 patchVer = getId(hContact, DB_KEY_PATCHVER); + if (patchVer == 0) + patchVer = 1; + + auto *pReq = new AsyncRapiRequest(this, "getHistory", &CIcqProto::OnGetUserHistory); #ifndef _DEBUG pReq->flags |= NLHRF_NODUMPSEND; #endif pReq->hContact = hContact; pReq->pUserInfo = (bCreateRead) ? pReq : 0; - - __int64 patchVer = getId(hContact, DB_KEY_PATCHVER); - if (patchVer == 0) - patchVer = 1; - - JSONNode request; - if (bPhoneReg) { - pReq->AddHeader("Content-Type", "application/json"); - request << CHAR_PARAM("aimsid", m_aimsid); - } - else request << CHAR_PARAM("method", "getHistory"); - - JSONNode params; params.set_name("params"); - params << WCHAR_PARAM("sn", GetUserId(hContact)) << INT64_PARAM("fromMsgId", startMsgId); - params << INT_PARAM("count", 1000) << SINT64_PARAM("patchVersion", patchVer) << CHAR_PARAM("language", "ru-ru"); - request << CHAR_PARAM("reqId", pReq->m_reqId) << params; - - pReq->m_szParam = ptrW(json_write(&request)); + pReq->params << WCHAR_PARAM("sn", GetUserId(hContact)) << INT64_PARAM("fromMsgId", startMsgId) << INT_PARAM("count", 1000) + << SINT64_PARAM("patchVersion", patchVer) << CHAR_PARAM("language", "ru-ru"); Push(pReq); } @@ -1183,13 +1170,11 @@ void CIcqProto::OnSearchResults(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pRe PROTOSEARCHRESULT psr = {}; psr.cbSize = sizeof(psr); psr.flags = PSR_UNICODE; - for (auto &it : results["data"]) { - const JSONNode &anketa = it["anketa"]; - + for (auto &it : results["persons"]) { CMStringW wszId = it["sn"].as_mstring(); - CMStringW wszNick = anketa["nickname"].as_mstring(); - CMStringW wszFirst = anketa["firstName"].as_mstring(); - CMStringW wszLast = anketa["lastName"].as_mstring(); + CMStringW wszNick = it["friendly"].as_mstring(); + CMStringW wszFirst = it["firstName"].as_mstring(); + CMStringW wszLast = it["lastName"].as_mstring(); psr.id.w = wszId.GetBuffer(); psr.nick.w = wszNick.GetBuffer(); diff --git a/protocols/ICQ-WIM/src/version.h b/protocols/ICQ-WIM/src/version.h index 162bc55814..379d7ff2a3 100644 --- a/protocols/ICQ-WIM/src/version.h +++ b/protocols/ICQ-WIM/src/version.h @@ -1,7 +1,7 @@ #define __MAJOR_VERSION 0 #define __MINOR_VERSION 96 #define __RELEASE_NUM 1 -#define __BUILD_NUM 6 +#define __BUILD_NUM 7 #include <stdver.h> |