From 72a33d5bb87d6c8b355fb246d3ab4b1a3015df3c Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 6 Jan 2024 21:27:35 +0300 Subject: =?UTF-8?q?fixes=20#4100=20(=D0=9F=D0=B0=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BA=20=D1=81=D0=B5?= =?UTF-8?q?=D1=82=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mir_app/src/netlib.h | 5 ++--- src/mir_app/src/netlib_http.cpp | 23 ++++++++++------------- src/mir_app/src/netlib_openconn.cpp | 4 ++-- 3 files changed, 14 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/mir_app/src/netlib.h b/src/mir_app/src/netlib.h index 2cfff43aa1..8a1223628d 100644 --- a/src/mir_app/src/netlib.h +++ b/src/mir_app/src/netlib.h @@ -129,7 +129,6 @@ struct NetlibConnection : public MZeroedObject NetlibUrl url; int timeout; - MChunkHandler *pChunkHandler; char *szNewUrl; mir_cs csHttpSequenceNums; @@ -208,9 +207,9 @@ bool BindSocketToPort(const char *szPorts, SOCKET s, SOCKET s6, int* portn); // netlibhttp.cpp void NetlibHttpSetLastErrorUsingHttpResult(int result); -int Netlib_SendHttpRequest(HNETLIBCONN hConnection, MHttpRequest *pRec, MChunkHandler *pHandler); +int Netlib_SendHttpRequest(HNETLIBCONN hConnection, MHttpRequest *pRec, MChunkHandler &pHandler); -MHttpResponse* NetlibHttpRecv(NetlibConnection *nlc, uint32_t hflags, uint32_t dflags, bool isConnect = false); +MHttpResponse* NetlibHttpRecv(NetlibConnection *nlc, uint32_t hflags, uint32_t dflags, MChunkHandler &pHandler, bool isConnect = false); // netliblog.cpp void NetlibLogShowOptions(void); diff --git a/src/mir_app/src/netlib_http.cpp b/src/mir_app/src/netlib_http.cpp index fa74322489..dcf3fb075e 100644 --- a/src/mir_app/src/netlib_http.cpp +++ b/src/mir_app/src/netlib_http.cpp @@ -484,7 +484,7 @@ static MHttpResponse* Netlib_RecvHttpHeaders(NetlibConnection *nlc, int flags) // nlhr.resultCode and nlhr.szResultDescr are ignored by this function. // Errors: ERROR_INVALID_PARAMETER, anything returned by MS_NETLIB_SEND -int Netlib_SendHttpRequest(HNETLIBCONN nlc, MHttpRequest *nlhr, MChunkHandler *pHandler) +int Netlib_SendHttpRequest(HNETLIBCONN nlc, MHttpRequest *nlhr, MChunkHandler &pHandler) { MHttpResponse *nlhrReply = nullptr; HttpSecurityContext httpSecurity; @@ -527,8 +527,6 @@ int Netlib_SendHttpRequest(HNETLIBCONN nlc, MHttpRequest *nlhr, MChunkHandler *p const char *pszFullUrl = nlhr->m_szUrl; const char *pszUrl = nullptr; - nlc->pChunkHandler = pHandler; - unsigned complete = false; int count = 11; while (--count) { @@ -669,7 +667,7 @@ int Netlib_SendHttpRequest(HNETLIBCONN nlc, MHttpRequest *nlhr, MChunkHandler *p if (nlhr->requestType == REQUEST_HEAD) nlhrReply = Netlib_RecvHttpHeaders(nlc, hflags); else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags, pHandler); if (nlhrReply) { auto *tmpUrl = nlhrReply->FindHeader("Location"); @@ -711,7 +709,7 @@ int Netlib_SendHttpRequest(HNETLIBCONN nlc, MHttpRequest *nlhr, MChunkHandler *p if (nlhr->requestType == REQUEST_HEAD) nlhrReply = Netlib_RecvHttpHeaders(nlc, hflags); else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags, pHandler); replaceStr(pszAuthHdr, nullptr); if (nlhrReply) { @@ -745,7 +743,7 @@ int Netlib_SendHttpRequest(HNETLIBCONN nlc, MHttpRequest *nlhr, MChunkHandler *p if (nlhr->requestType == REQUEST_HEAD) nlhrReply = Netlib_RecvHttpHeaders(nlc, hflags); else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags, pHandler); mir_free(pszProxyAuthHdr); pszProxyAuthHdr = nullptr; if (nlhrReply) { @@ -904,7 +902,7 @@ static int NetlibHttpRecvChunkHeader(NetlibConnection *nlc, bool first, uint32_t } } -MHttpResponse* NetlibHttpRecv(NetlibConnection *nlc, uint32_t hflags, uint32_t dflags, bool isConnect) +MHttpResponse* NetlibHttpRecv(NetlibConnection *nlc, uint32_t hflags, uint32_t dflags, MChunkHandler &pHandler, bool isConnect) { int dataLen = -1; bool chunked = false; @@ -962,13 +960,13 @@ next: if (recvResult <= dataLen) { - nlc->pChunkHandler->updateChunk(tmpBuf, recvResult); + pHandler.updateChunk(tmpBuf, recvResult); dataLen -= recvResult; if (!dataLen) break; } else { - nlc->pChunkHandler->updateChunk(tmpBuf, dataLen); + pHandler.updateChunk(tmpBuf, dataLen); nlc->foreBuf.appendBefore(tmpBuf.get() + dataLen, recvResult - dataLen); break; } @@ -985,7 +983,7 @@ next: } } - nlc->pChunkHandler->apply(nlhrReply.get()); + pHandler.apply(nlhrReply.get()); if (chunked) nlhrReply->AddHeader("Content-Length", CMStringA(FORMAT, "%u", dataLen)); @@ -1074,7 +1072,7 @@ MIR_APP_DLL(MHttpResponse *) Netlib_HttpTransaction(HNETLIBUSER nlu, MHttpReques nlhr->AddHeader("Accept-Encoding", "deflate, gzip"); MMemoryChunkStorage storage; - if (Netlib_SendHttpRequest(nlc, nlhr, &storage) == SOCKET_ERROR) { + if (Netlib_SendHttpRequest(nlc, nlhr, storage) == SOCKET_ERROR) { Netlib_CloseHandle(nlc); return nullptr; } @@ -1091,13 +1089,12 @@ MIR_APP_DLL(MHttpResponse *) Netlib_HttpTransaction(HNETLIBUSER nlu, MHttpReques if (nlhr->requestType == REQUEST_HEAD) nlhrReply = Netlib_RecvHttpHeaders(nlc, 0); else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags, storage); if (nlhrReply) { nlhrReply->szUrl = nlc->szNewUrl; nlc->szNewUrl = nullptr; } - nlc->pChunkHandler = nullptr; if ((nlhr->flags & NLHRF_PERSISTENT) == 0 || nlhrReply == nullptr) { Netlib_CloseHandle(nlc); diff --git a/src/mir_app/src/netlib_openconn.cpp b/src/mir_app/src/netlib_openconn.cpp index 210c94cb71..6178e29d38 100644 --- a/src/mir_app/src/netlib_openconn.cpp +++ b/src/mir_app/src/netlib_openconn.cpp @@ -314,10 +314,10 @@ static bool NetlibInitHttpsConnection(NetlibConnection *nlc) nlhrSend.flags = NLHRF_DUMPPROXY | NLHRF_HTTP11 | NLHRF_NOPROXY | NLHRF_REDIRECT; nlhrSend.m_szUrl = szUrl; - if (Netlib_SendHttpRequest(nlc, &nlhrSend, &storage) == SOCKET_ERROR) + if (Netlib_SendHttpRequest(nlc, &nlhrSend, storage) == SOCKET_ERROR) return false; - auto *nlhrReply = NetlibHttpRecv(nlc, MSG_DUMPPROXY | MSG_RAW, MSG_DUMPPROXY | MSG_RAW, true); + auto *nlhrReply = NetlibHttpRecv(nlc, MSG_DUMPPROXY | MSG_RAW, MSG_DUMPPROXY | MSG_RAW, storage, true); if (nlhrReply == nullptr) return false; -- cgit v1.2.3