diff --git a/dlls/wininet/cookie.c b/dlls/wininet/cookie.c index 683776bd82c..d3c62326634 100644 --- a/dlls/wininet/cookie.c +++ b/dlls/wininet/cookie.c @@ -260,7 +260,7 @@ static void COOKIE_deleteDomain(cookie_domain *deadDomain) HeapFree(GetProcessHeap(), 0, deadDomain); } -static BOOL get_cookie(const WCHAR *host, const WCHAR *path, WCHAR *cookie_data, DWORD *size) +BOOL get_cookie(const WCHAR *host, const WCHAR *path, WCHAR *cookie_data, DWORD *size) { unsigned cnt = 0, len, domain_count = 0, cookie_count = 0; cookie_domain *domain; diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index c6542a824e9..53bbde2fa59 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -3957,32 +3957,30 @@ static DWORD HTTP_SecureProxyConnect(http_request_t *request) static void HTTP_InsertCookies(http_request_t *request) { - static const WCHAR szUrlForm[] = {'h','t','t','p',':','/','/','%','s','%','s',0}; - LPWSTR lpszCookies, lpszUrl = NULL; - DWORD nCookieSize, size; - LPHTTPHEADERW Host = HTTP_GetHeader(request, hostW); + DWORD cookie_size, size, cnt = 0; + HTTPHEADERW *host; + WCHAR *cookies; - size = (strlenW(Host->lpszValue) + strlenW(szUrlForm) + strlenW(request->path)) * sizeof(WCHAR); - if (!(lpszUrl = heap_alloc(size))) return; - sprintfW( lpszUrl, szUrlForm, Host->lpszValue, request->path); + static const WCHAR cookieW[] = {'C','o','o','k','i','e',':',' ',0}; - if (InternetGetCookieW(lpszUrl, NULL, NULL, &nCookieSize)) - { - int cnt = 0; - static const WCHAR szCookie[] = {'C','o','o','k','i','e',':',' ',0}; + host = HTTP_GetHeader(request, hostW); + if(!host) + return; - size = sizeof(szCookie) + nCookieSize * sizeof(WCHAR) + sizeof(szCrLf); - if ((lpszCookies = heap_alloc(size))) - { - cnt += sprintfW(lpszCookies, szCookie); - InternetGetCookieW(lpszUrl, NULL, lpszCookies + cnt, &nCookieSize); - strcatW(lpszCookies, szCrLf); + if(!get_cookie(host->lpszValue, request->path, NULL, &cookie_size)) + return; - HTTP_HttpAddRequestHeadersW(request, lpszCookies, strlenW(lpszCookies), HTTP_ADDREQ_FLAG_REPLACE); - HeapFree(GetProcessHeap(), 0, lpszCookies); - } - } - HeapFree(GetProcessHeap(), 0, lpszUrl); + size = sizeof(cookieW) + cookie_size * sizeof(WCHAR) + sizeof(szCrLf); + if(!(cookies = heap_alloc(size))) + return; + + cnt += sprintfW(cookies, cookieW); + get_cookie(host->lpszValue, request->path, cookies+cnt, &cookie_size); + strcatW(cookies, szCrLf); + + HTTP_HttpAddRequestHeadersW(request, cookies, strlenW(cookies), HTTP_ADDREQ_FLAG_REPLACE); + + heap_free(cookies); } static WORD HTTP_ParseDay(LPCWSTR day) diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h index c83e617383c..f94942a5ee8 100644 --- a/dlls/wininet/internet.h +++ b/dlls/wininet/internet.h @@ -497,6 +497,8 @@ DWORD HTTP_Connect(appinfo_t*,LPCWSTR, BOOL GetAddress(LPCWSTR lpszServerName, INTERNET_PORT nServerPort, struct sockaddr *psa, socklen_t *sa_len) DECLSPEC_HIDDEN; +BOOL get_cookie(const WCHAR*,const WCHAR*,WCHAR*,DWORD*) DECLSPEC_HIDDEN; + void INTERNET_SetLastError(DWORD dwError) DECLSPEC_HIDDEN; DWORD INTERNET_GetLastError(void) DECLSPEC_HIDDEN; DWORD INTERNET_AsyncCall(LPWORKREQUEST lpWorkRequest) DECLSPEC_HIDDEN;