From e209db0b4af8c55411e62386dbb83a0a662a858c Mon Sep 17 00:00:00 2001 From: George Hazan Date: Thu, 20 Jun 2013 13:27:22 +0000 Subject: code cleaning git-svn-id: http://svn.miranda-ng.org/main/trunk@5066 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/modules/netlib/netlibautoproxy.cpp | 4 +- src/modules/netlib/netlibbind.cpp | 2 +- src/modules/netlib/netlibhttp.cpp | 763 +++++++++++++-------------------- src/modules/netlib/netlibsecurity.cpp | 73 ++-- src/modules/netlib/netlibssl.cpp | 2 +- src/modules/netlib/netlibupnp.cpp | 4 +- 6 files changed, 333 insertions(+), 515 deletions(-) (limited to 'src/modules/netlib') diff --git a/src/modules/netlib/netlibautoproxy.cpp b/src/modules/netlib/netlibautoproxy.cpp index 204f23ae29..68a433c6c7 100644 --- a/src/modules/netlib/netlibautoproxy.cpp +++ b/src/modules/netlib/netlibautoproxy.cpp @@ -385,7 +385,7 @@ void NetlibLoadIeProxy(void) char* szProxy = ltrim(szHostStr); if (szProxy[0] == 0) { enabled = false; return; } - for (;;) + while(true) { char *szProxyEnd = strchr(szProxy, ';'); if (szProxyEnd) *szProxyEnd = 0; @@ -417,7 +417,7 @@ void NetlibLoadIeProxy(void) } char* szProxyBypass = szProxyBypassStr; - for (;;) + while(true) { char *szProxyBypassEnd = strchr(szProxyBypass, ';'); if (szProxyBypassEnd) *szProxyBypassEnd = 0; diff --git a/src/modules/netlib/netlibbind.cpp b/src/modules/netlib/netlibbind.cpp index 9e1752cd33..24aca3c492 100644 --- a/src/modules/netlib/netlibbind.cpp +++ b/src/modules/netlib/netlibbind.cpp @@ -127,7 +127,7 @@ static void NetlibBindAcceptThread(void* param) struct NetlibBoundPort *nlbp = (NetlibBoundPort*)param; NetlibLogf(nlbp->nlu, "(%u) Port %u opened for incoming connections", nlbp->s, nlbp->wPort); - for (;;) + while(true) { fd_set r; FD_ZERO(&r); diff --git a/src/modules/netlib/netlibhttp.cpp b/src/modules/netlib/netlibhttp.cpp index a2ff6e94d3..d14f78dc38 100644 --- a/src/modules/netlib/netlibhttp.cpp +++ b/src/modules/netlib/netlibhttp.cpp @@ -63,19 +63,16 @@ struct ProxyAuthList : OBJLIST { if (szServer == NULL) return; int i = getIndex((ProxyAuth*)&szServer); - if (i >= 0) - { + if (i >= 0) { ProxyAuth &rec = (*this)[i]; if (szMethod == NULL) remove(i); - else if (_stricmp(rec.szMethod, szMethod)) - { + else if (_stricmp(rec.szMethod, szMethod)) { mir_free(rec.szMethod); rec.szMethod = mir_strdup(szMethod); } } - else - insert(new ProxyAuth(szServer, szMethod)); + else insert(new ProxyAuth(szServer, szMethod)); } const char* find(const char *szServer) @@ -92,14 +89,12 @@ static void AppendToCharBuffer(struct ResizableCharBuffer *rcb, const char *fmt, va_list va; int charsDone; - if (rcb->cbAlloced == 0) - { + if (rcb->cbAlloced == 0) { rcb->cbAlloced = 512; rcb->sz = (char*)mir_alloc(rcb->cbAlloced); } va_start(va, fmt); - for (;;) - { + while (true) { charsDone = mir_vsnprintf(rcb->sz + rcb->iEnd, rcb->cbAlloced-rcb->iEnd, fmt, va); if (charsDone >= 0) break; rcb->cbAlloced += 512; @@ -113,15 +108,12 @@ static int RecvWithTimeoutTime(struct NetlibConnection *nlc, unsigned dwTimeoutT { DWORD dwTimeNow; - if ( !si.pending(nlc->hSsl)) - { - while ((dwTimeNow = GetTickCount()) < dwTimeoutTime) - { + if ( !si.pending(nlc->hSsl)) { + while ((dwTimeNow = GetTickCount()) < dwTimeoutTime) { unsigned dwDeltaTime = min(dwTimeoutTime - dwTimeNow, 1000); int res = WaitUntilReadable(nlc->s, dwDeltaTime); - switch (res) - { + switch (res) { case SOCKET_ERROR: return SOCKET_ERROR; @@ -140,12 +132,9 @@ static int RecvWithTimeoutTime(struct NetlibConnection *nlc, unsigned dwTimeoutT static char* NetlibHttpFindHeader(NETLIBHTTPREQUEST *nlhrReply, const char *hdr) { for (int i=0; i < nlhrReply->headersCount; i++) - { if (_stricmp(nlhrReply->headers[i].szName, hdr) == 0) - { return nlhrReply->headers[i].szValue; - } - } + return NULL; } @@ -155,10 +144,8 @@ static char* NetlibHttpFindAuthHeader(NETLIBHTTPREQUEST *nlhrReply, const char * char *szNegoHdr = NULL; char *szNtlmHdr = NULL; - for (int i=0; i < nlhrReply->headersCount; i++) - { - if (_stricmp(nlhrReply->headers[i].szName, hdr) == 0) - { + for (int i=0; i < nlhrReply->headersCount; i++) { + if (_stricmp(nlhrReply->headers[i].szName, hdr) == 0) { if (_strnicmp(nlhrReply->headers[i].szValue, "Negotiate", 9) == 0) szNegoHdr = nlhrReply->headers[i].szValue; else if (_strnicmp(nlhrReply->headers[i].szValue, "NTLM", 4) == 0) @@ -189,8 +176,7 @@ void NetlibConnFromUrl(const char* szUrl, bool secur, NETLIBOPENCONNECTION &nloc nloc.szHost = szHost; char* pcolon = strrchr(szHost, ':'); - if (pcolon) - { + if (pcolon) { *pcolon = '\0'; nloc.wPort = (WORD)strtol(pcolon+1, NULL, 10); } @@ -210,13 +196,11 @@ static NetlibConnection* NetlibHttpProcessUrl(NETLIBHTTPREQUEST *nlhr, NetlibUse nloc.flags |= NLOCF_HTTP; if (nloc.flags & NLOCF_SSL) nlhr->flags |= NLHRF_SSL; else nlhr->flags &= ~NLHRF_SSL; - if (nlc != NULL) - { + if (nlc != NULL) { bool httpProxy = !(nloc.flags & NLOCF_SSL) && nlc->proxyType == PROXYTYPE_HTTP; bool sameHost = lstrcmpA(nlc->nloc.szHost, nloc.szHost) == 0 && nlc->nloc.wPort == nloc.wPort; - if ( !httpProxy && !sameHost) - { + if ( !httpProxy && !sameHost) { NetlibDoClose(nlc); mir_free((char*)nlc->nloc.szHost); @@ -224,8 +208,7 @@ static NetlibConnection* NetlibHttpProcessUrl(NETLIBHTTPREQUEST *nlhr, NetlibUse return NetlibDoConnect(nlc) ? nlc : NULL; } } - else - nlc = (NetlibConnection*)NetlibOpenConnection((WPARAM)nlu, (LPARAM)&nloc); + else nlc = (NetlibConnection*)NetlibOpenConnection((WPARAM)nlu, (LPARAM)&nloc); mir_free((char*)nloc.szHost); @@ -316,21 +299,16 @@ struct HttpSecurityContext } }; -static int HttpPeekFirstResponseLine(NetlibConnection *nlc, DWORD dwTimeoutTime, - DWORD recvFlags, int *resultCode, - char **ppszResultDescr, int *length) +static int HttpPeekFirstResponseLine(NetlibConnection *nlc, DWORD dwTimeoutTime, DWORD recvFlags, int *resultCode, char **ppszResultDescr, int *length) { int bytesPeeked; char buffer[2048]; char *peol; - for (;;) - { - bytesPeeked = RecvWithTimeoutTime(nlc, dwTimeoutTime, buffer, SIZEOF(buffer) - 1, - MSG_PEEK | recvFlags); + while(true) { + bytesPeeked = RecvWithTimeoutTime(nlc, dwTimeoutTime, buffer, SIZEOF(buffer) - 1, MSG_PEEK | recvFlags); - if (bytesPeeked == 0) - { + if (bytesPeeked == 0) { SetLastError(ERROR_HANDLE_EOF); return 0; } @@ -338,36 +316,29 @@ static int HttpPeekFirstResponseLine(NetlibConnection *nlc, DWORD dwTimeoutTime, return 0; buffer[bytesPeeked] = '\0'; - peol = strchr(buffer, '\n'); - if (peol == NULL) - { - if ((int)strlen(buffer) < bytesPeeked) - { - SetLastError(ERROR_BAD_FORMAT); - return 0; - } - if (bytesPeeked == SIZEOF(buffer) - 1) - { - SetLastError(ERROR_BUFFER_OVERFLOW); - return 0; - } - if (Miranda_Terminated()) return 0; - Sleep(10); - } - else + if ((peol = strchr(buffer, '\n')) != NULL) break; + + if ((int)strlen(buffer) < bytesPeeked) { + SetLastError(ERROR_BAD_FORMAT); + return 0; + } + if (bytesPeeked == SIZEOF(buffer) - 1) { + SetLastError(ERROR_BUFFER_OVERFLOW); + return 0; + } + if (Miranda_Terminated()) return 0; + Sleep(10); } - if (peol == buffer) - { + if (peol == buffer) { SetLastError(ERROR_BAD_FORMAT); return 0; } *peol = '\0'; - if (_strnicmp(buffer, "HTTP/", 5)) - { + if (_strnicmp(buffer, "HTTP/", 5)) { SetLastError(ERROR_BAD_FORMAT); return 0; } @@ -404,8 +375,7 @@ static int SendHttpRequestAndData(struct NetlibConnection *nlc, struct Resizable (nlhr->flags & NLHRF_NOPROXY ? MSG_RAW : 0); int bytesSent = NLSend(nlc, httpRequest->sz, httpRequest->iEnd, hflags); - if (bytesSent != SOCKET_ERROR && sendData && nlhr->dataLength) - { + if (bytesSent != SOCKET_ERROR && sendData && nlhr->dataLength) { DWORD sflags = (nlhr->flags & NLHRF_DUMPASTEXT ? MSG_DUMPASTEXT : 0) | (nlhr->flags & (NLHRF_NODUMP | NLHRF_NODUMPSEND) ? MSG_NODUMP : (nlhr->flags & NLHRF_DUMPPROXY ? MSG_DUMPPROXY : 0)) | @@ -429,58 +399,50 @@ INT_PTR NetlibHttpSendRequest(WPARAM wParam, LPARAM lParam) HttpSecurityContext httpSecurity; struct ResizableCharBuffer httpRequest = {0}; - const char *pszRequest, *pszUrl, *pszFullUrl; char *szHost = NULL, *szNewUrl = NULL; char *pszProxyAuthHdr = NULL, *pszAuthHdr = NULL; int i, doneHostHeader, doneContentLengthHeader, doneProxyAuthHeader, doneAuthHeader; int bytesSent; bool lastFirstLineFail = false; - if (nlhr == NULL || nlhr->cbSize < NETLIBHTTPREQUEST_V1_SIZE || nlhr->szUrl == NULL || nlhr->szUrl[0] == '\0') - { + if (nlhr == NULL || nlhr->cbSize < NETLIBHTTPREQUEST_V1_SIZE || nlhr->szUrl == NULL || nlhr->szUrl[0] == '\0') { SetLastError(ERROR_INVALID_PARAMETER); return SOCKET_ERROR; } int hdrTimeout = nlhr->cbSize > NETLIBHTTPREQUEST_V1_SIZE && nlhr->timeout ? nlhr->timeout : HTTPRECVHEADERSTIMEOUT; - switch(nlhr->requestType) - { - case REQUEST_GET: pszRequest = "GET"; break; - case REQUEST_POST: pszRequest = "POST"; break; - case REQUEST_CONNECT: pszRequest = "CONNECT"; break; - case REQUEST_HEAD: pszRequest = "HEAD"; break; - case REQUEST_PUT: pszRequest = "PUT"; break; - case REQUEST_DELETE: pszRequest = "DELETE"; break; - default: - SetLastError(ERROR_INVALID_PARAMETER); - return SOCKET_ERROR; + const char *pszRequest; + switch(nlhr->requestType) { + case REQUEST_GET: pszRequest = "GET"; break; + case REQUEST_POST: pszRequest = "POST"; break; + case REQUEST_CONNECT: pszRequest = "CONNECT"; break; + case REQUEST_HEAD: pszRequest = "HEAD"; break; + case REQUEST_PUT: pszRequest = "PUT"; break; + case REQUEST_DELETE: pszRequest = "DELETE"; break; + default: + SetLastError(ERROR_INVALID_PARAMETER); + return SOCKET_ERROR; } if ( !nlc->usingHttpGateway) - { if ( !NetlibEnterNestedCS(nlc, NLNCS_SEND)) return SOCKET_ERROR; - } - pszFullUrl = nlhr->szUrl; - pszUrl = NULL; + const char *pszFullUrl = nlhr->szUrl; + const char *pszUrl = NULL; unsigned complete = false; int count = 11; - while (--count) - { - if ( !NetlibReconnect(nlc)) - { + while (--count) { + if ( !NetlibReconnect(nlc)) { bytesSent = SOCKET_ERROR; break; } - if ( !pszUrl) - { + if ( !pszUrl) { pszUrl = pszFullUrl; - if (nlhr->flags & (NLHRF_SMARTREMOVEHOST | NLHRF_REMOVEHOST | NLHRF_GENERATEHOST)) - { + if (nlhr->flags & (NLHRF_SMARTREMOVEHOST | NLHRF_REMOVEHOST | NLHRF_GENERATEHOST)) { bool usingProxy = nlc->proxyType == PROXYTYPE_HTTP && !(nlhr->flags & NLHRF_SSL); mir_free(szHost); @@ -493,68 +455,37 @@ INT_PTR NetlibHttpSendRequest(WPARAM wParam, LPARAM lParam) ppath = strchr(phost, '/'); if (ppath == phost) phost = NULL; - if (nlhr->flags & NLHRF_GENERATEHOST) - { + if (nlhr->flags & NLHRF_GENERATEHOST) { szHost = mir_strdup(phost); if (ppath && phost) szHost[ppath - phost] = 0; } if (nlhr->flags & NLHRF_REMOVEHOST || (nlhr->flags & NLHRF_SMARTREMOVEHOST && !usingProxy)) - { pszUrl = ppath ? ppath : "/"; - } - if (usingProxy && phost && !nlc->dnsThroughProxy) - { + if (usingProxy && phost && !nlc->dnsThroughProxy) { char* tszHost = mir_strdup(phost); if (ppath && phost) tszHost[ppath - phost] = 0; char* cln = strchr(tszHost, ':'); if (cln) *cln = 0; - if (inet_addr(tszHost) == INADDR_NONE) - { + if (inet_addr(tszHost) == INADDR_NONE) { DWORD ip = DnsLookup(nlc->nlu, tszHost); - if (ip && szHost) - { + if (ip && szHost) { mir_free(szHost); szHost = (char*)mir_alloc(64); if (cln) *cln = ':'; mir_snprintf(szHost, 64, "%s%s", inet_ntoa(*(PIN_ADDR)&ip), cln ? cln : ""); } -/* - if (ip && pszUrl[0] != '/') - { - mir_free(szNewUrl); - szNewUrl = (char*)mir_alloc(strlen(pszUrl) + 60); - szNewUrl[0] = 0; - - phost = strstr(pszUrl, "://"); - if (phost) - { - phost += 3; - size_t len = phost - pszUrl; - memcpy(szNewUrl, pszUrl, len); - szNewUrl[len] = 0; - } - strcat(szNewUrl, inet_ntoa(*(PIN_ADDR)&ip)); - ppath = strchr(phost, '/'); - if (ppath) strcat(szNewUrl, ppath); - pszUrl = szNewUrl; - } -*/ } mir_free(tszHost); } } } - if (nlc->proxyAuthNeeded && proxyAuthList.getCount()) - { - if (httpSecurity.m_szProvider == NULL && nlc->szProxyServer) - { + if (nlc->proxyAuthNeeded && proxyAuthList.getCount()) { + if (httpSecurity.m_szProvider == NULL && nlc->szProxyServer) { const char* szAuthMethodNlu = proxyAuthList.find(nlc->szProxyServer); - - if (szAuthMethodNlu) - { + if (szAuthMethodNlu) { mir_free(pszProxyAuthHdr); pszProxyAuthHdr = httpSecurity.Execute(nlc, nlc->szProxyServer, szAuthMethodNlu, "", complete); } @@ -566,8 +497,7 @@ INT_PTR NetlibHttpSendRequest(WPARAM wParam, LPARAM lParam) //HTTP headers doneHostHeader = doneContentLengthHeader = doneProxyAuthHeader = doneAuthHeader = 0; - for (i=0; i < nlhr->headersCount; i++) - { + for (i=0; i < nlhr->headersCount; i++) { if ( !lstrcmpiA(nlhr->headers[i].szName, "Host")) doneHostHeader = 1; else if ( !lstrcmpiA(nlhr->headers[i].szName, "Content-Length")) doneContentLengthHeader = 1; else if ( !lstrcmpiA(nlhr->headers[i].szName, "Proxy-Authorization")) doneProxyAuthHeader = 1; @@ -591,204 +521,172 @@ INT_PTR NetlibHttpSendRequest(WPARAM wParam, LPARAM lParam) //send it bytesSent = SendHttpRequestAndData(nlc, &httpRequest, nlhr, !doneContentLengthHeader); - if (bytesSent == SOCKET_ERROR) break; + if (bytesSent == SOCKET_ERROR) + break; //ntlm reply - if ( !doneContentLengthHeader || nlhr->requestType == REQUEST_HEAD) - { - int resultCode = 0; + if (doneContentLengthHeader && nlhr->requestType != REQUEST_HEAD) + break; + + int resultCode = 0; - DWORD fflags = MSG_PEEK | MSG_NODUMP | ((nlhr->flags & NLHRF_NOPROXY) ? MSG_RAW : 0); - DWORD dwTimeOutTime = hdrTimeout < 0 ? -1 : GetTickCount() + hdrTimeout; - if ( !HttpPeekFirstResponseLine(nlc, dwTimeOutTime, fflags, &resultCode, NULL, NULL)) + DWORD fflags = MSG_PEEK | MSG_NODUMP | ((nlhr->flags & NLHRF_NOPROXY) ? MSG_RAW : 0); + DWORD dwTimeOutTime = hdrTimeout < 0 ? -1 : GetTickCount() + hdrTimeout; + if ( !HttpPeekFirstResponseLine(nlc, dwTimeOutTime, fflags, &resultCode, NULL, NULL)) { + NetlibLogf(nlc->nlu, "%s %d: %s Failed (%u %u)", __FILE__, __LINE__, "HttpPeekFirstResponseLine", GetLastError(), count); + DWORD err = GetLastError(); + if (err == ERROR_TIMEOUT || err == ERROR_BAD_FORMAT || err == ERROR_BUFFER_OVERFLOW || + lastFirstLineFail || nlc->termRequested || nlhr->requestType == REQUEST_CONNECT) { - NetlibLogf(nlc->nlu, "%s %d: %s Failed (%u %u)", __FILE__, __LINE__, "HttpPeekFirstResponseLine", GetLastError(), count); - DWORD err = GetLastError(); - if (err == ERROR_TIMEOUT || err == ERROR_BAD_FORMAT || err == ERROR_BUFFER_OVERFLOW || - lastFirstLineFail || nlc->termRequested || nlhr->requestType == REQUEST_CONNECT) - { - bytesSent = SOCKET_ERROR; - break; - } - else - { - lastFirstLineFail = true; - continue; - } + bytesSent = SOCKET_ERROR; + break; } - lastFirstLineFail = false; + + lastFirstLineFail = true; + continue; + } + lastFirstLineFail = false; - DWORD hflags = (nlhr->flags & (NLHRF_NODUMP|NLHRF_NODUMPHEADERS|NLHRF_NODUMPSEND) ? - MSG_NODUMP : (nlhr->flags & NLHRF_DUMPPROXY ? MSG_DUMPPROXY : 0)) | - (nlhr->flags & NLHRF_NOPROXY ? MSG_RAW : 0); + DWORD hflags = (nlhr->flags & (NLHRF_NODUMP|NLHRF_NODUMPHEADERS|NLHRF_NODUMPSEND) ? + MSG_NODUMP : (nlhr->flags & NLHRF_DUMPPROXY ? MSG_DUMPPROXY : 0)) | + (nlhr->flags & NLHRF_NOPROXY ? MSG_RAW : 0); - DWORD dflags = (nlhr->flags & (NLHRF_NODUMP | NLHRF_NODUMPSEND) ? - MSG_NODUMP : MSG_DUMPASTEXT | MSG_DUMPPROXY) | - (nlhr->flags & NLHRF_NOPROXY ? MSG_RAW : 0) | MSG_NODUMP; + DWORD dflags = (nlhr->flags & (NLHRF_NODUMP | NLHRF_NODUMPSEND) ? + MSG_NODUMP : MSG_DUMPASTEXT | MSG_DUMPPROXY) | + (nlhr->flags & NLHRF_NOPROXY ? MSG_RAW : 0) | MSG_NODUMP; - if (resultCode == 100) - { - nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); - } - else if (resultCode == 307 || ((resultCode == 301 || resultCode == 302) // redirect - && (nlhr->flags & NLHRF_REDIRECT))) - { - pszUrl = NULL; + if (resultCode == 100) + nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); - if (nlhr->requestType == REQUEST_HEAD) - nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); - else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + else if (resultCode == 307 || ((resultCode == 301 || resultCode == 302) && (nlhr->flags & NLHRF_REDIRECT))) { // redirect + pszUrl = NULL; - if (nlhrReply) - { - char* tmpUrl = NetlibHttpFindHeader(nlhrReply, "Location"); - if (tmpUrl) - { - size_t rlen = 0; - if (tmpUrl[0] == '/') - { - const char *ppath, *phost; - phost = strstr(pszFullUrl, "://"); - phost = phost ? phost + 3 : pszFullUrl; - ppath = strchr(phost, '/'); - rlen = ppath ? ppath - pszFullUrl : strlen(pszFullUrl); - } + if (nlhr->requestType == REQUEST_HEAD) + nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); + else + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + + if (nlhrReply) { + char* tmpUrl = NetlibHttpFindHeader(nlhrReply, "Location"); + if (tmpUrl) { + size_t rlen = 0; + if (tmpUrl[0] == '/') { + const char *ppath, *phost; + phost = strstr(pszFullUrl, "://"); + phost = phost ? phost + 3 : pszFullUrl; + ppath = strchr(phost, '/'); + rlen = ppath ? ppath - pszFullUrl : strlen(pszFullUrl); + } - nlc->szNewUrl = (char*)mir_realloc(nlc->szNewUrl, rlen + strlen(tmpUrl) * 3 + 1); + nlc->szNewUrl = (char*)mir_realloc(nlc->szNewUrl, rlen + strlen(tmpUrl) * 3 + 1); - strncpy(nlc->szNewUrl, pszFullUrl, rlen); - strcpy(nlc->szNewUrl + rlen, tmpUrl); - pszFullUrl = nlc->szNewUrl; - pszUrl = NULL; + strncpy(nlc->szNewUrl, pszFullUrl, rlen); + strcpy(nlc->szNewUrl + rlen, tmpUrl); + pszFullUrl = nlc->szNewUrl; + pszUrl = NULL; - if (NetlibHttpProcessUrl(nlhr, nlc->nlu, nlc, pszFullUrl) == NULL) - { - bytesSent = SOCKET_ERROR; - break; - } - } - else - { - NetlibHttpSetLastErrorUsingHttpResult(resultCode); + if (NetlibHttpProcessUrl(nlhr, nlc->nlu, nlc, pszFullUrl) == NULL) { bytesSent = SOCKET_ERROR; break; } } - else - { + else { NetlibHttpSetLastErrorUsingHttpResult(resultCode); bytesSent = SOCKET_ERROR; break; } } - else if (resultCode == 401 && !doneAuthHeader) //auth required - { - if (nlhr->requestType == REQUEST_HEAD) - nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); - else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); - - mir_free(pszAuthHdr); pszAuthHdr = NULL; - if (nlhrReply) - { - char *szAuthStr = NULL; - if ( !complete) - { - szAuthStr = NetlibHttpFindAuthHeader(nlhrReply, "WWW-Authenticate", - httpSecurity.m_szProvider); - if (szAuthStr) - { - char *szChallenge = strchr(szAuthStr, ' '); - if ( !szChallenge || !*lrtrimp(szChallenge)) complete = true; - } - } - if (complete && httpSecurity.m_hNtlmSecurity) - { - szAuthStr = httpSecurity.TryBasic() ? - NetlibHttpFindAuthHeader(nlhrReply, "WWW-Authenticate", "Basic") : NULL; - } - - if (szAuthStr) - { + else { + NetlibHttpSetLastErrorUsingHttpResult(resultCode); + bytesSent = SOCKET_ERROR; + break; + } + } + else if (resultCode == 401 && !doneAuthHeader) { //auth required + if (nlhr->requestType == REQUEST_HEAD) + nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); + else + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + + mir_free(pszAuthHdr); pszAuthHdr = NULL; + if (nlhrReply) { + char *szAuthStr = NULL; + if ( !complete) { + szAuthStr = NetlibHttpFindAuthHeader(nlhrReply, "WWW-Authenticate", + httpSecurity.m_szProvider); + if (szAuthStr) { char *szChallenge = strchr(szAuthStr, ' '); - if (szChallenge) { *szChallenge = 0; szChallenge = lrtrimp(szChallenge + 1); } - - pszAuthHdr = httpSecurity.Execute(nlc, szHost, szAuthStr, szChallenge, complete); + if ( !szChallenge || !*lrtrimp(szChallenge)) + complete = true; } } - if (pszAuthHdr == NULL) - { - proxyAuthList.add(szHost, NULL); - NetlibHttpSetLastErrorUsingHttpResult(resultCode); - bytesSent = SOCKET_ERROR; - break; + if (complete && httpSecurity.m_hNtlmSecurity) { + szAuthStr = httpSecurity.TryBasic() ? + NetlibHttpFindAuthHeader(nlhrReply, "WWW-Authenticate", "Basic") : NULL; } - } - else if (resultCode == 407 && !doneProxyAuthHeader) //proxy auth required - { - if (nlhr->requestType == REQUEST_HEAD) - nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); - else - nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); - mir_free(pszProxyAuthHdr); pszProxyAuthHdr = NULL; - if (nlhrReply) - { - char *szAuthStr = NULL; - if ( !complete) - { - szAuthStr = NetlibHttpFindAuthHeader(nlhrReply, "Proxy-Authenticate", - httpSecurity.m_szProvider); - if (szAuthStr) - { - char *szChallenge = strchr(szAuthStr, ' '); - if ( !szChallenge || !*lrtrimp(szChallenge + 1)) complete = true; - } - } - if (complete && httpSecurity.m_hNtlmSecurity) - { - szAuthStr = httpSecurity.TryBasic() ? - NetlibHttpFindAuthHeader(nlhrReply, "Proxy-Authenticate", "Basic") : NULL; - } + if (szAuthStr) { + char *szChallenge = strchr(szAuthStr, ' '); + if (szChallenge) { *szChallenge = 0; szChallenge = lrtrimp(szChallenge + 1); } - if (szAuthStr) - { + pszAuthHdr = httpSecurity.Execute(nlc, szHost, szAuthStr, szChallenge, complete); + } + } + if (pszAuthHdr == NULL) { + proxyAuthList.add(szHost, NULL); + NetlibHttpSetLastErrorUsingHttpResult(resultCode); + bytesSent = SOCKET_ERROR; + break; + } + } + else if (resultCode == 407 && !doneProxyAuthHeader) { //proxy auth required + if (nlhr->requestType == REQUEST_HEAD) + nlhrReply = (NETLIBHTTPREQUEST*)NetlibHttpRecvHeaders((WPARAM)nlc, hflags); + else + nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); + + mir_free(pszProxyAuthHdr); pszProxyAuthHdr = NULL; + if (nlhrReply) { + char *szAuthStr = NULL; + if ( !complete) { + szAuthStr = NetlibHttpFindAuthHeader(nlhrReply, "Proxy-Authenticate", httpSecurity.m_szProvider); + if (szAuthStr) { char *szChallenge = strchr(szAuthStr, ' '); - if (szChallenge) { *szChallenge = 0; szChallenge = lrtrimp(szChallenge + 1); } - - pszProxyAuthHdr = httpSecurity.Execute(nlc, nlc->szProxyServer, szAuthStr, szChallenge, complete); + if ( !szChallenge || !*lrtrimp(szChallenge + 1)) + complete = true; } } - if (pszProxyAuthHdr == NULL) - { - proxyAuthList.add(nlc->szProxyServer, NULL); - NetlibHttpSetLastErrorUsingHttpResult(resultCode); - bytesSent = SOCKET_ERROR; - break; + if (complete && httpSecurity.m_hNtlmSecurity) + szAuthStr = httpSecurity.TryBasic() ? NetlibHttpFindAuthHeader(nlhrReply, "Proxy-Authenticate", "Basic") : NULL; + + if (szAuthStr) { + char *szChallenge = strchr(szAuthStr, ' '); + if (szChallenge) { *szChallenge = 0; szChallenge = lrtrimp(szChallenge + 1); } + + pszProxyAuthHdr = httpSecurity.Execute(nlc, nlc->szProxyServer, szAuthStr, szChallenge, complete); } } - else + if (pszProxyAuthHdr == NULL) { + proxyAuthList.add(nlc->szProxyServer, NULL); + NetlibHttpSetLastErrorUsingHttpResult(resultCode); + bytesSent = SOCKET_ERROR; break; - - if (pszProxyAuthHdr && resultCode != 407 && !doneProxyAuthHeader) - { - mir_free(pszProxyAuthHdr); pszProxyAuthHdr = NULL; - } - if (pszAuthHdr && resultCode != 401 && !doneAuthHeader) - { - mir_free(pszAuthHdr); pszAuthHdr = NULL; } + } + else break; - if (nlhrReply) - { - NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); - nlhrReply = NULL; - } + if (pszProxyAuthHdr && resultCode != 407 && !doneProxyAuthHeader) + replaceStr(pszProxyAuthHdr, NULL); + + if (pszAuthHdr && resultCode != 401 && !doneAuthHeader) + replaceStr(pszAuthHdr, NULL); + + if (nlhrReply) { + NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); + nlhrReply = NULL; } - else - break; } + if (count == 0) bytesSent = SOCKET_ERROR; if (nlhrReply) NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); @@ -808,16 +706,12 @@ INT_PTR NetlibHttpFreeRequestStruct(WPARAM, LPARAM lParam) { NETLIBHTTPREQUEST *nlhr = (NETLIBHTTPREQUEST*)lParam; - if (nlhr == NULL || nlhr->cbSize != sizeof(NETLIBHTTPREQUEST) || nlhr->requestType != REQUEST_RESPONSE) - { + if (nlhr == NULL || nlhr->cbSize != sizeof(NETLIBHTTPREQUEST) || nlhr->requestType != REQUEST_RESPONSE) { SetLastError(ERROR_INVALID_PARAMETER); return 0; } - if (nlhr->headers) - { - int i; - for (i=0; iheadersCount; i++) - { + if (nlhr->headers) { + for (int i=0; iheadersCount; i++) { mir_free(nlhr->headers[i].szName); mir_free(nlhr->headers[i].szValue); } @@ -833,35 +727,28 @@ INT_PTR NetlibHttpFreeRequestStruct(WPARAM, LPARAM lParam) INT_PTR NetlibHttpRecvHeaders(WPARAM wParam, LPARAM lParam) { struct NetlibConnection *nlc = (struct NetlibConnection*)wParam; - NETLIBHTTPREQUEST *nlhr; - char *peol, *pbuffer; - char *buffer = NULL; - DWORD dwRequestTimeoutTime; - int bytesPeeked, firstLineLength = 0; - int headersCount = 0, bufferSize = 8192; - bool headersCompleted = false; - if ( !NetlibEnterNestedCS(nlc, NLNCS_RECV)) return 0; - dwRequestTimeoutTime = GetTickCount() + HTTPRECVDATATIMEOUT; - nlhr = (NETLIBHTTPREQUEST*)mir_calloc(sizeof(NETLIBHTTPREQUEST)); + char *peol, *pbuffer; + int headersCount = 0, bufferSize = 8192; + + DWORD dwRequestTimeoutTime = GetTickCount() + HTTPRECVDATATIMEOUT; + NETLIBHTTPREQUEST *nlhr = (NETLIBHTTPREQUEST*)mir_calloc(sizeof(NETLIBHTTPREQUEST)); nlhr->cbSize = sizeof(NETLIBHTTPREQUEST); nlhr->nlc = nlc; // Needed to id connection in the protocol HTTP gateway wrapper functions nlhr->requestType = REQUEST_RESPONSE; - if ( !HttpPeekFirstResponseLine(nlc, dwRequestTimeoutTime, lParam | MSG_PEEK, - &nlhr->resultCode, &nlhr->szResultDescr, &firstLineLength)) - { + int firstLineLength = 0; + if ( !HttpPeekFirstResponseLine(nlc, dwRequestTimeoutTime, lParam | MSG_PEEK, &nlhr->resultCode, &nlhr->szResultDescr, &firstLineLength)) { NetlibLeaveNestedCS(&nlc->ncsRecv); NetlibHttpFreeRequestStruct(0, (LPARAM)nlhr); return 0; } - buffer = (char*)mir_alloc(bufferSize + 1); - bytesPeeked = NLRecv(nlc, buffer, min(firstLineLength, bufferSize), lParam | MSG_DUMPASTEXT); - if (bytesPeeked != firstLineLength) - { + char *buffer = (char*)mir_alloc(bufferSize + 1); + int bytesPeeked = NLRecv(nlc, buffer, min(firstLineLength, bufferSize), lParam | MSG_DUMPASTEXT); + if (bytesPeeked != firstLineLength) { NetlibLeaveNestedCS(&nlc->ncsRecv); NetlibHttpFreeRequestStruct(0, (LPARAM)nlhr); if (bytesPeeked != SOCKET_ERROR) SetLastError(ERROR_HANDLE_EOF); @@ -871,37 +758,31 @@ INT_PTR NetlibHttpRecvHeaders(WPARAM wParam, LPARAM lParam) // Make sure all headers arrived bytesPeeked = 0; - while ( !headersCompleted) - { - if (bytesPeeked >= bufferSize) - { + for (bool headersCompleted = false; !headersCompleted; ) { + if (bytesPeeked >= bufferSize) { bufferSize += 8192; mir_free(buffer); - if (bufferSize > 32 * 1024) - { + if (bufferSize > 32 * 1024) { bytesPeeked = 0; break; } buffer = (char*)mir_alloc(bufferSize + 1); } - bytesPeeked = RecvWithTimeoutTime(nlc, dwRequestTimeoutTime, buffer, bufferSize, - MSG_PEEK | MSG_NODUMP | lParam); - if (bytesPeeked == 0) break; + bytesPeeked = RecvWithTimeoutTime(nlc, dwRequestTimeoutTime, buffer, bufferSize, MSG_PEEK | MSG_NODUMP | lParam); + if (bytesPeeked == 0) + break; - if (bytesPeeked == SOCKET_ERROR) - { + if (bytesPeeked == SOCKET_ERROR) { bytesPeeked = 0; break; } buffer[bytesPeeked] = 0; - for (pbuffer = buffer, headersCount = 0;; pbuffer = peol + 1, ++headersCount) - { + for (pbuffer = buffer, headersCount = 0;; pbuffer = peol + 1, ++headersCount) { peol = strchr(pbuffer, '\n'); if (peol == NULL) break; - if (peol == pbuffer || (peol == (pbuffer + 1) && *pbuffer == '\r')) - { + if (peol == pbuffer || (peol == (pbuffer + 1) && *pbuffer == '\r')) { bytesPeeked = peol - buffer + 1; headersCompleted = true; break; @@ -909,11 +790,10 @@ INT_PTR NetlibHttpRecvHeaders(WPARAM wParam, LPARAM lParam) } } - // Recieve headers + // Receive headers if (bytesPeeked > 0) bytesPeeked = NLRecv(nlc, buffer, bytesPeeked, lParam | MSG_DUMPASTEXT); - if (bytesPeeked <= 0) - { + if (bytesPeeked <= 0) { NetlibLeaveNestedCS(&nlc->ncsRecv); NetlibHttpFreeRequestStruct(0, (LPARAM)nlhr); mir_free(buffer); @@ -924,15 +804,13 @@ INT_PTR NetlibHttpRecvHeaders(WPARAM wParam, LPARAM lParam) nlhr->headersCount = headersCount; nlhr->headers = (NETLIBHTTPHEADER*)mir_calloc(sizeof(NETLIBHTTPHEADER) * headersCount); - for (pbuffer = buffer, headersCount = 0;; pbuffer = peol + 1, ++headersCount) - { + for (pbuffer = buffer, headersCount = 0;; pbuffer = peol + 1, ++headersCount) { peol = strchr(pbuffer, '\n'); if (peol == NULL || peol == pbuffer || (peol == (pbuffer + 1) && *pbuffer == '\r')) break; *peol = 0; char *pColon = strchr(pbuffer, ':'); - if (pColon == NULL) - { + if (pColon == NULL) { NetlibHttpFreeRequestStruct(0, (LPARAM)nlhr); nlhr = NULL; SetLastError(ERROR_INVALID_DATA); break; @@ -963,55 +841,50 @@ INT_PTR NetlibHttpTransaction(WPARAM wParam, LPARAM lParam) } NetlibConnection* nlc = NetlibHttpProcessUrl(nlhr, nlu, (NetlibConnection*)nlhr->nlc); - if (nlc == NULL) return 0; + if (nlc == NULL) + return 0; - { - NETLIBHTTPREQUEST nlhrSend; - char szUserAgent[64]; + NETLIBHTTPREQUEST nlhrSend; + char szUserAgent[64]; - nlhrSend = *nlhr; - nlhrSend.flags &= ~NLHRF_REMOVEHOST; - nlhrSend.flags |= NLHRF_GENERATEHOST | NLHRF_SMARTREMOVEHOST | NLHRF_SMARTAUTHHEADER; + nlhrSend = *nlhr; + nlhrSend.flags &= ~NLHRF_REMOVEHOST; + nlhrSend.flags |= NLHRF_GENERATEHOST | NLHRF_SMARTREMOVEHOST | NLHRF_SMARTAUTHHEADER; - bool doneUserAgentHeader = NetlibHttpFindHeader(nlhr, "User-Agent") != NULL; - bool doneAcceptEncoding = NetlibHttpFindHeader(nlhr, "Accept-Encoding") != NULL; + bool doneUserAgentHeader = NetlibHttpFindHeader(nlhr, "User-Agent") != NULL; + bool doneAcceptEncoding = NetlibHttpFindHeader(nlhr, "Accept-Encoding") != NULL; - if ( !doneUserAgentHeader || !doneAcceptEncoding) - { - nlhrSend.headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER) * (nlhrSend.headersCount + 2)); - memcpy(nlhrSend.headers, nlhr->headers, sizeof(NETLIBHTTPHEADER) * nlhr->headersCount); - } - if ( !doneUserAgentHeader) - { - char *pspace, szMirandaVer[64]; - - nlhrSend.headers[nlhrSend.headersCount].szName = "User-Agent"; - nlhrSend.headers[nlhrSend.headersCount].szValue = szUserAgent; - ++nlhrSend.headersCount; - CallService(MS_SYSTEM_GETVERSIONTEXT, SIZEOF(szMirandaVer), (LPARAM)szMirandaVer); - pspace = strchr(szMirandaVer, ' '); - if (pspace) - { - *pspace++='\0'; - mir_snprintf(szUserAgent, SIZEOF(szUserAgent), "Miranda/%s (%s)", szMirandaVer, pspace); - } - else - mir_snprintf(szUserAgent, SIZEOF(szUserAgent), "Miranda/%s", szMirandaVer); - } - if ( !doneAcceptEncoding) - { - nlhrSend.headers[nlhrSend.headersCount].szName = "Accept-Encoding"; - nlhrSend.headers[nlhrSend.headersCount].szValue = "deflate, gzip"; - ++nlhrSend.headersCount; - } - if (NetlibHttpSendRequest((WPARAM)nlc, (LPARAM)&nlhrSend) == SOCKET_ERROR) - { - if ( !doneUserAgentHeader || !doneAcceptEncoding) mir_free(nlhrSend.headers); - NetlibCloseHandle((WPARAM)nlc, 0); - return 0; + if ( !doneUserAgentHeader || !doneAcceptEncoding) { + nlhrSend.headers = (NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER) * (nlhrSend.headersCount + 2)); + memcpy(nlhrSend.headers, nlhr->headers, sizeof(NETLIBHTTPHEADER) * nlhr->headersCount); + } + + if ( !doneUserAgentHeader) { + nlhrSend.headers[nlhrSend.headersCount].szName = "User-Agent"; + nlhrSend.headers[nlhrSend.headersCount].szValue = szUserAgent; + ++nlhrSend.headersCount; + + char szMirandaVer[64]; + CallService(MS_SYSTEM_GETVERSIONTEXT, SIZEOF(szMirandaVer), (LPARAM)szMirandaVer); + char *pspace = strchr(szMirandaVer, ' '); + if (pspace) { + *pspace++='\0'; + mir_snprintf(szUserAgent, SIZEOF(szUserAgent), "Miranda/%s (%s)", szMirandaVer, pspace); } + else mir_snprintf(szUserAgent, SIZEOF(szUserAgent), "Miranda/%s", szMirandaVer); + } + if ( !doneAcceptEncoding) { + nlhrSend.headers[nlhrSend.headersCount].szName = "Accept-Encoding"; + nlhrSend.headers[nlhrSend.headersCount].szValue = "deflate, gzip"; + ++nlhrSend.headersCount; + } + if (NetlibHttpSendRequest((WPARAM)nlc, (LPARAM)&nlhrSend) == SOCKET_ERROR) { if ( !doneUserAgentHeader || !doneAcceptEncoding) mir_free(nlhrSend.headers); + NetlibCloseHandle((WPARAM)nlc, 0); + return 0; } + if ( !doneUserAgentHeader || !doneAcceptEncoding) + mir_free(nlhrSend.headers); dflags = (nlhr->flags & NLHRF_DUMPASTEXT ? MSG_DUMPASTEXT:0) | (nlhr->flags & NLHRF_NODUMP ? MSG_NODUMP : (nlhr->flags & NLHRF_DUMPPROXY ? MSG_DUMPPROXY : 0)) | @@ -1026,32 +899,28 @@ INT_PTR NetlibHttpTransaction(WPARAM wParam, LPARAM lParam) else nlhrReply = NetlibHttpRecv(nlc, hflags, dflags); - if (nlhrReply) - { + if (nlhrReply) { nlhrReply->szUrl = nlc->szNewUrl; nlc->szNewUrl = NULL; } - if ((nlhr->flags & NLHRF_PERSISTENT) == 0 || nlhrReply == NULL) - { + if ((nlhr->flags & NLHRF_PERSISTENT) == 0 || nlhrReply == NULL) { NetlibCloseHandle((WPARAM)nlc, 0); - if (nlhrReply) nlhrReply->nlc = NULL; + if (nlhrReply) + nlhrReply->nlc = NULL; } - else - nlhrReply->nlc = nlc; + else nlhrReply->nlc = nlc; return (INT_PTR)nlhrReply; } void NetlibHttpSetLastErrorUsingHttpResult(int result) { - if (result >= 200 && result < 300) - { + if (result >= 200 && result < 300) { SetLastError(ERROR_SUCCESS); return; } - switch(result) - { + switch(result) { case 400: SetLastError(ERROR_BAD_FORMAT); break; case 401: case 402: @@ -1075,8 +944,7 @@ char* gzip_decode(char *gzip_data, int *len_ptr, int window) int gzip_err; z_stream zstr; - do - { + do { output_data = (char*)mir_realloc(output_data, gzip_len+1); zstr.next_in = (Bytef*)gzip_data; @@ -1094,7 +962,7 @@ char* gzip_decode(char *gzip_data, int *len_ptr, int window) inflateEnd(&zstr); gzip_len *= 2; } - while (gzip_err == Z_BUF_ERROR); + while (gzip_err == Z_BUF_ERROR); gzip_len = gzip_err == Z_STREAM_END ? zstr.total_out : -1; @@ -1102,8 +970,7 @@ char* gzip_decode(char *gzip_data, int *len_ptr, int window) mir_free(output_data); output_data = NULL; } - else - output_data[gzip_len] = 0; + else output_data[gzip_len] = 0; *len_ptr = gzip_len; return output_data; @@ -1113,23 +980,20 @@ static int NetlibHttpRecvChunkHeader(NetlibConnection* nlc, bool first, DWORD fl { char data[64], *peol1; - for (;;) - { + while(true) { int recvResult = NLRecv(nlc, data, 31, MSG_RAW | MSG_PEEK); - if (recvResult <= 0) return SOCKET_ERROR; + if (recvResult <= 0) + return SOCKET_ERROR; data[recvResult] = 0; peol1 = strchr(data, '\n'); - if (peol1 != NULL) - { + if (peol1 != NULL) { char *peol2 = first ? peol1 : strchr(peol1 + 1, '\n'); - if (peol2 != NULL) - { + if (peol2 != NULL) { int sz = peol2 - data + 1; int r = strtol(first ? data : peol1 + 1, NULL, 16); - if (r == 0) - { + if (r == 0) { char *peol3 = strchr(peol2 + 1, '\n'); if (peol3 == NULL) continue; sz = peol3 - data + 1; @@ -1137,8 +1001,8 @@ static int NetlibHttpRecvChunkHeader(NetlibConnection* nlc, bool first, DWORD fl NLRecv(nlc, data, sz, MSG_RAW | flags); return r; } - else - if (recvResult >= 31) return SOCKET_ERROR; + else if (recvResult >= 31) + return SOCKET_ERROR; } } } @@ -1154,19 +1018,16 @@ next: if (nlhrReply == NULL) return NULL; - if (nlhrReply->resultCode == 100) - { + if (nlhrReply->resultCode == 100) { NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); goto next; } - for (i=0; iheadersCount; i++) - { + for (i=0; iheadersCount; i++) { if ( !lstrcmpiA(nlhrReply->headers[i].szName, "Content-Length")) dataLen = atoi(nlhrReply->headers[i].szValue); - if ( !lstrcmpiA(nlhrReply->headers[i].szName, "Content-Encoding")) - { + if ( !lstrcmpiA(nlhrReply->headers[i].szName, "Content-Encoding")) { cenc = i; if (strstr(nlhrReply->headers[i].szValue, "gzip")) cenctype = 1; @@ -1178,7 +1039,7 @@ next: close = !lstrcmpiA(nlhrReply->headers[i].szValue, "close"); if ( !lstrcmpiA(nlhrReply->headers[i].szName, "Transfer-Encoding") && - !lstrcmpiA(nlhrReply->headers[i].szValue, "chunked")) + !lstrcmpiA(nlhrReply->headers[i].szValue, "chunked")) { chunked = true; chunkhdr = i; @@ -1186,16 +1047,13 @@ next: } } - if (nlhrReply->resultCode >= 200 && (dataLen > 0 || ( !isConnect && dataLen < 0))) - { + if (nlhrReply->resultCode >= 200 && (dataLen > 0 || ( !isConnect && dataLen < 0))) { int recvResult, chunksz = -1; int dataBufferAlloced; - if (chunked) - { + if (chunked) { chunksz = NetlibHttpRecvChunkHeader(nlc, true, dflags); - if (chunksz == SOCKET_ERROR) - { + if (chunksz == SOCKET_ERROR) { NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); return NULL; } @@ -1204,18 +1062,15 @@ next: dataBufferAlloced = dataLen < 0 ? 2048 : dataLen + 1; nlhrReply->pData = (char*)mir_realloc(nlhrReply->pData, dataBufferAlloced); - while (chunksz != 0) - { - for (;;) - { + while (chunksz != 0) { + while(true) { recvResult = RecvWithTimeoutTime(nlc, GetTickCount() + HTTPRECVDATATIMEOUT, nlhrReply->pData + nlhrReply->dataLength, dataBufferAlloced - nlhrReply->dataLength - 1, dflags | (cenctype ? MSG_NODUMP : 0)); if (recvResult == 0) break; - if (recvResult == SOCKET_ERROR) - { + if (recvResult == SOCKET_ERROR) { NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); return NULL; } @@ -1223,47 +1078,39 @@ next: if (dataLen >= 0) { - if (nlhrReply->dataLength >= dataLen) break; + if (nlhrReply->dataLength >= dataLen) + break; } - else - { - if ((dataBufferAlloced - nlhrReply->dataLength) < 256) - { - dataBufferAlloced += 2048; - nlhrReply->pData = (char*)mir_realloc(nlhrReply->pData, dataBufferAlloced); - if (nlhrReply->pData == NULL) - { - SetLastError(ERROR_OUTOFMEMORY); - NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); - return NULL; - } + else if ((dataBufferAlloced - nlhrReply->dataLength) < 256) { + dataBufferAlloced += 2048; + nlhrReply->pData = (char*)mir_realloc(nlhrReply->pData, dataBufferAlloced); + if (nlhrReply->pData == NULL) { + SetLastError(ERROR_OUTOFMEMORY); + NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); + return NULL; } } Sleep(10); } - if (chunked) - { - chunksz = NetlibHttpRecvChunkHeader(nlc, false, dflags); - if (chunksz == SOCKET_ERROR) - { - NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); - return NULL; - } - dataLen += chunksz; - dataBufferAlloced += chunksz; + if (!chunked) + break; - nlhrReply->pData = (char*)mir_realloc(nlhrReply->pData, dataBufferAlloced); + chunksz = NetlibHttpRecvChunkHeader(nlc, false, dflags); + if (chunksz == SOCKET_ERROR) { + NetlibHttpFreeRequestStruct(0, (LPARAM)nlhrReply); + return NULL; } - else - break; + dataLen += chunksz; + dataBufferAlloced += chunksz; + + nlhrReply->pData = (char*)mir_realloc(nlhrReply->pData, dataBufferAlloced); } nlhrReply->pData[nlhrReply->dataLength] = '\0'; } - if (chunked) - { + if (chunked) { nlhrReply->headers[chunkhdr].szName = (char*)mir_realloc(nlhrReply->headers[chunkhdr].szName, 16); lstrcpyA(nlhrReply->headers[chunkhdr].szName, "Content-Length"); @@ -1271,13 +1118,11 @@ next: mir_snprintf(nlhrReply->headers[chunkhdr].szValue, 16, "%u", nlhrReply->dataLength); } - if (cenctype) - { + if (cenctype) { int bufsz = nlhrReply->dataLength; char* szData = NULL; - switch (cenctype) - { + switch (cenctype) { case 1: szData = gzip_decode(nlhrReply->pData, &bufsz, 0x10 | MAX_WBITS); break; @@ -1292,8 +1137,7 @@ next: break; } - if (bufsz > 0) - { + if (bufsz > 0) { NetlibDumpData(nlc, (PBYTE)szData, bufsz, 0, dflags); mir_free(nlhrReply->pData); nlhrReply->pData = szData; @@ -1303,8 +1147,7 @@ next: mir_free(nlhrReply->headers[cenc].szValue); memmove(&nlhrReply->headers[cenc], &nlhrReply->headers[cenc+1], (--nlhrReply->headersCount-cenc)*sizeof(nlhrReply->headers[0])); } - else if (bufsz == 0) - { + else if (bufsz == 0) { mir_free(nlhrReply->pData); nlhrReply->pData = NULL; nlhrReply->dataLength = 0; diff --git a/src/modules/netlib/netlibsecurity.cpp b/src/modules/netlib/netlibsecurity.cpp index 2f538a06fd..396d3a4387 100644 --- a/src/modules/netlib/netlibsecurity.cpp +++ b/src/modules/netlib/netlibsecurity.cpp @@ -89,12 +89,9 @@ static void LoadSecurityLibrary(void) pInitSecurityInterface = (INIT_SECURITY_INTERFACE)GetProcAddress(g_hSecurity, SECURITY_ENTRYPOINT_ANSI); if (pInitSecurityInterface != NULL) - { g_pSSPI = pInitSecurityInterface(); - } - if (g_pSSPI == NULL) - { + if (g_pSSPI == NULL) { FreeLibrary(g_hSecurity); g_hSecurity = NULL; } @@ -111,8 +108,7 @@ HANDLE NetlibInitSecurityProvider(const TCHAR* szProvider, const TCHAR* szPrinci { HANDLE hSecurity = NULL; - if (_tcsicmp(szProvider, _T("Basic")) == 0) - { + if (_tcsicmp(szProvider, _T("Basic")) == 0) { NtlmHandleType* hNtlm = (NtlmHandleType*)mir_calloc(sizeof(NtlmHandleType)); hNtlm->szProvider = mir_tstrdup(szProvider); SecInvalidateHandle(&hNtlm->hClientContext); @@ -124,21 +120,18 @@ HANDLE NetlibInitSecurityProvider(const TCHAR* szProvider, const TCHAR* szPrinci WaitForSingleObject(hSecMutex, INFINITE); - if (secCnt == 0) - { + if (secCnt == 0) { LoadSecurityLibrary(); secCnt += g_hSecurity != NULL; } else secCnt++; - if (g_pSSPI != NULL) - { + if (g_pSSPI != NULL) { PSecPkgInfo ntlmSecurityPackageInfo; bool isGSSAPI = _tcsicmp(szProvider, _T("GSSAPI")) == 0; const TCHAR *szProviderC = isGSSAPI ? _T("Kerberos") : szProvider; SECURITY_STATUS sc = g_pSSPI->QuerySecurityPackageInfo((LPTSTR)szProviderC, &ntlmSecurityPackageInfo); - if (sc == SEC_E_OK) - { + if (sc == SEC_E_OK) { NtlmHandleType* hNtlm; hSecurity = hNtlm = (NtlmHandleType*)mir_calloc(sizeof(NtlmHandleType)); @@ -164,12 +157,12 @@ HANDLE NetlibInitSecurityProvider(const char* szProvider, const char* szPrincipa void NetlibDestroySecurityProvider(HANDLE hSecurity) { - if (hSecurity == NULL) return; + if (hSecurity == NULL) + return; WaitForSingleObject(hSecMutex, INFINITE); - if (ntlmCnt != 0) - { + if (ntlmCnt != 0) { NtlmHandleType* hNtlm = (NtlmHandleType*)hSecurity; if (SecIsValidHandle(&hNtlm->hClientContext)) g_pSSPI->DeleteSecurityContext(&hNtlm->hClientContext); if (SecIsValidHandle(&hNtlm->hClientCredential)) g_pSSPI->FreeCredentialsHandle(&hNtlm->hClientCredential); @@ -197,15 +190,14 @@ char* CompleteGssapi(HANDLE hSecurity, unsigned char *szChallenge, unsigned chls SecBuffer inBuffers[2] = { { sizeof(inDataBuffer), SECBUFFER_DATA, inDataBuffer }, - { chlsz, SECBUFFER_STREAM, szChallenge }, + { chlsz, SECBUFFER_STREAM, szChallenge } }; SecBufferDesc inBuffersDesc = { SECBUFFER_VERSION, 2, inBuffers }; unsigned long qop = 0; SECURITY_STATUS sc = g_pSSPI->DecryptMessage(&hNtlm->hClientContext, &inBuffersDesc, 0, &qop); - if (sc != SEC_E_OK) - { + if (sc != SEC_E_OK) { ReportSecError(sc, __LINE__); return NULL; } @@ -215,8 +207,7 @@ char* CompleteGssapi(HANDLE hSecurity, unsigned char *szChallenge, unsigned chls SecPkgContext_Sizes sizes; sc = g_pSSPI->QueryContextAttributes(&hNtlm->hClientContext, SECPKG_ATTR_SIZES, &sizes); - if (sc != SEC_E_OK) - { + if (sc != SEC_E_OK) { ReportSecError(sc, __LINE__); return NULL; } @@ -235,8 +226,7 @@ char* CompleteGssapi(HANDLE hSecurity, unsigned char *szChallenge, unsigned chls SecBufferDesc outBuffersDesc = { SECBUFFER_VERSION, 3, outBuffers }; sc = g_pSSPI->EncryptMessage(&hNtlm->hClientContext, SECQOP_WRAP_NO_ENCRYPT, &outBuffersDesc, 0); - if (sc != SEC_E_OK) - { + if (sc != SEC_E_OK) { ReportSecError(sc, __LINE__); return NULL; } @@ -246,8 +236,7 @@ char* CompleteGssapi(HANDLE hSecurity, unsigned char *szChallenge, unsigned chls ressz += outBuffersDesc.pBuffers[i].cbBuffer; unsigned char *response = (unsigned char*)alloca(ressz), *p = response; - for (i=0; i < outBuffersDesc.cBuffers; i++) - { + for (i=0; i < outBuffersDesc.cBuffers; i++) { memcpy(p, outBuffersDesc.pBuffers[i].pvBuffer, outBuffersDesc.pBuffers[i].cbBuffer); p += outBuffersDesc.pBuffers[i].cbBuffer; } @@ -257,7 +246,9 @@ char* CompleteGssapi(HANDLE hSecurity, unsigned char *szChallenge, unsigned chls char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, const TCHAR* login, const TCHAR* psw, bool http, unsigned& complete) { - SECURITY_STATUS sc; + if (hSecurity == NULL || ntlmCnt == 0) + return NULL; + SecBufferDesc outputBufferDescriptor, inputBufferDescriptor; SecBuffer outputSecurityToken, inputSecurityToken; TimeStamp tokenExpiration; @@ -265,9 +256,6 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, char *szOutputToken; NtlmHandleType* hNtlm = (NtlmHandleType*)hSecurity; - - if (hSecurity == NULL || ntlmCnt == 0) return NULL; - if (_tcsicmp(hNtlm->szProvider, _T("Basic"))) { bool isGSSAPI = _tcsicmp(hNtlm->szProvider, _T("GSSAPI")) == 0; @@ -368,7 +356,7 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, hNtlm->hasDomain = domainLen != 0; } - sc = g_pSSPI->AcquireCredentialsHandle(NULL, szProvider, + SECURITY_STATUS sc = g_pSSPI->AcquireCredentialsHandle(NULL, szProvider, SECPKG_CRED_OUTBOUND, NULL, hNtlm->hasDomain ? &auth : NULL, NULL, NULL, &hNtlm->hClientCredential, &tokenExpiration); if (sc != SEC_E_OK) @@ -385,7 +373,7 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, outputSecurityToken.cbBuffer = hNtlm->cbMaxToken; outputSecurityToken.pvBuffer = alloca(outputSecurityToken.cbBuffer); - sc = g_pSSPI->InitializeSecurityContext(&hNtlm->hClientCredential, + SECURITY_STATUS sc = g_pSSPI->InitializeSecurityContext(&hNtlm->hClientCredential, hasChallenge ? &hNtlm->hClientContext : NULL, hNtlm->szPrincipal, isGSSAPI ? ISC_REQ_MUTUAL_AUTH | ISC_REQ_STREAM : 0, 0, SECURITY_NATIVE_DREP, hasChallenge ? &inputBufferDescriptor : NULL, 0, &hNtlm->hClientContext, @@ -394,20 +382,16 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, complete = (sc != SEC_I_COMPLETE_AND_CONTINUE && sc != SEC_I_CONTINUE_NEEDED); if (sc == SEC_I_COMPLETE_NEEDED || sc == SEC_I_COMPLETE_AND_CONTINUE) - { sc = g_pSSPI->CompleteAuthToken(&hNtlm->hClientContext, &outputBufferDescriptor); - } - if (sc != SEC_E_OK && sc != SEC_I_CONTINUE_NEEDED) - { + if (sc != SEC_E_OK && sc != SEC_I_CONTINUE_NEEDED) { ReportSecError(sc, __LINE__); return NULL; } szOutputToken = mir_base64_encode((PBYTE)outputSecurityToken.pvBuffer, outputSecurityToken.cbBuffer); } - else - { + else { if ( !login || !psw) return NULL; char *szLogin = mir_t2a(login); @@ -416,8 +400,8 @@ char* NtlmCreateResponseFromChallenge(HANDLE hSecurity, const char *szChallenge, size_t authLen = strlen(szLogin) + strlen(szPassw) + 5; char *szAuth = (char*)alloca(authLen); - mir_snprintf(szAuth, authLen, "%s:%s", szLogin, szPassw); - szOutputToken = mir_strdup(szAuth); + int len = mir_snprintf(szAuth, authLen, "%s:%s", szLogin, szPassw); + szOutputToken = mir_base64_encode((BYTE*)szAuth, len); complete = true; mir_free(szPassw); @@ -456,7 +440,6 @@ static INT_PTR InitSecurityProviderService2(WPARAM, LPARAM lParam) if (req->flags & NNR_UNICODE) hSecurity = NetlibInitSecurityProvider(req->szProviderName, req->szPrincipal); else - hSecurity = NetlibInitSecurityProvider((char*)req->szProviderName, (char*)req->szPrincipal); return (INT_PTR)hSecurity; @@ -487,19 +470,11 @@ static INT_PTR NtlmCreateResponseService2(WPARAM wParam, LPARAM lParam) char* response; if (req->flags & NNR_UNICODE) - { response = NtlmCreateResponseFromChallenge((HANDLE)wParam, req->szChallenge, req->szUserName, req->szPassword, false, req->complete); - } else - { - TCHAR *szLogin = mir_a2t((char*)req->szUserName); - TCHAR *szPassw = mir_a2t((char*)req->szPassword); response = NtlmCreateResponseFromChallenge((HANDLE)wParam, req->szChallenge, - szLogin, szPassw, false, req->complete); - mir_free(szLogin); - mir_free(szPassw); - } + _A2T((char*)req->szUserName), _A2T((char*)req->szPassword), false, req->complete); return (INT_PTR)response; } @@ -518,4 +493,4 @@ void NetlibSecurityInit(void) void NetlibSecurityDestroy(void) { CloseHandle(hSecMutex); -} \ No newline at end of file +} diff --git a/src/modules/netlib/netlibssl.cpp b/src/modules/netlib/netlibssl.cpp index 0a989ff9b7..65b564795c 100644 --- a/src/modules/netlib/netlibssl.cpp +++ b/src/modules/netlib/netlibssl.cpp @@ -695,7 +695,7 @@ int NetlibSslRead(SslHandle *ssl, char *buf, int num, int peek) scRet = SEC_E_OK; - for (;;) + while(true) { if (0 == ssl->cbIoBuffer || scRet == SEC_E_INCOMPLETE_MESSAGE) { diff --git a/src/modules/netlib/netlibupnp.cpp b/src/modules/netlib/netlibupnp.cpp index 564d7093a7..d11917c9b5 100644 --- a/src/modules/netlib/netlibupnp.cpp +++ b/src/modules/netlib/netlibupnp.cpp @@ -258,7 +258,7 @@ static int httpTransact(char* szUrl, char* szResult, int resSize, char* szAction else validateSocket(); - for (;;) + while(true) { retryCount = 0; switch(reqtype) @@ -381,7 +381,7 @@ retrycon: LongLog(szData); sz = 0; - for (;;) + while(true) { int bytesRecv; -- cgit v1.2.3