From 14c4e44a0a91e1ad701d4ae3c58185d25118e64e Mon Sep 17 00:00:00 2001 From: George Hazan Date: Fri, 5 Jan 2024 15:54:03 +0300 Subject: Netlib: - NETLIBHTTPHEADER & NETLIBHTTPREQUEST obsoleted; - NETLIBHTTPREQUEST divided into MHttpRequest & MHttpResponse; - MHttpHeaders now manager headers both for MHttpRequest & MHttpResponse; --- protocols/WhatsApp/src/avatars.cpp | 10 +++++----- protocols/WhatsApp/src/server.cpp | 9 +++------ protocols/WhatsApp/src/utils.cpp | 15 ++++++--------- 3 files changed, 14 insertions(+), 20 deletions(-) (limited to 'protocols/WhatsApp/src') diff --git a/protocols/WhatsApp/src/avatars.cpp b/protocols/WhatsApp/src/avatars.cpp index 9bb7e926aa..077414e8e0 100644 --- a/protocols/WhatsApp/src/avatars.cpp +++ b/protocols/WhatsApp/src/avatars.cpp @@ -130,10 +130,10 @@ void WhatsAppProto::ServerFetchAvatar(const char *jid) bool CMPlugin::SaveFile(const char *pszUrl, PROTO_AVATAR_INFORMATION &ai) { - NETLIBHTTPREQUEST req = {}; + MHttpRequest req; req.flags = NLHRF_NODUMP | NLHRF_PERSISTENT | NLHRF_SSL | NLHRF_HTTP11 | NLHRF_REDIRECT; req.requestType = REQUEST_GET; - req.szUrl = (char*)pszUrl; + req.m_szUrl = pszUrl; req.nlc = hAvatarConn; NLHR_PTR pReply(Netlib_HttpTransaction(hAvatarUser, &req)); @@ -146,14 +146,14 @@ bool CMPlugin::SaveFile(const char *pszUrl, PROTO_AVATAR_INFORMATION &ai) hAvatarConn = pReply->nlc; bool bSuccess = false; - if (pReply->resultCode == 200 && pReply->pData && pReply->dataLength) { - if (auto *pszHdr = Netlib_GetHeader(pReply, "Content-Type")) + if (pReply->resultCode == 200 && !pReply->body.IsEmpty()) { + if (auto *pszHdr = pReply->FindHeader("Content-Type")) ai.format = ProtoGetAvatarFormatByMimeType(pszHdr); if (ai.format != PA_FORMAT_UNKNOWN) { FILE *fout = _wfopen(ai.filename, L"wb"); if (fout) { - fwrite(pReply->pData, 1, pReply->dataLength, fout); + fwrite(pReply->body, 1, pReply->body.GetLength(), fout); fclose(fout); bSuccess = true; } diff --git a/protocols/WhatsApp/src/server.cpp b/protocols/WhatsApp/src/server.cpp index 857666b2e4..e653ac95ba 100644 --- a/protocols/WhatsApp/src/server.cpp +++ b/protocols/WhatsApp/src/server.cpp @@ -24,13 +24,10 @@ void WhatsAppProto::ServerThread(void *) void WhatsAppProto::ServerThreadWorker() { // connect websocket - NETLIBHTTPHEADER hdrs[] = - { - { "Origin", "https://web.whatsapp.com" }, - { 0, 0 } - }; + MHttpHeaders hdrs; + hdrs.AddHeader("Origin", "https://web.whatsapp.com"); - NLHR_PTR pReply(WebSocket_Connect(m_hNetlibUser, "web.whatsapp.com/ws/chat", hdrs)); + NLHR_PTR pReply(WebSocket_Connect(m_hNetlibUser, "web.whatsapp.com/ws/chat", &hdrs)); if (pReply == nullptr) { debugLogA("Server connection failed, exiting"); return; diff --git a/protocols/WhatsApp/src/utils.cpp b/protocols/WhatsApp/src/utils.cpp index 3d3650c043..8e9a19b936 100644 --- a/protocols/WhatsApp/src/utils.cpp +++ b/protocols/WhatsApp/src/utils.cpp @@ -260,7 +260,7 @@ MBinBuffer decodeBufStr(const std::string &buf) uint32_t decodeBigEndian(const uint8_t *buf, size_t len) { uint32_t ret = 0; - for (int i = 0; i < len; i++) { + for (size_t i = 0; i < len; i++) { ret <<= 8; ret += buf[i]; } @@ -271,7 +271,7 @@ uint32_t decodeBigEndian(const uint8_t *buf, size_t len) std::string encodeBigEndian(uint32_t num, size_t len) { std::string res; - for (int i = 0; i < len; i++) { + for (size_t i = 0; i < len; i++) { char c = num & 0xFF; res = c + res; num >>= 8; @@ -519,20 +519,17 @@ WAMediaKeys::WAMediaKeys(const uint8_t *pKey, size_t keyLen, const char *pszMedi MBinBuffer WhatsAppProto::DownloadEncryptedFile(const char *url, const ProtobufCBinaryData &mediaKeys, const char *pszMediaType) { - NETLIBHTTPHEADER headers[1] = {{"Origin", "https://web.whatsapp.com"}}; - - NETLIBHTTPREQUEST req = {}; + MHttpRequest req; req.requestType = REQUEST_GET; - req.szUrl = (char*)url; - req.headersCount = _countof(headers); - req.headers = headers; + req.m_szUrl = url; + req.AddHeader("Origin", "https://web.whatsapp.com"); MBinBuffer ret; auto *pResp = Netlib_HttpTransaction(m_hNetlibUser, &req); if (pResp) { if (pResp->resultCode == 200) { WAMediaKeys out(mediaKeys.data, mediaKeys.len, pszMediaType); - ret = aesDecrypt(EVP_aes_256_cbc(), out.cipherKey, out.iv, pResp->pData, pResp->dataLength); + ret = aesDecrypt(EVP_aes_256_cbc(), out.cipherKey, out.iv, pResp->body, pResp->body.GetLength()); } } -- cgit v1.2.3