summaryrefslogtreecommitdiff
path: root/protocols/Discord/src
diff options
context:
space:
mode:
authorGeorge Hazan <george.hazan@gmail.com>2024-01-05 15:54:03 +0300
committerGeorge Hazan <george.hazan@gmail.com>2024-01-05 15:54:03 +0300
commit14c4e44a0a91e1ad701d4ae3c58185d25118e64e (patch)
tree50f36035466f355c74373e757bc00b6610ce6267 /protocols/Discord/src
parent94667140aeb3886d22e4c1301423fe99aaf3fba4 (diff)
Netlib:
- NETLIBHTTPHEADER & NETLIBHTTPREQUEST obsoleted; - NETLIBHTTPREQUEST divided into MHttpRequest & MHttpResponse; - MHttpHeaders now manager headers both for MHttpRequest & MHttpResponse;
Diffstat (limited to 'protocols/Discord/src')
-rw-r--r--protocols/Discord/src/avatars.cpp6
-rw-r--r--protocols/Discord/src/connection.cpp9
-rw-r--r--protocols/Discord/src/gateway.cpp18
-rw-r--r--protocols/Discord/src/http.cpp7
-rw-r--r--protocols/Discord/src/proto.cpp18
-rw-r--r--protocols/Discord/src/proto.h26
-rw-r--r--protocols/Discord/src/server.cpp16
7 files changed, 45 insertions, 55 deletions
diff --git a/protocols/Discord/src/avatars.cpp b/protocols/Discord/src/avatars.cpp
index a131b23856..fd2d57181c 100644
--- a/protocols/Discord/src/avatars.cpp
+++ b/protocols/Discord/src/avatars.cpp
@@ -52,7 +52,7 @@ INT_PTR CDiscordProto::GetAvatarCaps(WPARAM wParam, LPARAM lParam)
/////////////////////////////////////////////////////////////////////////////////////////
-void CDiscordProto::OnReceiveAvatar(NETLIBHTTPREQUEST *reply, AsyncHttpRequest *pReq)
+void CDiscordProto::OnReceiveAvatar(MHttpResponse *reply, AsyncHttpRequest *pReq)
{
PROTO_AVATAR_INFORMATION ai = { 0 };
ai.format = PA_FORMAT_UNKNOWN;
@@ -64,7 +64,7 @@ LBL_Error:
return;
}
- if (auto *pszHdr = Netlib_GetHeader(reply, "Content-Type"))
+ if (auto *pszHdr = reply->FindHeader("Content-Type"))
ai.format = ProtoGetAvatarFormatByMimeType(pszHdr);
if (ai.format == PA_FORMAT_UNKNOWN) {
@@ -81,7 +81,7 @@ LBL_Error:
goto LBL_Error;
}
- fwrite(reply->pData, 1, reply->dataLength, out);
+ fwrite(reply->body, 1, reply->body.GetLength(), out);
fclose(out);
if (ai.hContact)
diff --git a/protocols/Discord/src/connection.cpp b/protocols/Discord/src/connection.cpp
index d98d6e4ec8..00c9214b2c 100644
--- a/protocols/Discord/src/connection.cpp
+++ b/protocols/Discord/src/connection.cpp
@@ -21,15 +21,10 @@ void CDiscordProto::ExecuteRequest(AsyncHttpRequest *pReq)
{
CMStringA str;
- pReq->szUrl = pReq->m_szUrl.GetBuffer();
if (!pReq->m_szParam.IsEmpty()) {
if (pReq->requestType == REQUEST_GET) {
str.Format("%s?%s", pReq->m_szUrl.c_str(), pReq->m_szParam.c_str());
- pReq->szUrl = str.GetBuffer();
- }
- else {
- pReq->pData = mir_strdup(pReq->m_szParam);
- pReq->dataLength = pReq->m_szParam.GetLength();
+ pReq->m_szUrl = str.GetBuffer();
}
}
@@ -40,7 +35,7 @@ void CDiscordProto::ExecuteRequest(AsyncHttpRequest *pReq)
}
bool bRetryable = pReq->nlc != nullptr;
- debugLogA("Executing request #%d:\n%s", pReq->m_iReqNum, pReq->szUrl);
+ debugLogA("Executing request #%d:\n%s", pReq->m_iReqNum, pReq->m_szUrl.c_str());
LBL_Retry:
NLHR_PTR reply(Netlib_HttpTransaction(m_hNetlibUser, pReq));
diff --git a/protocols/Discord/src/gateway.cpp b/protocols/Discord/src/gateway.cpp
index e76de2848a..759afed573 100644
--- a/protocols/Discord/src/gateway.cpp
+++ b/protocols/Discord/src/gateway.cpp
@@ -43,19 +43,15 @@ void CDiscordProto::GatewayThread(void*)
bool CDiscordProto::GatewayThreadWorker()
{
- NETLIBHTTPHEADER hdrs[] =
- {
- { "Origin", "https://discord.com" },
- { 0, 0 },
- { 0, 0 },
- };
-
+ bool bHasCookie = false;
+ MHttpHeaders hdrs;
+ hdrs.AddHeader("Origin", "https://discord.com");
if (!m_szWSCookie.IsEmpty()) {
- hdrs[1].szName = "Cookie";
- hdrs[1].szValue = m_szWSCookie.GetBuffer();
+ bHasCookie = true;
+ hdrs.AddHeader("Cookie", m_szWSCookie);
}
- NLHR_PTR pReply(WebSocket_Connect(m_hGatewayNetlibUser, m_szGateway + "/?encoding=json&v=8", hdrs));
+ NLHR_PTR pReply(WebSocket_Connect(m_hGatewayNetlibUser, m_szGateway + "/?encoding=json&v=8", &hdrs));
if (pReply == nullptr) {
debugLogA("Gateway connection failed, exiting");
return false;
@@ -66,7 +62,7 @@ bool CDiscordProto::GatewayThreadWorker()
if (pReply->resultCode != 101) {
// if there's no cookie & Miranda is bounced with error 404, simply apply the cookie and try again
if (pReply->resultCode == 404) {
- if (hdrs[1].szName == nullptr)
+ if (!bHasCookie)
return true;
m_szWSCookie.Empty(); // don't use the same cookie twice
diff --git a/protocols/Discord/src/http.cpp b/protocols/Discord/src/http.cpp
index f65451f9ce..82e8d495d0 100644
--- a/protocols/Discord/src/http.cpp
+++ b/protocols/Discord/src/http.cpp
@@ -59,8 +59,7 @@ AsyncHttpRequest::AsyncHttpRequest(CDiscordProto *ppro, int iRequestType, LPCSTR
if (pRoot != nullptr) {
ptrW text(json_write(pRoot));
- pData = mir_utf8encodeW(text);
- dataLength = (int)mir_strlen(pData);
+ m_szParam = ptrA(mir_utf8encodeW(text));
AddHeader("Content-Type", "application/json");
}
@@ -71,7 +70,7 @@ AsyncHttpRequest::AsyncHttpRequest(CDiscordProto *ppro, int iRequestType, LPCSTR
m_iReqNum = ::InterlockedIncrement(&g_reqNum);
}
-JsonReply::JsonReply(NETLIBHTTPREQUEST *pReply)
+JsonReply::JsonReply(MHttpResponse *pReply)
{
if (pReply == nullptr) {
m_errorCode = 500;
@@ -80,7 +79,7 @@ JsonReply::JsonReply(NETLIBHTTPREQUEST *pReply)
m_errorCode = pReply->resultCode;
- m_root = json_parse(pReply->pData);
+ m_root = json_parse(pReply->body);
if (m_root == nullptr)
m_errorCode = 500;
}
diff --git a/protocols/Discord/src/proto.cpp b/protocols/Discord/src/proto.cpp
index 1e76ead10d..210d649d00 100644
--- a/protocols/Discord/src/proto.cpp
+++ b/protocols/Discord/src/proto.cpp
@@ -329,7 +329,7 @@ HANDLE CDiscordProto::SearchAdvanced(HWND hwndDlg)
/////////////////////////////////////////////////////////////////////////////////////////
// Basic search - by SnowFlake
-void CDiscordProto::OnReceiveUserinfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*)
+void CDiscordProto::OnReceiveUserinfo(MHttpResponse *pReply, AsyncHttpRequest*)
{
JsonReply root(pReply);
if (!root) {
@@ -459,7 +459,7 @@ MCONTACT CDiscordProto::AddToListByEvent(int flags, int, MEVENT hDbEvent)
////////////////////////////////////////////////////////////////////////////////////////
// SendMsg
-void CDiscordProto::OnSendMsg(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq)
+void CDiscordProto::OnSendMsg(MHttpResponse *pReply, AsyncHttpRequest *pReq)
{
JsonReply root(pReply);
if (!root) {
@@ -574,7 +574,7 @@ int CDiscordProto::UserIsTyping(MCONTACT hContact, int type)
/////////////////////////////////////////////////////////////////////////////////////////
-void CDiscordProto::OnReceiveMarkRead(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *)
+void CDiscordProto::OnReceiveMarkRead(MHttpResponse *pReply, AsyncHttpRequest *)
{
JsonReply root(pReply);
if (root)
@@ -712,10 +712,10 @@ void CDiscordProto::SendFileThread(void *param)
szBoundary.Insert(0, "\r\n");
szBoundary.Append("--\r\n");
- pReq->dataLength = int(szBody.GetLength() + szBoundary.GetLength() + cbBytes);
- pReq->pData = (char*)mir_alloc(pReq->dataLength+1);
- memcpy(pReq->pData, szBody.c_str(), szBody.GetLength());
- size_t cbRead = fread(pReq->pData + szBody.GetLength(), 1, cbBytes, in);
+ pReq->m_szParam.Truncate(int(szBody.GetLength() + szBoundary.GetLength() + cbBytes));
+
+ memcpy(pReq->m_szParam.GetBuffer(), szBody.c_str(), szBody.GetLength());
+ size_t cbRead = fread(pReq->m_szParam.GetBuffer() + szBody.GetLength(), 1, cbBytes, in);
fclose(in);
if (cbBytes != cbRead) {
debugLogA("cannot read file %S: %d bytes read instead of %d", p->wszFileName.c_str(), cbRead, cbBytes);
@@ -723,14 +723,14 @@ void CDiscordProto::SendFileThread(void *param)
goto LBL_Error;
}
- memcpy(pReq->pData + szBody.GetLength() + cbBytes, szBoundary, szBoundary.GetLength());
+ memcpy(pReq->m_szParam.GetBuffer() + szBody.GetLength() + cbBytes, szBoundary, szBoundary.GetLength());
pReq->pUserInfo = p;
Push(pReq);
ProtoBroadcastAck(p->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, param);
}
-void CDiscordProto::OnReceiveFile(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq)
+void CDiscordProto::OnReceiveFile(MHttpResponse *pReply, AsyncHttpRequest *pReq)
{
SendFileThreadParam *p = (SendFileThreadParam*)pReq->pUserInfo;
if (pReply->resultCode != 200) {
diff --git a/protocols/Discord/src/proto.h b/protocols/Discord/src/proto.h
index e34f6cbfa9..fdb5e6a33b 100644
--- a/protocols/Discord/src/proto.h
+++ b/protocols/Discord/src/proto.h
@@ -80,7 +80,7 @@ class JsonReply
int m_errorCode = 0;
public:
- JsonReply(NETLIBHTTPREQUEST *);
+ JsonReply(MHttpResponse *);
~JsonReply();
__forceinline int error() const { return m_errorCode; }
@@ -495,25 +495,25 @@ public:
void OnLoggedIn();
void OnLoggedOut();
- void OnReceiveCreateChannel(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
- void OnReceiveFile(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
- void OnReceiveGateway(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
- void OnReceiveLogout(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
- void OnReceiveMarkRead(NETLIBHTTPREQUEST*, AsyncHttpRequest *);
- void OnReceiveMessageAck(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
- void OnReceiveToken(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
- void OnReceiveUserinfo(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
+ void OnReceiveCreateChannel(MHttpResponse*, AsyncHttpRequest*);
+ void OnReceiveFile(MHttpResponse*, AsyncHttpRequest*);
+ void OnReceiveGateway(MHttpResponse*, AsyncHttpRequest*);
+ void OnReceiveLogout(MHttpResponse*, AsyncHttpRequest*);
+ void OnReceiveMarkRead(MHttpResponse*, AsyncHttpRequest *);
+ void OnReceiveMessageAck(MHttpResponse*, AsyncHttpRequest*);
+ void OnReceiveToken(MHttpResponse*, AsyncHttpRequest*);
+ void OnReceiveUserinfo(MHttpResponse*, AsyncHttpRequest*);
void RetrieveMyInfo();
- void OnReceiveMyInfo(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
+ void OnReceiveMyInfo(MHttpResponse*, AsyncHttpRequest*);
void RetrieveHistory(CDiscordUser *pUser, CDiscordHistoryOp iOp = MSG_NOFILTER, SnowFlake msgid = 0, int iLimit = 50);
- void OnReceiveHistory(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
+ void OnReceiveHistory(MHttpResponse*, AsyncHttpRequest*);
bool RetrieveAvatar(MCONTACT hContact);
- void OnReceiveAvatar(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
+ void OnReceiveAvatar(MHttpResponse*, AsyncHttpRequest*);
- void OnSendMsg(NETLIBHTTPREQUEST*, AsyncHttpRequest*);
+ void OnSendMsg(MHttpResponse*, AsyncHttpRequest*);
//////////////////////////////////////////////////////////////////////////////////////
// Misc
diff --git a/protocols/Discord/src/server.cpp b/protocols/Discord/src/server.cpp
index 1ef3517822..104d45435d 100644
--- a/protocols/Discord/src/server.cpp
+++ b/protocols/Discord/src/server.cpp
@@ -54,7 +54,7 @@ static int compareMsgHistory(const JSONNode *p1, const JSONNode *p2)
return wcscmp((*p1)["id"].as_mstring(), (*p2)["id"].as_mstring());
}
-void CDiscordProto::OnReceiveHistory(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq)
+void CDiscordProto::OnReceiveHistory(MHttpResponse *pReply, AsyncHttpRequest *pReq)
{
CDiscordUser *pUser = (CDiscordUser*)pReq->pUserInfo;
@@ -147,7 +147,7 @@ void CDiscordProto::RetrieveMyInfo()
Push(new AsyncHttpRequest(this, REQUEST_GET, "/users/@me", &CDiscordProto::OnReceiveMyInfo));
}
-void CDiscordProto::OnReceiveMyInfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*)
+void CDiscordProto::OnReceiveMyInfo(MHttpResponse *pReply, AsyncHttpRequest*)
{
JsonReply root(pReply);
if (!root) {
@@ -179,7 +179,7 @@ void CDiscordProto::OnReceiveMyInfo(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*
/////////////////////////////////////////////////////////////////////////////////////////
// finds a gateway address
-void CDiscordProto::OnReceiveGateway(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*)
+void CDiscordProto::OnReceiveGateway(MHttpResponse *pReply, AsyncHttpRequest*)
{
JsonReply root(pReply);
if (!root) {
@@ -195,7 +195,7 @@ void CDiscordProto::OnReceiveGateway(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest
/////////////////////////////////////////////////////////////////////////////////////////
// logs a session out
-void CDiscordProto::OnReceiveLogout(NETLIBHTTPREQUEST *, AsyncHttpRequest *)
+void CDiscordProto::OnReceiveLogout(MHttpResponse *, AsyncHttpRequest *)
{
delSetting("AccessToken");
}
@@ -213,7 +213,7 @@ void CDiscordProto::SetServerStatus(int iStatus)
/////////////////////////////////////////////////////////////////////////////////////////
// channels
-void CDiscordProto::OnReceiveCreateChannel(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*)
+void CDiscordProto::OnReceiveCreateChannel(MHttpResponse *pReply, AsyncHttpRequest*)
{
JsonReply root(pReply);
if (root)
@@ -222,7 +222,7 @@ void CDiscordProto::OnReceiveCreateChannel(NETLIBHTTPREQUEST *pReply, AsyncHttpR
/////////////////////////////////////////////////////////////////////////////////////////
-void CDiscordProto::OnReceiveMessageAck(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*)
+void CDiscordProto::OnReceiveMessageAck(MHttpResponse *pReply, AsyncHttpRequest*)
{
JsonReply root(pReply);
if (!root)
@@ -243,10 +243,10 @@ void CDiscordProto::OnReceiveMessageAck(NETLIBHTTPREQUEST *pReply, AsyncHttpRequ
#define RECAPTCHA_API_KEY "6Lef5iQTAAAAAKeIvIY-DeexoO3gj7ryl9rLMEnn"
#define RECAPTCHA_SITE_URL "https://discord.com"
-void CDiscordProto::OnReceiveToken(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*)
+void CDiscordProto::OnReceiveToken(MHttpResponse *pReply, AsyncHttpRequest*)
{
if (pReply->resultCode != 200) {
- JSONNode root = JSONNode::parse(pReply->pData);
+ JSONNode root = JSONNode::parse(pReply->body);
if (root) {
const JSONNode &captcha = root["captcha_key"].as_array();
if (captcha) {