[PATCH 0/5] MR10426: winhttp: Fix querying available data for chunked transfers.
From: Hans Leidekker <hans@codeweavers.com> Wine-Bug: http://bugs.winehq.org/show_bug.cgi?id=59546 --- dlls/winhttp/request.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index 7ae05db92a5..3bc1d036796 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -173,14 +173,6 @@ struct chunked_stream } state; }; -static DWORD chunked_query_data( struct data_stream *stream, struct request *request ) -{ - struct chunked_stream *chunked_stream = (struct chunked_stream *)stream; - - if (chunked_stream->state != CHUNKED_STREAM_STATE_READING_CHUNK ) return 0; - return min( chunked_stream->chunk_size, chunked_stream->buf_size - chunked_stream->buf_pos ); -} - static BOOL chunked_end_of_data( struct data_stream *stream, struct request *request ) { struct chunked_stream *chunked_stream = (struct chunked_stream *)stream; @@ -331,6 +323,18 @@ static DWORD chunked_read_data( struct data_stream *stream, struct request *requ return ERROR_SUCCESS; } +static DWORD chunked_query_data( struct data_stream *stream, struct request *request ) +{ + struct chunked_stream *chunked_stream = (struct chunked_stream *)stream; + + while (chunked_stream->state < CHUNKED_STREAM_STATE_READING_CHUNK) + { + DWORD size; + if (chunked_read_data( stream, request, NULL, 0, &size )) return 0; + } + return chunked_stream->chunk_size; +} + static DWORD chunked_drain_data( struct data_stream *stream, struct request *request ) { struct chunked_stream *chunked_stream = (struct chunked_stream *)stream; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10426
From: Hans Leidekker <hans@codeweavers.com> --- dlls/winhttp/session.c | 242 +++++++++++++++++++++++++++-------------- 1 file changed, 158 insertions(+), 84 deletions(-) diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c index 6348ec67b82..8595b4a18a8 100644 --- a/dlls/winhttp/session.c +++ b/dlls/winhttp/session.c @@ -175,22 +175,19 @@ static BOOL session_set_option( struct object_header *hdr, DWORD option, void *b { WINHTTP_PROXY_INFO *pi = buffer; - FIXME( "%lu %s %s\n", pi->dwAccessType, debugstr_w(pi->lpszProxy), debugstr_w(pi->lpszProxyBypass) ); + FIXME( "dwAccessType %lu lpszProxy %s lpszProxyBypass %s\n", pi->dwAccessType, debugstr_w(pi->lpszProxy), + debugstr_w(pi->lpszProxyBypass) ); return TRUE; } case WINHTTP_OPTION_REDIRECT_POLICY: { - DWORD policy; - - if (buflen != sizeof(policy)) + if (buflen != sizeof(hdr->redirect_policy)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - policy = *(DWORD *)buffer; - TRACE( "%#lx\n", policy ); - hdr->redirect_policy = policy; + hdr->redirect_policy = *(DWORD *)buffer; + TRACE( "redirect_policy %#lx\n", hdr->redirect_policy ); return TRUE; } case WINHTTP_OPTION_SECURE_PROTOCOLS: @@ -203,7 +200,7 @@ static BOOL session_set_option( struct object_header *hdr, DWORD option, void *b EnterCriticalSection( &session->cs ); session->secure_protocols = *(DWORD *)buffer; LeaveCriticalSection( &session->cs ); - TRACE( "%#lx\n", session->secure_protocols ); + TRACE( "secure_protocols %#lx\n", session->secure_protocols ); return TRUE; } case WINHTTP_OPTION_DISABLE_FEATURE: @@ -211,70 +208,113 @@ static BOOL session_set_option( struct object_header *hdr, DWORD option, void *b return FALSE; case WINHTTP_OPTION_RESOLVE_TIMEOUT: + if (buflen != sizeof(session->resolve_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->resolve_timeout = *(DWORD *)buffer; + TRACE( "resolve_timeout %u\n", session->resolve_timeout ); return TRUE; case WINHTTP_OPTION_CONNECT_TIMEOUT: + if (buflen != sizeof(session->connect_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->connect_timeout = *(DWORD *)buffer; + TRACE( "connect_timeout %u\n", session->connect_timeout ); return TRUE; case WINHTTP_OPTION_SEND_TIMEOUT: + if (buflen != sizeof(session->send_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->send_timeout = *(DWORD *)buffer; + TRACE( "send_timeout %u\n", session->send_timeout ); return TRUE; case WINHTTP_OPTION_RECEIVE_TIMEOUT: + if (buflen != sizeof(session->receive_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->receive_timeout = *(DWORD *)buffer; + TRACE( "receive_timeout %u\n", session->receive_timeout ); return TRUE; case WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT: + if (buflen != sizeof(session->receive_response_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->receive_response_timeout = *(DWORD *)buffer; + TRACE( "receive_response_timeout %u\n", session->receive_response_timeout ); return TRUE; case WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH: + if (buflen != sizeof(session->passport_flags)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->passport_flags = *(DWORD *)buffer; + TRACE( "passport_flags %#lx\n", session->passport_flags ); return TRUE; case WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT: - TRACE("WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT: %p\n", *(HANDLE *)buffer); + if (buflen != sizeof(session->unload_event)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } session->unload_event = *(HANDLE *)buffer; + TRACE( "unload_event %p\n", session->unload_event ); return TRUE; case WINHTTP_OPTION_MAX_CONNS_PER_SERVER: + if (buflen != sizeof(DWORD)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } FIXME( "WINHTTP_OPTION_MAX_CONNS_PER_SERVER: %lu\n", *(DWORD *)buffer ); return TRUE; case WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER: + if (buflen != sizeof(DWORD)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } FIXME( "WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER: %lu\n", *(DWORD *)buffer ); return TRUE; case WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE: { - DWORD buffer_size; - - if (buflen != sizeof(buffer_size)) + if (buflen != sizeof(session->websocket_receive_buffer_size)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - buffer_size = *(DWORD *)buffer; - TRACE( "%#lx\n", buffer_size ); - session->websocket_receive_buffer_size = buffer_size; + session->websocket_receive_buffer_size = *(DWORD *)buffer; + TRACE( "websocket_receive_buffer_size %u\n", session->websocket_receive_buffer_size ); return TRUE; } case WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE: { - DWORD buffer_size; - - if (buflen != sizeof(buffer_size)) + if (buflen != sizeof(session->websocket_send_buffer_size)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - buffer_size = *(DWORD *)buffer; - TRACE( "%#lx\n", buffer_size ); - session->websocket_send_buffer_size = buffer_size; + session->websocket_send_buffer_size = *(DWORD *)buffer; + TRACE( "websocket_send_buffer_size %#x\n", session->websocket_send_buffer_size ); return TRUE; } case WINHTTP_OPTION_DECOMPRESSION: @@ -292,7 +332,7 @@ static BOOL session_set_option( struct object_header *hdr, DWORD option, void *b FIXME( "unknown compression types %lx\n", decompression ); return FALSE; } - TRACE( "%#lx\n", decompression ); + TRACE( "decompression %#lx\n", decompression ); session->hdr.decompression = decompression; return TRUE; } @@ -1023,52 +1063,46 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b { WINHTTP_PROXY_INFO *pi = buffer; - FIXME( "%lu %s %s\n", pi->dwAccessType, debugstr_w(pi->lpszProxy), debugstr_w(pi->lpszProxyBypass) ); + if (buflen != sizeof(*pi)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } + FIXME( "dwAccessType %lu lpszProxy %s lpszProxyBypass %s\n", pi->dwAccessType, debugstr_w(pi->lpszProxy), + debugstr_w(pi->lpszProxyBypass) ); return TRUE; } case WINHTTP_OPTION_DISABLE_FEATURE: { - DWORD disable; - - if (buflen != sizeof(DWORD)) + if (buflen != sizeof(hdr->disable_flags)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - disable = *(DWORD *)buffer; - TRACE( "%#lx\n", disable ); - hdr->disable_flags |= disable; + hdr->disable_flags |= *(DWORD *)buffer; + TRACE( "disable_flags %#lx\n", hdr->disable_flags ); return TRUE; } case WINHTTP_OPTION_AUTOLOGON_POLICY: { - DWORD policy; - - if (buflen != sizeof(DWORD)) + if (buflen != sizeof(hdr->logon_policy)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - policy = *(DWORD *)buffer; - TRACE( "%#lx\n", policy ); - hdr->logon_policy = policy; + hdr->logon_policy = *(DWORD *)buffer; + TRACE( "logon_policy %#lx\n", hdr->logon_policy ); return TRUE; } case WINHTTP_OPTION_REDIRECT_POLICY: { - DWORD policy; - - if (buflen != sizeof(DWORD)) + if (buflen != sizeof(hdr->redirect_policy)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - policy = *(DWORD *)buffer; - TRACE( "%#lx\n", policy ); - hdr->redirect_policy = policy; + hdr->redirect_policy = *(DWORD *)buffer; + TRACE( "redirect_policy %#lx\n", hdr->redirect_policy ); return TRUE; } case WINHTTP_OPTION_SECURITY_FLAGS: @@ -1079,39 +1113,69 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE; - if (buflen < sizeof(DWORD)) + if (buflen < sizeof(flags)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } flags = *(DWORD *)buffer; - TRACE( "%#lx\n", flags ); if (flags && (flags & ~accepted)) { SetLastError( ERROR_INVALID_PARAMETER ); return FALSE; } request->security_flags = flags; + TRACE( "security_flags %#lx\n", flags ); return TRUE; } case WINHTTP_OPTION_RESOLVE_TIMEOUT: + if (buflen != sizeof(request->resolve_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } request->resolve_timeout = *(DWORD *)buffer; + TRACE( "resolve_timeout %u\n", request->resolve_timeout ); return TRUE; case WINHTTP_OPTION_CONNECT_TIMEOUT: + if (buflen != sizeof(request->connect_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } request->connect_timeout = *(DWORD *)buffer; + TRACE( "connect_timeout %u\n", request->connect_timeout ); return TRUE; case WINHTTP_OPTION_SEND_TIMEOUT: + if (buflen != sizeof(request->send_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } request->send_timeout = *(DWORD *)buffer; + TRACE( "send_timeout %u\n", request->send_timeout ); return TRUE; case WINHTTP_OPTION_RECEIVE_TIMEOUT: + if (buflen != sizeof(request->receive_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } request->receive_timeout = *(DWORD *)buffer; + TRACE( "receive_timeout %u\n", request->receive_timeout ); return TRUE; case WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT: + if (buflen != sizeof(request->receive_response_timeout)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } request->receive_response_timeout = *(DWORD *)buffer; + TRACE( "receive_response_timeout %u\n", request->receive_response_timeout ); return TRUE; case WINHTTP_OPTION_USERNAME: @@ -1120,6 +1184,7 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b free( connect->username ); if (!(connect->username = buffer_to_str( buffer, buflen ))) return FALSE; + TRACE( "username %s\n", debugstr_w(connect->username) ); return TRUE; } case WINHTTP_OPTION_PASSWORD: @@ -1136,6 +1201,7 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b free( session->proxy_username ); if (!(session->proxy_username = buffer_to_str( buffer, buflen ))) return FALSE; + TRACE( "proxy_username %s\n", debugstr_w(session->proxy_username) ); return TRUE; } case WINHTTP_OPTION_PROXY_PASSWORD: @@ -1171,19 +1237,19 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b SetLastError( ERROR_INVALID_PARAMETER ); return FALSE; } - if (request->cred_handle_initialized) { FreeCredentialsHandle( &request->cred_handle ); request->cred_handle_initialized = FALSE; } - + TRACE( "client_cert %p\n", request->client_cert ); return TRUE; } case WINHTTP_OPTION_ENABLE_FEATURE: - if(buflen == sizeof( DWORD ) && *(DWORD *)buffer == WINHTTP_ENABLE_SSL_REVOCATION) + if (buflen == sizeof( DWORD ) && *(DWORD *)buffer == WINHTTP_ENABLE_SSL_REVOCATION) { request->check_revocation = TRUE; + TRACE( "SSL revocation enabled\n" ); SetLastError( NO_ERROR ); return TRUE; } @@ -1195,68 +1261,77 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b case WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET: request->flags |= REQUEST_FLAG_WEBSOCKET_UPGRADE; + TRACE( "enabled upgrade to web socket\n" ); return TRUE; case WINHTTP_OPTION_CONNECT_RETRIES: - FIXME("WINHTTP_OPTION_CONNECT_RETRIES\n"); + if (buflen != sizeof(DWORD)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + FIXME( "WINHTTP_OPTION_CONNECT_RETRIES %lu\n", *(DWORD *)buffer ); return TRUE; case WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS: - if (buflen == sizeof(DWORD)) + if (buflen != sizeof(request->max_redirects)) { - request->max_redirects = *(DWORD *)buffer; - SetLastError(NO_ERROR); - return TRUE; + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; } - - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; + request->max_redirects = *(DWORD *)buffer; + TRACE( "max_redirects %lu\n", request->max_redirects ); + SetLastError(NO_ERROR); + return TRUE; case WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE: - FIXME("WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE\n"); + if (buflen != sizeof(DWORD)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + FIXME("WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE %#lx\n", *(DWORD *)buffer ); return TRUE; case WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE: - FIXME("WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE\n"); + if (buflen != sizeof(DWORD)) + { + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; + } + FIXME("WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE %#lx\n", *(DWORD *)buffer ); return TRUE; case WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL: - if (buflen == sizeof(DWORD)) + if (buflen != sizeof(DWORD)) { - FIXME( "WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL %#lx\n", *(DWORD *)buffer ); - return TRUE; + SetLastError( ERROR_INVALID_PARAMETER ); + return FALSE; } - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; + FIXME( "WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL %#lx\n", *(DWORD *)buffer ); + return TRUE; case WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE: { - DWORD buffer_size; - - if (buflen != sizeof(buffer_size)) + if (buflen != sizeof(request->websocket_receive_buffer_size)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - buffer_size = *(DWORD *)buffer; - WARN( "Setting websocket receive buffer size currently has not effct, size %lu\n", buffer_size ); - request->websocket_receive_buffer_size = buffer_size; + WARN( "currently has no effect\n" ); + request->websocket_receive_buffer_size = *(DWORD *)buffer; + TRACE( "websocket_receive_buffer_size %u\n", request->websocket_set_send_buffer_size); return TRUE; } case WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE: { - DWORD buffer_size; - - if (buflen != sizeof(buffer_size)) + if (buflen != sizeof(request->websocket_set_send_buffer_size)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - - buffer_size = *(DWORD *)buffer; - request->websocket_set_send_buffer_size = buffer_size; - TRACE( "Websocket send buffer size %lu.\n", buffer_size); + request->websocket_set_send_buffer_size = *(DWORD *)buffer; + TRACE( "websocket_set_send_buffer_size %u\n", request->websocket_set_send_buffer_size); return TRUE; } case WINHTTP_OPTION_DECOMPRESSION: @@ -1274,7 +1349,7 @@ static BOOL request_set_option( struct object_header *hdr, DWORD option, void *b FIXME( "unknown compression types %lx\n", decompression ); return FALSE; } - TRACE( "%#lx\n", decompression ); + TRACE( "decompression %#lx\n", decompression ); request->hdr.decompression = decompression; return TRUE; } @@ -1502,12 +1577,11 @@ static BOOL set_option( struct object_header *hdr, DWORD option, void *buffer, D { case WINHTTP_OPTION_CONTEXT_VALUE: { - if (buflen != sizeof(DWORD_PTR)) + if (buflen != sizeof(hdr->context)) { SetLastError( ERROR_INSUFFICIENT_BUFFER ); return FALSE; } - hdr->context = *(DWORD_PTR *)buffer; return TRUE; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10426
From: Hans Leidekker <hans@codeweavers.com> --- dlls/winhttp/session.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c index 8595b4a18a8..649ad35c826 100644 --- a/dlls/winhttp/session.c +++ b/dlls/winhttp/session.c @@ -336,6 +336,15 @@ static BOOL session_set_option( struct object_header *hdr, DWORD option, void *b session->hdr.decompression = decompression; return TRUE; } + case WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL: + if (buflen != sizeof(DWORD)) + { + SetLastError( ERROR_INSUFFICIENT_BUFFER ); + return FALSE; + } + FIXME( "WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL: %lx\n", *(DWORD *)buffer ); + return TRUE; + default: FIXME( "unimplemented option %lu\n", option ); SetLastError( ERROR_WINHTTP_INVALID_OPTION ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10426
From: Hans Leidekker <hans@codeweavers.com> --- include/winhttp.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/include/winhttp.h b/include/winhttp.h index 4ee599fc7da..42316496904 100644 --- a/include/winhttp.h +++ b/include/winhttp.h @@ -55,7 +55,8 @@ typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define ICU_REJECT_USERPWD 0x00004000 /* flags for WinHttpOpen */ -#define WINHTTP_FLAG_ASYNC 0x10000000 +#define WINHTTP_FLAG_ASYNC 0x10000000 +#define WINHTTP_FLAG_SECURE_DEFAULTS 0x30000000 /* flags for WinHttpOpenRequest */ #define WINHTTP_FLAG_ESCAPE_PERCENT 0x00000004 @@ -64,6 +65,7 @@ typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY 0x00000080 #define WINHTTP_FLAG_BYPASS_PROXY_CACHE 0x00000100 #define WINHTTP_FLAG_REFRESH WINHTTP_FLAG_BYPASS_PROXY_CACHE +#define WINHTTP_FLAG_AUTOMATIC_CHUNKING 0x00000200 #define WINHTTP_FLAG_SECURE 0x00800000 #define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY 0 @@ -168,6 +170,7 @@ typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL 133 #define WINHTTP_OPTION_HTTP_PROTOCOL_USED 134 #define WINHTTP_OPTION_KDC_PROXY_SETTINGS 136 +#define WINHTTP_OPTION_PROXY_DISABLE_SERVICE_CALLS 137 #define WINHTTP_OPTION_ENCODE_EXTRA 138 #define WINHTTP_OPTION_DISABLE_STREAM_QUEUE 139 #define WINHTTP_OPTION_IPV6_FAST_FALLBACK 140 @@ -330,7 +333,11 @@ typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define ERROR_WINHTTP_SECURE_FAILURE_PROXY (WINHTTP_ERROR_BASE + 188) #define ERROR_WINHTTP_RESERVED_189 (WINHTTP_ERROR_BASE + 189) #define ERROR_WINHTTP_HTTP_PROTOCOL_MISMATCH (WINHTTP_ERROR_BASE + 190) -#define WINHTTP_ERROR_LAST (WINHTTP_ERROR_BASE + 188) +#define ERROR_WINHTTP_GLOBAL_CALLBACK_FAILED (WINHTTP_ERROR_BASE + 191) +#define ERROR_WINHTTP_FEATURE_DISABLED (WINHTTP_ERROR_BASE + 192) +#define ERROR_WINHTTP_FAST_FORWARDING_NOT_SUPPORTED (WINHTTP_ERROR_BASE + 193) + +#define WINHTTP_ERROR_LAST (WINHTTP_ERROR_BASE + 193) #define WINHTTP_RESET_STATE 0x00000001 #define WINHTTP_RESET_SWPAD_CURRENT_NETWORK 0x00000002 @@ -511,8 +518,10 @@ typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE 0x01000000 #define WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE 0x02000000 #define WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE 0x04000000 +#define WINHTTP_CALLBACK_STATUS_GETPROXYSETTINGS_COMPLETE 0x08000000 #define WINHTTP_CALLBACK_STATUS_SETTINGS_WRITE_COMPLETE 0x10000000 #define WINHTTP_CALLBACK_STATUS_SETTINGS_READ_COMPLETE 0x20000000 + #define WINHTTP_CALLBACK_FLAG_RESOLVE_NAME (WINHTTP_CALLBACK_STATUS_RESOLVING_NAME | WINHTTP_CALLBACK_STATUS_NAME_RESOLVED) #define WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER (WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER | WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER) #define WINHTTP_CALLBACK_FLAG_SEND_REQUEST (WINHTTP_CALLBACK_STATUS_SENDING_REQUEST | WINHTTP_CALLBACK_STATUS_REQUEST_SENT) @@ -530,10 +539,14 @@ typedef int INTERNET_SCHEME, *LPINTERNET_SCHEME; #define WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE #define WINHTTP_CALLBACK_FLAG_REQUEST_ERROR WINHTTP_CALLBACK_STATUS_REQUEST_ERROR #define WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE +#define WINHTTP_CALLBACK_FLAG_GETPROXYSETTINGS_COMPLETE WINHTTP_CALLBACK_STATUS_GETPROXYSETTINGS_COMPLETE + #define WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS (WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE | WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE \ | WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE | WINHTTP_CALLBACK_STATUS_READ_COMPLETE \ | WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE | WINHTTP_CALLBACK_STATUS_REQUEST_ERROR \ - | WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE) + | WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE \ + | WINHTTP_CALLBACK_STATUS_GETPROXYSETTINGS_COMPLETE) + #define WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS 0xffffffff #define WINHTTP_INVALID_STATUS_CALLBACK ((WINHTTP_STATUS_CALLBACK)(-1)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10426
From: Hans Leidekker <hans@codeweavers.com> --- dlls/winhttp/session.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c index 649ad35c826..51e67093cea 100644 --- a/dlls/winhttp/session.c +++ b/dlls/winhttp/session.c @@ -369,6 +369,7 @@ HINTERNET WINAPI WinHttpOpen( LPCWSTR agent, DWORD access, LPCWSTR proxy, LPCWST HINTERNET handle = NULL; TRACE( "%s, %lu, %s, %s, %#lx\n", debugstr_w(agent), access, debugstr_w(proxy), debugstr_w(bypass), flags ); + if (flags & ~WINHTTP_FLAG_ASYNC) FIXME( "flags %#lx not supported\n", flags ); if (!(session = calloc( 1, sizeof(*session) ))) return NULL; @@ -1409,12 +1410,16 @@ static WCHAR *get_request_path( const WCHAR *object ) HINTERNET WINAPI WinHttpOpenRequest( HINTERNET hconnect, const WCHAR *verb, const WCHAR *object, const WCHAR *version, const WCHAR *referrer, const WCHAR **types, DWORD flags ) { + static const DWORD supported_flags = WINHTTP_FLAG_ESCAPE_PERCENT | WINHTTP_FLAG_ESCAPE_DISABLE | + WINHTTP_FLAG_ESCAPE_DISABLE_QUERY | WINHTTP_FLAG_REFRESH | + WINHTTP_FLAG_SECURE; struct request *request; struct connect *connect; HINTERNET hrequest = NULL; TRACE( "%p, %s, %s, %s, %s, %p, %#lx\n", hconnect, debugstr_w(verb), debugstr_w(object), debugstr_w(version), debugstr_w(referrer), types, flags ); + if (flags & ~supported_flags) FIXME( "flags %lx not supported\n", flags ); if (types && TRACE_ON(winhttp)) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10426
participants (2)
-
Hans Leidekker -
Hans Leidekker (@hans)