From: Tobias Gruetzmacher tobias-git@23.gs
--- dlls/urlmon/http.c | 1 + dlls/winhttp/request.c | 3 ++- dlls/wininet/http.c | 10 +++++++--- include/wininet.h | 1 + 4 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/dlls/urlmon/http.c b/dlls/urlmon/http.c index a24006ba08c..e592f697485 100644 --- a/dlls/urlmon/http.c +++ b/dlls/urlmon/http.c @@ -495,6 +495,7 @@ static BOOL is_redirect_response(DWORD status_code) case HTTP_STATUS_MOVED: case HTTP_STATUS_REDIRECT_KEEP_VERB: case HTTP_STATUS_REDIRECT_METHOD: + case HTTP_STATUS_PERMANENT_REDIRECT: return TRUE; } return FALSE; diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index 26022dba3b1..b23b0e8c53d 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -3003,7 +3003,8 @@ static DWORD receive_response( struct request *request ) ret = handle_passport_redirect( request ); goto done; } - if (status == HTTP_STATUS_MOVED || status == HTTP_STATUS_REDIRECT || status == HTTP_STATUS_REDIRECT_KEEP_VERB) + if (status == HTTP_STATUS_MOVED || status == HTTP_STATUS_REDIRECT || + status == HTTP_STATUS_REDIRECT_KEEP_VERB || status == HTTP_STATUS_PERMANENT_REDIRECT) { if (request->hdr.disable_flags & WINHTTP_DISABLE_REDIRECTS || request->hdr.redirect_policy == WINHTTP_OPTION_REDIRECT_POLICY_NEVER) goto done; diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 48bfe35866a..497a582ff89 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -5206,12 +5206,14 @@ static DWORD HTTP_HttpSendRequestW(http_request_t *request, LPCWSTR lpszHeaders, case HTTP_STATUS_MOVED: case HTTP_STATUS_REDIRECT_KEEP_VERB: case HTTP_STATUS_REDIRECT_METHOD: + case HTTP_STATUS_PERMANENT_REDIRECT: new_url = get_redirect_url(request); if(!new_url) break;
if (wcscmp(request->verb, L"GET") && wcscmp(request->verb, L"HEAD") && - request->status_code != HTTP_STATUS_REDIRECT_KEEP_VERB) + request->status_code != HTTP_STATUS_REDIRECT_KEEP_VERB && + request->status_code != HTTP_STATUS_PERMANENT_REDIRECT) { free(request->verb); request->verb = wcsdup(L"GET"); @@ -5401,7 +5403,8 @@ static DWORD HTTP_HttpEndRequestW(http_request_t *request, DWORD dwFlags, DWORD_ case HTTP_STATUS_REDIRECT: case HTTP_STATUS_MOVED: case HTTP_STATUS_REDIRECT_METHOD: - case HTTP_STATUS_REDIRECT_KEEP_VERB: { + case HTTP_STATUS_REDIRECT_KEEP_VERB: + case HTTP_STATUS_PERMANENT_REDIRECT: { WCHAR *new_url;
new_url = get_redirect_url(request); @@ -5409,7 +5412,8 @@ static DWORD HTTP_HttpEndRequestW(http_request_t *request, DWORD dwFlags, DWORD_ break;
if (wcscmp(request->verb, L"GET") && wcscmp(request->verb, L"HEAD") && - request->status_code != HTTP_STATUS_REDIRECT_KEEP_VERB) + request->status_code != HTTP_STATUS_REDIRECT_KEEP_VERB && + request->status_code != HTTP_STATUS_PERMANENT_REDIRECT) { free(request->verb); request->verb = wcsdup(L"GET"); diff --git a/include/wininet.h b/include/wininet.h index 0de2b830812..0537585adf8 100644 --- a/include/wininet.h +++ b/include/wininet.h @@ -1242,6 +1242,7 @@ BOOLAPI GopherGetAttributeW(HINTERNET ,LPCWSTR ,LPCWSTR ,LPBYTE , #define HTTP_STATUS_NOT_MODIFIED 304 #define HTTP_STATUS_USE_PROXY 305 #define HTTP_STATUS_REDIRECT_KEEP_VERB 307 +#define HTTP_STATUS_PERMANENT_REDIRECT 308 #define HTTP_STATUS_BAD_REQUEST 400 #define HTTP_STATUS_DENIED 401 #define HTTP_STATUS_PAYMENT_REQ 402