summaryrefslogtreecommitdiff
path: root/protocols/ICQ-WIM/src
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-01-09 14:44:33 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-01-09 14:44:33 +0300
commita82056a6527131bcbfae03866b010f5bb7151a2f (patch)
tree1aa501630f305ed5dfed6af9159adb734396f7d0 /protocols/ICQ-WIM/src
parent5036c841e9ac3cc32b4638ad17c531a02db7474d (diff)
ICQ: RAPI requests code cleaning
Diffstat (limited to 'protocols/ICQ-WIM/src')
-rw-r--r--protocols/ICQ-WIM/src/http.cpp27
-rw-r--r--protocols/ICQ-WIM/src/http.h11
-rw-r--r--protocols/ICQ-WIM/src/poll.cpp7
-rw-r--r--protocols/ICQ-WIM/src/proto.cpp25
-rw-r--r--protocols/ICQ-WIM/src/proto.h2
-rw-r--r--protocols/ICQ-WIM/src/server.cpp37
-rw-r--r--protocols/ICQ-WIM/src/version.h2
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>