ReactOS 0.4.16-dev-2491-g3dc6630
session.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winsock2.h"
#include "ws2ipdef.h"
#include "ws2tcpip.h"
#include "winhttp.h"
#include "winreg.h"
#include "winternl.h"
#include "iphlpapi.h"
#include "dhcpcsdk.h"
#include "ole2.h"
#include "dispex.h"
#include "activscp.h"
#include "wine/debug.h"
#include "winhttp_private.h"
Include dependency graph for session.c:

Go to the source code of this file.

Classes

struct  connection_settings_header
 
struct  AUTO_PROXY_SCRIPT_BUFFER
 

Macros

#define COBJMACROS
 
#define DEFAULT_RESOLVE_TIMEOUT   0
 
#define DEFAULT_CONNECT_TIMEOUT   20000
 
#define DEFAULT_SEND_TIMEOUT   30000
 
#define DEFAULT_RECEIVE_TIMEOUT   30000
 
#define DEFAULT_RECEIVE_RESPONSE_TIMEOUT   ~0u
 
#define MAX_HOST_NAME_LENGTH   256
 
#define MAX_SCHEME_LENGTH   32
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (winhttp)
 
void send_callback (struct object_header *hdr, DWORD status, void *info, DWORD buflen)
 
BOOL WINAPI WinHttpCheckPlatform (void)
 
static void session_destroy (struct object_header *hdr)
 
static BOOL validate_buffer (void *buffer, DWORD *buflen, DWORD required)
 
static BOOL session_query_option (struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
 
static BOOL session_set_option (struct object_header *hdr, DWORD option, void *buffer, DWORD buflen)
 
HINTERNET WINAPI WinHttpOpen (LPCWSTR agent, DWORD access, LPCWSTR proxy, LPCWSTR bypass, DWORD flags)
 
static void connect_destroy (struct object_header *hdr)
 
static BOOL connect_query_option (struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
 
static BOOL domain_matches (LPCWSTR server, LPCWSTR domain)
 
static BOOL should_bypass_proxy (struct session *session, LPCWSTR server)
 
BOOL set_server_for_hostname (struct connect *connect, const WCHAR *server, INTERNET_PORT port)
 
HINTERNET WINAPI WinHttpConnect (HINTERNET hsession, const WCHAR *server, INTERNET_PORT port, DWORD reserved)
 
static void request_destroy (struct object_header *hdr)
 
static BOOL return_string_option (WCHAR *buffer, const WCHAR *str, LPDWORD buflen)
 
static WCHARblob_to_str (DWORD encoding, CERT_NAME_BLOB *blob)
 
static BOOL copy_sockaddr (const struct sockaddr *addr, SOCKADDR_STORAGE *addr_storage)
 
static WCHARbuild_url (struct request *request)
 
static BOOL request_query_option (struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
 
static WCHARbuffer_to_str (WCHAR *buffer, DWORD buflen)
 
static BOOL request_set_option (struct object_header *hdr, DWORD option, void *buffer, DWORD buflen)
 
static BOOL add_accept_types_header (struct request *request, const WCHAR **types)
 
static WCHARget_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)
 
BOOL WINAPI WinHttpCloseHandle (HINTERNET handle)
 
static BOOL query_option (struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
 
BOOL WINAPI WinHttpQueryOption (HINTERNET handle, DWORD option, void *buffer, DWORD *buflen)
 
static BOOL set_option (struct object_header *hdr, DWORD option, void *buffer, DWORD buflen)
 
BOOL WINAPI WinHttpSetOption (HINTERNET handle, DWORD option, void *buffer, DWORD buflen)
 
static IP_ADAPTER_ADDRESSES * get_adapters (void)
 
static WCHARdetect_autoproxyconfig_url_dhcp (void)
 
static charget_computer_name (COMPUTER_NAME_FORMAT format)
 
static BOOL is_domain_suffix (const char *domain, const char *suffix)
 
static int reverse_lookup (const struct addrinfo *ai, char *hostname, size_t len)
 
static WCHARbuild_wpad_url (const char *hostname, const struct addrinfo *ai)
 
static WCHARdetect_autoproxyconfig_url_dns (void)
 
BOOL WINAPI WinHttpDetectAutoProxyConfigUrl (DWORD flags, WCHAR **url)
 
static void copy_char_to_wchar_sz (const BYTE *src, DWORD len, WCHAR *dst)
 
BOOL WINAPI WinHttpGetDefaultProxyConfiguration (WINHTTP_PROXY_INFO *info)
 
BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser (WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *config)
 
static BOOL parse_script_result (const char *result, WINHTTP_PROXY_INFO *info)
 
static BOOL get_cached_script (const WCHAR *url, char **buffer, DWORD *out_size)
 
static void cache_script (const WCHAR *url, char *buffer, DWORD size)
 
static chardownload_script (const WCHAR *url, DWORD *out_size)
 
BOOL WINAPI InternetDeInitializeAutoProxyDll (LPSTR, DWORD)
 
BOOL WINAPI InternetGetProxyInfo (LPCSTR, DWORD, LPSTR, DWORD, LPSTR *, LPDWORD)
 
BOOL WINAPI InternetInitializeAutoProxyDll (DWORD, LPSTR, LPSTR, void *, struct AUTO_PROXY_SCRIPT_BUFFER *)
 
static BOOL run_script (char *script, DWORD size, const WCHAR *url, WINHTTP_PROXY_INFO *info, DWORD flags)
 
BOOL WINAPI WinHttpGetProxyForUrl (HINTERNET hsession, LPCWSTR url, WINHTTP_AUTOPROXY_OPTIONS *options, WINHTTP_PROXY_INFO *info)
 
BOOL WINAPI WinHttpSetDefaultProxyConfiguration (WINHTTP_PROXY_INFO *info)
 
DWORD WINAPI WinHttpCreateProxyResolver (HINTERNET hsession, HINTERNET *hresolver)
 
void WINAPI WinHttpFreeProxyResult (WINHTTP_PROXY_RESULT *result)
 
void WINAPI WinHttpFreeProxyResultEx (WINHTTP_PROXY_RESULT_EX *result)
 
void WINAPI WinHttpFreeProxySettings (WINHTTP_PROXY_SETTINGS *settings)
 
DWORD WINAPI WinHttpGetProxyForUrlEx (HINTERNET hresolver, const WCHAR *url, WINHTTP_AUTOPROXY_OPTIONS *options, DWORD_PTR ctx)
 
DWORD WINAPI WinHttpGetProxyForUrlEx2 (HINTERNET hresolver, const WCHAR *url, WINHTTP_AUTOPROXY_OPTIONS *options, DWORD selection_len, BYTE *selection, DWORD_PTR ctx)
 
DWORD WINAPI WinHttpGetProxyResult (HINTERNET hresolver, WINHTTP_PROXY_RESULT *result)
 
DWORD WINAPI WinHttpGetProxyResultEx (HINTERNET hresolver, WINHTTP_PROXY_RESULT_EX *result)
 
DWORD WINAPI WinHttpGetProxySettingsVersion (HINTERNET hsession, DWORD *version)
 
DWORD WINAPI WinHttpReadProxySettings (HINTERNET hsession, const WCHAR *connection, BOOL use_defaults, BOOL set_autodiscover, DWORD *version, BOOL *defaults_returned, WINHTTP_PROXY_SETTINGS *settings)
 
DWORD WINAPI WinHttpResetAutoProxy (HINTERNET hsession, DWORD flags)
 
DWORD WINAPI WinHttpWriteProxySettings (HINTERNET hsession, BOOL force, WINHTTP_PROXY_SETTINGS *settings)
 
WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback (HINTERNET handle, WINHTTP_STATUS_CALLBACK callback, DWORD flags, DWORD_PTR reserved)
 
BOOL WINAPI WinHttpSetTimeouts (HINTERNET handle, int resolve, int connect, int send, int receive)
 
BOOL WINAPI WinHttpTimeFromSystemTime (const SYSTEMTIME *time, LPWSTR string)
 
BOOL WINAPI WinHttpTimeToSystemTime (LPCWSTR string, SYSTEMTIME *time)
 

Variables

static const struct object_vtbl session_vtbl
 
static const struct object_vtbl connect_vtbl
 
static const struct object_vtbl request_vtbl
 
static const WCHAR path_connections []
 
static const DWORD WINHTTP_SETTINGS_MAGIC = 0x18
 
static const DWORD WININET_SETTINGS_MAGIC = 0x46
 
static const DWORD PROXY_TYPE_DIRECT = 1
 
static const DWORD PROXY_TYPE_PROXY = 2
 
static const DWORD PROXY_USE_PAC_SCRIPT = 4
 
static const DWORD PROXY_AUTODETECT_SETTINGS = 8
 
static SRWLOCK cache_lock = SRWLOCK_INIT
 
static DWORD cached_script_size
 
static ULONGLONG cache_update_time
 
static charcached_script
 
static WCHARcached_url
 
static const WCHAR wkday [7][4]
 
static const WCHAR month [12][4]
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 31 of file session.c.

◆ DEFAULT_CONNECT_TIMEOUT

#define DEFAULT_CONNECT_TIMEOUT   20000

Definition at line 42 of file session.c.

◆ DEFAULT_RECEIVE_RESPONSE_TIMEOUT

#define DEFAULT_RECEIVE_RESPONSE_TIMEOUT   ~0u

Definition at line 45 of file session.c.

◆ DEFAULT_RECEIVE_TIMEOUT

#define DEFAULT_RECEIVE_TIMEOUT   30000

Definition at line 44 of file session.c.

◆ DEFAULT_RESOLVE_TIMEOUT

#define DEFAULT_RESOLVE_TIMEOUT   0

Definition at line 41 of file session.c.

◆ DEFAULT_SEND_TIMEOUT

#define DEFAULT_SEND_TIMEOUT   30000

Definition at line 43 of file session.c.

◆ MAX_HOST_NAME_LENGTH

#define MAX_HOST_NAME_LENGTH   256

Definition at line 499 of file session.c.

◆ MAX_SCHEME_LENGTH

#define MAX_SCHEME_LENGTH   32

Definition at line 2094 of file session.c.

Function Documentation

◆ add_accept_types_header()

static BOOL add_accept_types_header ( struct request request,
const WCHAR **  types 
)
static

Definition at line 1248 of file session.c.

1249{
1251
1252 if (!types) return TRUE;
1253 while (*types)
1254 {
1255 if (process_header( request, L"Accept", *types, flags, TRUE )) return FALSE;
1256 types++;
1257 }
1258 return TRUE;
1259}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
GLbitfield flags
Definition: glext.h:7161
DWORD process_header(struct request *request, const WCHAR *field, const WCHAR *value, DWORD flags, BOOL request_only)
Definition: request.c:424
Definition: tftpd.h:86
Definition: cmds.c:130
#define WINHTTP_ADDREQ_FLAG_ADD
Definition: winhttp.h:92
#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
Definition: winhttp.h:93

Referenced by WinHttpOpenRequest().

◆ blob_to_str()

static WCHAR * blob_to_str ( DWORD  encoding,
CERT_NAME_BLOB blob 
)
static

Definition at line 712 of file session.c.

713{
714 WCHAR *ret;
716
717 size = CertNameToStrW( encoding, blob, format, NULL, 0 );
718 if ((ret = LocalAlloc( 0, size * sizeof(WCHAR) )))
719 CertNameToStrW( encoding, blob, format, ret, size );
720
721 return ret;
722}
#define NULL
Definition: types.h:112
DWORD WINAPI CertNameToStrW(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPWSTR psz, DWORD csz)
Definition: str.c:702
return ret
Definition: mutex.c:146
GLsizeiptr size
Definition: glext.h:5919
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:1390
Definition: image.c:134
Definition: format.c:58
#define CERT_SIMPLE_NAME_STR
Definition: wincrypt.h:3642
#define CERT_NAME_STR_CRLF_FLAG
Definition: wincrypt.h:3648
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by request_query_option().

◆ buffer_to_str()

static WCHAR * buffer_to_str ( WCHAR buffer,
DWORD  buflen 
)
static

Definition at line 972 of file session.c.

973{
974 WCHAR *ret;
975 if ((ret = malloc( (buflen + 1) * sizeof(WCHAR))))
976 {
977 memcpy( ret, buffer, buflen * sizeof(WCHAR) );
978 ret[buflen] = 0;
979 return ret;
980 }
982 return NULL;
983}
#define malloc
Definition: debug_ros.c:4
#define ERROR_OUTOFMEMORY
Definition: deptool.c:13
#define SetLastError(x)
Definition: compat.h:752
GLuint buffer
Definition: glext.h:5915
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878

Referenced by request_set_option().

◆ build_url()

static WCHAR * build_url ( struct request request)
static

Definition at line 750 of file session.c.

751{
753 DWORD len = 0;
754 WCHAR *ret;
755
756 memset( &uc, 0, sizeof(uc) );
757 uc.dwStructSize = sizeof(uc);
759 uc.lpszHostName = request->connect->hostname;
761 uc.nPort = request->connect->hostport;
762 uc.lpszUserName = request->connect->username;
763 uc.dwUserNameLength = request->connect->username ? wcslen( request->connect->username ) : 0;
764 uc.lpszPassword = request->connect->password;
765 uc.dwPasswordLength = request->connect->password ? wcslen( request->connect->password ) : 0;
768
769 WinHttpCreateUrl( &uc, 0, NULL, &len );
770 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER || !(ret = malloc( len * sizeof(WCHAR) ))) return NULL;
771
772 if (WinHttpCreateUrl( &uc, 0, ret, &len )) return ret;
773 free( ret );
774 return NULL;
775}
#define ERROR_INSUFFICIENT_BUFFER
Definition: dderror.h:10
#define free
Definition: debug_ros.c:5
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2983
BOOL WINAPI WinHttpCreateUrl(URL_COMPONENTS *uc, DWORD flags, WCHAR *url, DWORD *required)
Definition: url.c:440
GLenum GLsizei len
Definition: glext.h:6722
#define memset(x, y, z)
Definition: compat.h:39
INTERNET_PORT nPort
Definition: winhttp.h:543
LPWSTR lpszUserName
Definition: winhttp.h:544
DWORD dwPasswordLength
Definition: winhttp.h:547
LPWSTR lpszUrlPath
Definition: winhttp.h:548
DWORD dwHostNameLength
Definition: winhttp.h:542
DWORD dwUrlPathLength
Definition: winhttp.h:549
LPWSTR lpszHostName
Definition: winhttp.h:541
LPWSTR lpszPassword
Definition: winhttp.h:546
INTERNET_SCHEME nScheme
Definition: winhttp.h:540
DWORD dwStructSize
Definition: winhttp.h:537
DWORD dwUserNameLength
Definition: winhttp.h:545
char path[256]
Definition: tftpd.h:94
struct object_header hdr
struct connect * connect
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define INTERNET_SCHEME_HTTP
Definition: winhttp.h:47
#define WINHTTP_FLAG_SECURE
Definition: winhttp.h:67
#define INTERNET_SCHEME_HTTPS
Definition: winhttp.h:48

Referenced by request_query_option().

◆ build_wpad_url()

static WCHAR * build_wpad_url ( const char hostname,
const struct addrinfo ai 
)
static

Definition at line 1603 of file session.c.

1604{
1605 char name[NI_MAXHOST];
1606 WCHAR *ret, *p;
1607 int len;
1608
1609 while (ai && ai->ai_family != AF_INET && ai->ai_family != AF_INET6) ai = ai->ai_next;
1610 if (!ai) return NULL;
1611
1612 if (!reverse_lookup( ai, name, sizeof(name) )) hostname = name;
1613
1614 len = lstrlenW( L"http://" ) + strlen( hostname ) + lstrlenW( L"/wpad.dat" );
1615 if (!(ret = p = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) ))) return NULL;
1616 lstrcpyW( p, L"http://" );
1617 p += lstrlenW( L"http://" );
1618 while (*hostname) { *p++ = *hostname++; }
1619 lstrcpyW( p, L"/wpad.dat" );
1620 return ret;
1621}
char * hostname
Definition: ftp.c:88
#define lstrcpyW
Definition: compat.h:749
#define lstrlenW
Definition: compat.h:750
_ACRTIMP size_t __cdecl strlen(const char *)
Definition: string.c:1592
static int reverse_lookup(const struct addrinfo *ai, char *hostname, size_t len)
Definition: session.c:1598
#define AF_INET
Definition: tcpip.h:117
GLfloat GLfloat p
Definition: glext.h:8902
HGLOBAL NTAPI GlobalAlloc(UINT uFlags, SIZE_T dwBytes)
Definition: heapmem.c:368
struct addrinfo * ai_next
Definition: ws2def.h:678
int ai_family
Definition: ws2def.h:672
Definition: name.c:39
#define AF_INET6
Definition: winsock.h:363
#define NI_MAXHOST
Definition: ws2def.h:365

Referenced by detect_autoproxyconfig_url_dns().

◆ cache_script()

static void cache_script ( const WCHAR url,
char buffer,
DWORD  size 
)
static

Definition at line 2000 of file session.c.

2001{
2003 free( cached_url );
2007
2008 if ((cached_url = wcsdup( url )) && buffer && (cached_script = malloc( size )))
2009 {
2012 }
2015}
VOID WINAPI AcquireSRWLockExclusive(PSRWLOCK Lock)
Definition: sync.c:8
VOID WINAPI ReleaseSRWLockExclusive(PSRWLOCK Lock)
Definition: sync.c:36
ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
Definition: sync.c:192
static wchar_t * wcsdup(const wchar_t *str)
Definition: string.h:94
static ULONGLONG cache_update_time
Definition: session.c:1975
static char * cached_script
Definition: session.c:1976
static SRWLOCK cache_lock
Definition: session.c:1973
static DWORD cached_script_size
Definition: session.c:1974
static WCHAR * cached_url
Definition: session.c:1977
static const WCHAR url[]
Definition: encode.c:1384

Referenced by download_script().

◆ connect_destroy()

static void connect_destroy ( struct object_header hdr)
static

Definition at line 369 of file session.c.

370{
371 struct connect *connect = (struct connect *)hdr;
372
373 TRACE("%p\n", connect);
374
376
381 free( connect );
382}
void release_object(struct object_header *hdr)
Definition: handle.c:71
char hdr[14]
Definition: iptest.cpp:33
#define TRACE(s)
Definition: solgame.cpp:4
WCHAR * hostname
struct session * session
WCHAR * password
WCHAR * servername
WCHAR * username

◆ connect_query_option()

static BOOL connect_query_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD buflen 
)
static

Definition at line 384 of file session.c.

385{
386 struct connect *connect = (struct connect *)hdr;
387
388 switch (option)
389 {
391 {
392 if (!validate_buffer( buffer, buflen, sizeof(HINTERNET) )) return FALSE;
393
394 *(HINTERNET *)buffer = connect->session->hdr.handle;
395 *buflen = sizeof(HINTERNET);
396 return TRUE;
397 }
399 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
400
401 *(DWORD *)buffer = connect->session->resolve_timeout;
402 *buflen = sizeof(DWORD);
403 return TRUE;
404
406 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
407
408 *(DWORD *)buffer = connect->session->connect_timeout;
409 *buflen = sizeof(DWORD);
410 return TRUE;
411
413 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
414
415 *(DWORD *)buffer = connect->session->send_timeout;
416 *buflen = sizeof(DWORD);
417 return TRUE;
418
420 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
421
422 *(DWORD *)buffer = connect->session->receive_timeout;
423 *buflen = sizeof(DWORD);
424 return TRUE;
425
427 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
428
429 *(DWORD *)buffer = connect->session->receive_response_timeout;
430 *buflen = sizeof(DWORD);
431 return TRUE;
432
433 default:
434 FIXME( "unimplemented option %lu\n", option );
436 return FALSE;
437 }
438}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
static BOOL validate_buffer(void *buffer, DWORD *buflen, DWORD required)
Definition: session.c:87
Definition: getopt.h:109
#define WINHTTP_OPTION_SEND_TIMEOUT
Definition: winhttp.h:106
#define WINHTTP_OPTION_RESOLVE_TIMEOUT
Definition: winhttp.h:103
#define WINHTTP_OPTION_CONNECT_TIMEOUT
Definition: winhttp.h:104
#define WINHTTP_OPTION_RECEIVE_TIMEOUT
Definition: winhttp.h:107
#define WINHTTP_OPTION_RECEIVE_RESPONSE_TIMEOUT
Definition: winhttp.h:108
#define WINHTTP_OPTION_PARENT_HANDLE
Definition: winhttp.h:112

◆ copy_char_to_wchar_sz()

static void copy_char_to_wchar_sz ( const BYTE src,
DWORD  len,
WCHAR dst 
)
inlinestatic

Definition at line 1719 of file session.c.

1720{
1721 const BYTE *begin;
1722
1723 for (begin = src; src - begin < len; src++, dst++)
1724 *dst = *src;
1725 *dst = 0;
1726}
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340
unsigned char BYTE
Definition: xxhash.c:193

Referenced by WinHttpGetDefaultProxyConfiguration(), and WinHttpGetIEProxyConfigForCurrentUser().

◆ copy_sockaddr()

static BOOL copy_sockaddr ( const struct sockaddr addr,
SOCKADDR_STORAGE *  addr_storage 
)
static

Definition at line 724 of file session.c.

725{
726 switch (addr->sa_family)
727 {
728 case AF_INET:
729 {
730 struct sockaddr_in *addr_in = (struct sockaddr_in *)addr_storage;
731
732 memcpy( addr_in, addr, sizeof(*addr_in) );
733 memset( addr_in + 1, 0, sizeof(*addr_storage) - sizeof(*addr_in) );
734 return TRUE;
735 }
736 case AF_INET6:
737 {
738 struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)addr_storage;
739
740 memcpy( addr_in6, addr, sizeof(*addr_in6) );
741 memset( addr_in6 + 1, 0, sizeof(*addr_storage) - sizeof(*addr_in6) );
742 return TRUE;
743 }
744 default:
745 ERR("unhandled family %u\n", addr->sa_family);
746 return FALSE;
747 }
748}
#define ERR(fmt,...)
Definition: precomp.h:57
GLenum const GLvoid * addr
Definition: glext.h:9621

Referenced by request_query_option().

◆ detect_autoproxyconfig_url_dhcp()

static WCHAR * detect_autoproxyconfig_url_dhcp ( void  )
static

Definition at line 1518 of file session.c.

1519{
1520 IP_ADAPTER_ADDRESSES *adapters, *ptr;
1521 DHCPCAPI_PARAMS_ARRAY send_params, recv_params;
1524 DWORD err, size;
1525 BYTE *tmp, *buf = NULL;
1526
1527 if (!(adapters = get_adapters())) return NULL;
1528
1529 memset( &send_params, 0, sizeof(send_params) );
1530 memset( &param, 0, sizeof(param) );
1531 param.OptionId = OPTION_MSFT_IE_PROXY;
1532 recv_params.nParams = 1;
1533 recv_params.Params = &param;
1534
1535 for (ptr = adapters; ptr; ptr = ptr->Next)
1536 {
1537 MultiByteToWideChar( CP_ACP, 0, ptr->AdapterName, -1, name, ARRAY_SIZE(name) );
1538 TRACE( "adapter '%s' type %lu dhcpv4 enabled %d\n", wine_dbgstr_w(name), ptr->IfType, ptr->Dhcpv4Enabled );
1539
1540 if (ptr->IfType == IF_TYPE_SOFTWARE_LOOPBACK) continue;
1541 /* FIXME: also skip adapters where DHCP is disabled */
1542
1543 size = 256;
1544 if (!(buf = malloc( size ))) goto done;
1545 err = DhcpRequestParams( DHCPCAPI_REQUEST_SYNCHRONOUS, NULL, name, NULL, send_params, recv_params,
1546 buf, &size, NULL );
1547 while (err == ERROR_MORE_DATA)
1548 {
1549 if (!(tmp = realloc( buf, size ))) goto done;
1550 buf = tmp;
1551 err = DhcpRequestParams( DHCPCAPI_REQUEST_SYNCHRONOUS, NULL, name, NULL, send_params, recv_params,
1552 buf, &size, NULL );
1553 }
1554 if (err == ERROR_SUCCESS && param.nBytesData)
1555 {
1556 int len = MultiByteToWideChar( CP_ACP, 0, (const char *)param.Data, param.nBytesData, NULL, 0 );
1557 if ((ret = malloc( (len + 1) * sizeof(WCHAR) )))
1558 {
1559 MultiByteToWideChar( CP_ACP, 0, (const char *)param.Data, param.nBytesData, ret, len );
1560 ret[len] = 0;
1561 }
1562 TRACE("returning %s\n", debugstr_w(ret));
1563 break;
1564 }
1565 }
1566
1567done:
1568 free( buf );
1569 free( adapters );
1570 return ret;
1571}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define realloc
Definition: debug_ros.c:6
#define ERROR_SUCCESS
Definition: deptool.c:10
#define DHCPCAPI_REQUEST_SYNCHRONOUS
Definition: dhcpcsdk.h:115
#define OPTION_MSFT_IE_PROXY
Definition: dhcpcsdk.h:87
DWORD APIENTRY DhcpRequestParams(DWORD Flags, PVOID Reserved, LPWSTR AdapterName, LPDHCPCAPI_CLASSID ClassId, DHCPCAPI_PARAMS_ARRAY SendParams, DHCPCAPI_PARAMS_ARRAY RecdParams, LPBYTE Buffer, LPDWORD pSize, LPWSTR RequestIdStr)
Definition: dhcpcsvc.c:500
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
static IP_ADAPTER_ADDRESSES * get_adapters(void)
Definition: session.c:1499
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
GLfloat param
Definition: glext.h:5796
#define IF_TYPE_SOFTWARE_LOOPBACK
Definition: ipifcons.h:44
#define debugstr_w
Definition: kernel32.h:32
#define wine_dbgstr_w
Definition: kernel32.h:34
static PVOID ptr
Definition: dispmode.c:27
#define MAX_ADAPTER_NAME_LENGTH
Definition: iptypes.h:16
#define err(...)
LPDHCPCAPI_PARAMS Params
Definition: dhcpcsdk.h:104

Referenced by WinHttpDetectAutoProxyConfigUrl().

◆ detect_autoproxyconfig_url_dns()

static WCHAR * detect_autoproxyconfig_url_dns ( void  )
static

Definition at line 1623 of file session.c.

1624{
1625 char *fqdn, *domain, *p;
1626 WCHAR *ret = NULL;
1627
1628 if (!(fqdn = get_computer_name( ComputerNamePhysicalDnsFullyQualified ))) return NULL;
1629 if (!(domain = get_computer_name( ComputerNamePhysicalDnsDomain )))
1630 {
1631 free( fqdn );
1632 return NULL;
1633 }
1634 p = fqdn;
1635 while ((p = strchr( p, '.' )) && is_domain_suffix( p + 1, domain ))
1636 {
1637 char *name;
1638 struct addrinfo *ai, hints;
1639 int res;
1640
1641 if (!(name = malloc( sizeof("wpad") + strlen(p) )))
1642 {
1643 free( fqdn );
1644 free( domain );
1645 return NULL;
1646 }
1647 strcpy( name, "wpad" );
1648 strcat( name, p );
1649 memset( &hints, 0, sizeof(hints) );
1650 hints.ai_flags = AI_ALL | AI_DNS_ONLY;
1651 hints.ai_family = AF_UNSPEC;
1652 res = getaddrinfo( name, NULL, &hints, &ai );
1653 if (!res)
1654 {
1655 ret = build_wpad_url( name, ai );
1656 freeaddrinfo( ai );
1657 if (ret)
1658 {
1659 TRACE("returning %s\n", debugstr_w(ret));
1660 free( name );
1661 break;
1662 }
1663 }
1664 free( name );
1665 p++;
1666 }
1667 free( domain );
1668 free( fqdn );
1669 return ret;
1670}
_ACRTIMP char *__cdecl strchr(const char *, int)
Definition: string.c:3286
static WCHAR * build_wpad_url(const char *hostname, const struct addrinfo *ai)
Definition: session.c:1603
static char * get_computer_name(COMPUTER_NAME_FORMAT format)
Definition: session.c:1573
static BOOL is_domain_suffix(const char *domain, const char *suffix)
Definition: session.c:1589
GLuint res
Definition: glext.h:9613
strcat
Definition: string.h:92
strcpy
Definition: string.h:131
namespace GUID const ADDRINFOEXW * hints
Definition: sock.c:80
Definition: cookie.c:42
#define AF_UNSPEC
Definition: winsock.h:338
#define AI_ALL
Definition: ws2def.h:298
#define AI_DNS_ONLY
Definition: ws2def.h:312
#define getaddrinfo
Definition: wspiapi.h:44
#define freeaddrinfo
Definition: wspiapi.h:46

Referenced by WinHttpDetectAutoProxyConfigUrl().

◆ domain_matches()

static BOOL domain_matches ( LPCWSTR  server,
LPCWSTR  domain 
)
static

Definition at line 448 of file session.c.

449{
450 BOOL ret = FALSE;
451
452 if (!wcsicmp( domain, L"<local>" ) && !wcschr( server, '.' ))
453 ret = TRUE;
454 else if (*domain == '*')
455 {
456 if (domain[1] == '.')
457 {
458 LPCWSTR dot;
459
460 /* For a hostname to match a wildcard, the last domain must match
461 * the wildcard exactly. E.g. if the wildcard is *.a.b, and the
462 * hostname is www.foo.a.b, it matches, but a.b does not.
463 */
464 dot = wcschr( server, '.' );
465 if (dot)
466 {
467 int len = lstrlenW( dot + 1 );
468
469 if (len > lstrlenW( domain + 2 ))
470 {
471 LPCWSTR ptr;
472
473 /* The server's domain is longer than the wildcard, so it
474 * could be a subdomain. Compare the last portion of the
475 * server's domain.
476 */
477 ptr = dot + len + 1 - lstrlenW( domain + 2 );
478 if (!wcsicmp( ptr, domain + 2 ))
479 {
480 /* This is only a match if the preceding character is
481 * a '.', i.e. that it is a matching domain. E.g.
482 * if domain is '*.b.c' and server is 'www.ab.c' they
483 * do not match.
484 */
485 ret = *(ptr - 1) == '.';
486 }
487 }
488 else
489 ret = !wcsicmp( dot + 1, domain + 2 );
490 }
491 }
492 }
493 else
494 ret = !wcsicmp( server, domain );
495 return ret;
496}
#define wcschr
Definition: compat.h:17
#define wcsicmp
Definition: compat.h:15
unsigned int BOOL
Definition: ntddk_ex.h:94
static rfbScreenInfoPtr server
Definition: vnc.c:74
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by should_bypass_proxy().

◆ download_script()

static char * download_script ( const WCHAR url,
DWORD out_size 
)
static

Definition at line 2017 of file session.c.

2018{
2019 static const WCHAR *acceptW[] = {L"*/*", NULL};
2020 HINTERNET ses, con = NULL, req = NULL;
2021 WCHAR *hostname;
2022 URL_COMPONENTSW uc;
2023 DWORD status, size = sizeof(status), offset, to_read, bytes_read, flags = 0;
2024 char *tmp, *buffer;
2025
2027 {
2028 TRACE( "Returning cached result.\n" );
2030 return buffer;
2031 }
2032
2033 memset( &uc, 0, sizeof(uc) );
2034 uc.dwStructSize = sizeof(uc);
2035 uc.dwHostNameLength = -1;
2036 uc.dwUrlPathLength = -1;
2037 if (!WinHttpCrackUrl( url, 0, 0, &uc )) return NULL;
2038 if (!(hostname = malloc( (uc.dwHostNameLength + 1) * sizeof(WCHAR) ))) return NULL;
2039 memcpy( hostname, uc.lpszHostName, uc.dwHostNameLength * sizeof(WCHAR) );
2040 hostname[uc.dwHostNameLength] = 0;
2041
2042 if (!(ses = WinHttpOpen( NULL, WINHTTP_ACCESS_TYPE_NO_PROXY, NULL, NULL, 0 ))) goto done;
2043 WinHttpSetTimeouts( ses, 5000, 60000, 30000, 30000 );
2044 if (!(con = WinHttpConnect( ses, hostname, uc.nPort, 0 ))) goto done;
2046 if (!(req = WinHttpOpenRequest( con, NULL, uc.lpszUrlPath, NULL, NULL, acceptW, flags ))) goto done;
2047 if (!WinHttpSendRequest( req, NULL, 0, NULL, 0, 0, 0 )) goto done;
2048
2049 if (!WinHttpReceiveResponse( req, 0 )) goto done;
2051 &size, NULL ) || status != HTTP_STATUS_OK) goto done;
2052
2053 size = 4096;
2054 if (!(buffer = malloc( size ))) goto done;
2055 to_read = size;
2056 offset = 0;
2057 for (;;)
2058 {
2059 if (!WinHttpReadData( req, buffer + offset, to_read, &bytes_read )) goto done;
2060 if (!bytes_read) break;
2061 to_read -= bytes_read;
2062 offset += bytes_read;
2063 *out_size += bytes_read;
2064 if (!to_read)
2065 {
2066 to_read = size;
2067 size *= 2;
2068 if (!(tmp = realloc( buffer, size ))) goto done;
2069 buffer = tmp;
2070 }
2071 }
2072
2073done:
2074 WinHttpCloseHandle( req );
2075 WinHttpCloseHandle( con );
2076 WinHttpCloseHandle( ses );
2077 free( hostname );
2080 return buffer;
2081}
HINTERNET WINAPI WinHttpOpenRequest(HINTERNET hconnect, const WCHAR *verb, const WCHAR *object, const WCHAR *version, const WCHAR *referrer, const WCHAR **types, DWORD flags)
Definition: session.c:1277
HINTERNET WINAPI WinHttpOpen(LPCWSTR agent, DWORD access, LPCWSTR proxy, LPCWSTR bypass, DWORD flags)
Definition: session.c:304
HINTERNET WINAPI WinHttpConnect(HINTERNET hsession, const WCHAR *server, INTERNET_PORT port, DWORD reserved)
Definition: session.c:594
static void cache_script(const WCHAR *url, char *buffer, DWORD size)
Definition: session.c:2000
BOOL WINAPI WinHttpCloseHandle(HINTERNET handle)
Definition: session.c:1358
BOOL WINAPI WinHttpSetTimeouts(HINTERNET handle, int resolve, int connect, int send, int receive)
Definition: session.c:2460
static BOOL get_cached_script(const WCHAR *url, char **buffer, DWORD *out_size)
Definition: session.c:1979
BOOL WINAPI WinHttpCrackUrl(const WCHAR *url, DWORD len, DWORD flags, URL_COMPONENTSW *uc)
Definition: url.c:173
ULONG to_read
Definition: btrfs.c:4260
GLintptr offset
Definition: glext.h:5920
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK ULONG PVOID ULONG PVOID ULONG out_size
Definition: file.c:100
BOOL WINAPI WinHttpQueryHeaders(HINTERNET hrequest, DWORD level, const WCHAR *name, void *buffer, DWORD *buflen, DWORD *index)
Definition: request.c:814
BOOL WINAPI WinHttpReadData(HINTERNET hrequest, void *buffer, DWORD to_read, DWORD *read)
Definition: request.c:3252
BOOL WINAPI WinHttpSendRequest(HINTERNET hrequest, const WCHAR *headers, DWORD headers_len, void *optional, DWORD optional_len, DWORD total_len, DWORD_PTR context)
Definition: request.c:2397
BOOL WINAPI WinHttpReceiveResponse(HINTERNET hrequest, LPVOID reserved)
Definition: request.c:3068
DWORD dwStructSize
Definition: wininet.h:211
DWORD dwUrlPathLength
Definition: wininet.h:223
LPWSTR lpszHostName
Definition: wininet.h:215
DWORD dwHostNameLength
Definition: wininet.h:216
INTERNET_SCHEME nScheme
Definition: wininet.h:214
LPWSTR lpszUrlPath
Definition: wininet.h:222
INTERNET_PORT nPort
Definition: wininet.h:217
Definition: ps.c:97
#define HTTP_STATUS_OK
Definition: winhttp.h:301
#define WINHTTP_QUERY_STATUS_CODE
Definition: winhttp.h:379
#define WINHTTP_QUERY_FLAG_NUMBER
Definition: winhttp.h:439
#define ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT
Definition: winhttp.h:267
#define WINHTTP_ACCESS_TYPE_NO_PROXY
Definition: winhttp.h:70

Referenced by WinHttpGetProxyForUrl().

◆ get_adapters()

static IP_ADAPTER_ADDRESSES * get_adapters ( void  )
static

Definition at line 1499 of file session.c.

1500{
1501 ULONG err, size = 1024, flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST |
1502 GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_FRIENDLY_NAME;
1503 IP_ADAPTER_ADDRESSES *tmp, *ret;
1504
1505 if (!(ret = malloc( size ))) return NULL;
1506 err = GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size );
1507 while (err == ERROR_BUFFER_OVERFLOW)
1508 {
1509 if (!(tmp = realloc( ret, size ))) break;
1510 ret = tmp;
1511 err = GetAdaptersAddresses( AF_UNSPEC, flags, NULL, ret, &size );
1512 }
1513 if (err == ERROR_SUCCESS) return ret;
1514 free( ret );
1515 return NULL;
1516}
#define GAA_FLAG_SKIP_FRIENDLY_NAME
uint32_t ULONG
Definition: typedefs.h:59
#define ERROR_BUFFER_OVERFLOW
Definition: winerror.h:307

Referenced by detect_autoproxyconfig_url_dhcp(), get_interface_index(), and test_GetUnicastIpAddressEntry().

◆ get_cached_script()

static BOOL get_cached_script ( const WCHAR url,
char **  buffer,
DWORD out_size 
)
static

Definition at line 1979 of file session.c.

1980{
1981 BOOL ret = FALSE;
1982
1983 *buffer = NULL;
1984 *out_size = 0;
1985
1988 {
1989 ret = TRUE;
1991 {
1994 }
1995 }
1997 return ret;
1998}
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
Definition: wcs.c:1972

Referenced by download_script().

◆ get_computer_name()

static char * get_computer_name ( COMPUTER_NAME_FORMAT  format)
static

Definition at line 1573 of file session.c.

1574{
1575 char *ret;
1576 DWORD size = 0;
1577
1579 if (GetLastError() != ERROR_MORE_DATA) return NULL;
1580 if (!(ret = malloc( size ))) return NULL;
1581 if (!GetComputerNameExA( format, ret, &size ))
1582 {
1583 free( ret );
1584 return NULL;
1585 }
1586 return ret;
1587}
BOOL WINAPI GetComputerNameExA(COMPUTER_NAME_FORMAT, LPSTR, LPDWORD)
Definition: compname.c:376

Referenced by detect_autoproxyconfig_url_dns().

◆ get_request_path()

static WCHAR * get_request_path ( const WCHAR object)
static

Definition at line 1261 of file session.c.

1262{
1263 int len = object ? lstrlenW(object) : 0;
1264 WCHAR *p, *ret;
1265
1266 if (!object || object[0] != '/') len++;
1267 if (!(p = ret = malloc( (len + 1) * sizeof(WCHAR) ))) return NULL;
1268 if (!object || object[0] != '/') *p++ = '/';
1269 if (object) lstrcpyW( p, object );
1270 ret[len] = 0;
1271 return ret;
1272}

Referenced by WinHttpOpenRequest().

◆ InternetDeInitializeAutoProxyDll()

BOOL WINAPI InternetDeInitializeAutoProxyDll ( LPSTR  mime,
DWORD  reserved 
)

Definition at line 111 of file main.c.

112{
113 TRACE( "%s, %u\n", debugstr_a(mime), reserved );
114
116
117 heap_free( global_script->text );
118 global_script->text = NULL;
119
121 return TRUE;
122}
static BOOL heap_free(void *mem)
Definition: appwiz.h:76
static CRITICAL_SECTION cs_jsproxy
Definition: main.c:46
static struct pac_script * global_script
Definition: main.c:106
r reserved
Definition: btrfs.c:3006
#define debugstr_a
Definition: kernel32.h:31
const WCHAR * mime
Definition: mimefilter.c:512
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)

Referenced by run_script().

◆ InternetGetProxyInfo()

BOOL WINAPI InternetGetProxyInfo ( LPCSTR  ,
DWORD  ,
LPSTR  ,
DWORD  ,
LPSTR ,
LPDWORD   
)

Referenced by run_script().

◆ InternetInitializeAutoProxyDll()

BOOL WINAPI InternetInitializeAutoProxyDll ( DWORD  ,
LPSTR  ,
LPSTR  ,
void ,
struct AUTO_PROXY_SCRIPT_BUFFER  
)

Referenced by run_script().

◆ is_domain_suffix()

static BOOL is_domain_suffix ( const char domain,
const char suffix 
)
static

Definition at line 1589 of file session.c.

1590{
1591 int len_domain = strlen( domain ), len_suffix = strlen( suffix );
1592
1593 if (len_suffix > len_domain) return FALSE;
1594 if (!stricmp( domain + len_domain - len_suffix, suffix )) return TRUE;
1595 return FALSE;
1596}
#define stricmp(_String1, _String2)
Definition: compat.h:24

Referenced by detect_autoproxyconfig_url_dns().

◆ parse_script_result()

static BOOL parse_script_result ( const char result,
WINHTTP_PROXY_INFO info 
)
static

Definition at line 1929 of file session.c.

1930{
1931 const char *p;
1932 WCHAR *q;
1933 int len;
1934
1935 info->dwAccessType = WINHTTP_ACCESS_TYPE_NO_PROXY;
1936 info->lpszProxy = NULL;
1937 info->lpszProxyBypass = NULL;
1938
1939 TRACE("%s\n", debugstr_a( result ));
1940
1941 p = result;
1942 while (*p == ' ') p++;
1943 len = strlen( p );
1944 if (len >= 5 && !_strnicmp( p, "PROXY", sizeof("PROXY") - 1 ))
1945 {
1946 p += 5;
1947 while (*p == ' ') p++;
1948 if (!*p || *p == ';') return TRUE;
1949 if (!(q = strdupAW( p ))) return FALSE;
1950 len = wcslen( q );
1951 info->lpszProxy = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) );
1952 if (!info->lpszProxy)
1953 {
1954 free( q );
1955 return FALSE;
1956 }
1957 memcpy( info->lpszProxy, q, (len + 1) * sizeof(WCHAR) );
1958 free( q );
1959 q = info->lpszProxy;
1960 info->dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
1961 for (; *q; q++)
1962 {
1963 if (*q == ' ' || *q == ';')
1964 {
1965 *q = 0;
1966 break;
1967 }
1968 }
1969 }
1970 return TRUE;
1971}
static WCHAR * strdupAW(const char *src)
Definition: main.c:31
#define _strnicmp(_String1, _String2, _MaxCount)
Definition: compat.h:23
GLdouble GLdouble GLdouble GLdouble q
Definition: gl.h:2063
GLuint64EXT * result
Definition: glext.h:11304
#define WINHTTP_ACCESS_TYPE_NAMED_PROXY
Definition: winhttp.h:71

Referenced by run_script().

◆ query_option()

static BOOL query_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD buflen 
)
static

Definition at line 1375 of file session.c.

1376{
1377 BOOL ret = FALSE;
1378
1379 if (!buflen)
1380 {
1382 return FALSE;
1383 }
1384
1385 switch (option)
1386 {
1388 {
1389 FIXME( "WINHTTP_OPTION_WORKER_THREAD_COUNT semi-stub.\n" );
1390 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
1391
1392 *(DWORD *)buffer = 0;
1393 *buflen = sizeof(DWORD);
1394 return TRUE;
1395 }
1397 {
1398 if (!validate_buffer( buffer, buflen, sizeof(DWORD_PTR) )) return FALSE;
1399
1400 *(DWORD_PTR *)buffer = hdr->context;
1401 *buflen = sizeof(DWORD_PTR);
1402 return TRUE;
1403 }
1404 default:
1405 if (hdr->vtbl->query_option) ret = hdr->vtbl->query_option( hdr, option, buffer, buflen );
1406 else
1407 {
1408 FIXME( "unimplemented option %lu\n", option );
1410 return FALSE;
1411 }
1412 break;
1413 }
1414 return ret;
1415}
#define DWORD
Definition: nt_native.h:44
uint32_t DWORD_PTR
Definition: typedefs.h:65
#define WINHTTP_OPTION_CONTEXT_VALUE
Definition: winhttp.h:121
#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Definition: winhttp.h:245
#define WINHTTP_OPTION_WORKER_THREAD_COUNT
Definition: winhttp.h:132

Referenced by WinHttpQueryOption().

◆ request_destroy()

static void request_destroy ( struct object_header hdr)
static

Definition at line 652 of file session.c.

653{
654 struct request *request = (struct request *)hdr;
655 unsigned int i, j;
656
657 TRACE("%p\n", request);
658
661
665
668
669 free( request->verb );
670 free( request->path );
671 free( request->version );
674 for (i = 0; i < request->num_headers; i++)
675 {
676 free( request->headers[i].field );
677 free( request->headers[i].value );
678 }
679 free( request->headers );
680 for (i = 0; i < TARGET_MAX; i++)
681 {
682 for (j = 0; j < SCHEME_MAX; j++)
683 {
684 free( request->creds[i][j].username );
685 free( request->creds[i][j].password );
686 }
687 }
688
689 free( request );
690}
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
Definition: cert.c:371
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
void stop_queue(struct queue *queue)
Definition: request.c:144
static void destroy_authinfo(struct authinfo *info)
struct queue queue
struct request::@633 creds[TARGET_MAX][SCHEME_MAX]
const CERT_CONTEXT * server_cert
WCHAR * version
const CERT_CONTEXT * client_cert
struct header * headers
WCHAR * verb
struct authinfo * authinfo
DWORD num_headers
CredHandle cred_handle
WCHAR * status_text
WCHAR * raw_headers
BOOL cred_handle_initialized
struct authinfo * proxy_authinfo
@ TARGET_MAX
@ SCHEME_MAX
SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle phCredential)
Definition: wrapper.c:151

◆ request_query_option()

static BOOL request_query_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD buflen 
)
static

Definition at line 777 of file session.c.

778{
779 struct request *request = (struct request *)hdr;
780
781 switch (option)
782 {
784 {
785 if (!validate_buffer( buffer, buflen, sizeof(HINTERNET) )) return FALSE;
786
787 *(HINTERNET *)buffer = request->connect->hdr.handle;
788 *buflen = sizeof(HINTERNET);
789 return TRUE;
790 }
792 {
793 DWORD flags;
794 int bits;
795
796 if (!validate_buffer( buffer, buflen, sizeof(flags) )) return FALSE;
797
799 if (request->netconn)
800 {
802 if (bits >= 128)
804 else if (bits >= 56)
806 else
808 }
809 *(DWORD *)buffer = flags;
810 *buflen = sizeof(flags);
811 return TRUE;
812 }
814 {
815 const CERT_CONTEXT *cert;
816
817 if (!validate_buffer( buffer, buflen, sizeof(cert) )) return FALSE;
818
821 *buflen = sizeof(cert);
822 return TRUE;
823 }
825 {
827 const CRYPT_OID_INFO *oidInfo;
829
830 FIXME("partial stub\n");
831
832 if (!validate_buffer( buffer, buflen, sizeof(*ci) ) || !cert) return FALSE;
833
834 ci->ftExpiry = cert->pCertInfo->NotAfter;
835 ci->ftStart = cert->pCertInfo->NotBefore;
836 ci->lpszSubjectInfo = blob_to_str( cert->dwCertEncodingType, &cert->pCertInfo->Subject );
837 ci->lpszIssuerInfo = blob_to_str( cert->dwCertEncodingType, &cert->pCertInfo->Issuer );
839 oidInfo = CryptFindOIDInfo( CRYPT_OID_INFO_OID_KEY, cert->pCertInfo->SignatureAlgorithm.pszObjId, 0 );
840 if (oidInfo)
841 ci->lpszSignatureAlgName = (LPWSTR)oidInfo->pwszName;
842 else
846
847 *buflen = sizeof(*ci);
848 return TRUE;
849 }
851 {
852 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
853
855 *buflen = sizeof(DWORD);
856 return TRUE;
857 }
859 {
860 WINHTTP_CONNECTION_INFO *info = buffer;
861 struct sockaddr local;
862 socklen_t len = sizeof(local);
863 const struct sockaddr *remote = (const struct sockaddr *)&request->connect->sockaddr;
864
865 if (!validate_buffer( buffer, buflen, sizeof(*info) )) return FALSE;
866
867 if (!request->netconn)
868 {
870 return FALSE;
871 }
872 if (getsockname( request->netconn->socket, &local, &len )) return FALSE;
873 if (!copy_sockaddr( &local, &info->LocalAddress )) return FALSE;
874 if (!copy_sockaddr( remote, &info->RemoteAddress )) return FALSE;
875 info->cbSize = sizeof(*info);
876 return TRUE;
877 }
879 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
880
882 *buflen = sizeof(DWORD);
883 return TRUE;
884
886 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
887
889 *buflen = sizeof(DWORD);
890 return TRUE;
891
893 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
894
896 *buflen = sizeof(DWORD);
897 return TRUE;
898
900 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
901
903 *buflen = sizeof(DWORD);
904 return TRUE;
905
907 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
908
910 *buflen = sizeof(DWORD);
911 return TRUE;
912
914 return return_string_option( buffer, request->connect->username, buflen );
915
917 return return_string_option( buffer, request->connect->password, buflen );
918
920 return return_string_option( buffer, request->connect->session->proxy_username, buflen );
921
923 return return_string_option( buffer, request->connect->session->proxy_password, buflen );
924
926 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
927
929 *buflen = sizeof(DWORD);
930 return TRUE;
931
933 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
934
935 FIXME("WINHTTP_OPTION_HTTP_PROTOCOL_USED\n");
936 *(DWORD *)buffer = 0;
937 *buflen = sizeof(DWORD);
938 return TRUE;
939
941 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
942
944 *buflen = sizeof(DWORD);
945 return TRUE;
946
948 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
949
951 *buflen = sizeof(DWORD);
952 return TRUE;
953
955 {
956 WCHAR *url;
957 BOOL ret;
958
959 if (!(url = build_url( request ))) return FALSE;
960 ret = return_string_option( buffer, url, buflen );
961 free( url );
962 return ret;
963 }
964
965 default:
966 FIXME( "unimplemented option %lu\n", option );
968 return FALSE;
969 }
970}
PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(PCCERT_CONTEXT pCertContext)
Definition: cert.c:360
static struct list oidInfo
Definition: oid.c:1206
PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey, DWORD dwGroupId)
Definition: oid.c:1799
int netconn_get_cipher_strength(struct netconn *conn)
Definition: net.c:860
static WCHAR * blob_to_str(DWORD encoding, CERT_NAME_BLOB *blob)
Definition: session.c:712
static BOOL copy_sockaddr(const struct sockaddr *addr, SOCKADDR_STORAGE *addr_storage)
Definition: session.c:724
static BOOL return_string_option(WCHAR *buffer, const WCHAR *str, LPDWORD buflen)
Definition: session.c:692
static WCHAR * build_url(struct request *request)
Definition: session.c:750
#define local
Definition: zutil.h:30
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define bits
Definition: infblock.c:15
if(dx< 0)
Definition: linetemp.h:194
int socklen_t
Definition: tcp.c:35
static BYTE cert[]
Definition: msg.c:1374
INT WSAAPI getsockname(IN SOCKET s, OUT LPSOCKADDR name, IN OUT INT FAR *namelen)
Definition: sockctrl.c:213
LPWSTR lpszEncryptionAlgName
Definition: winhttp.h:570
unsigned int websocket_set_send_buffer_size
DWORD max_redirects
int send_timeout
DWORD security_flags
unsigned int websocket_receive_buffer_size
int receive_timeout
int connect_timeout
int resolve_timeout
int receive_response_timeout
struct netconn * netconn
#define CRYPT_OID_INFO_OID_KEY
Definition: wincrypt.h:1955
#define SECURITY_FLAG_STRENGTH_MEDIUM
Definition: winhttp.h:349
#define WINHTTP_OPTION_WEB_SOCKET_RECEIVE_BUFFER_SIZE
Definition: winhttp.h:164
#define WINHTTP_OPTION_PROXY_PASSWORD
Definition: winhttp.h:185
#define WINHTTP_OPTION_USERNAME
Definition: winhttp.h:182
#define WINHTTP_OPTION_MAX_HTTP_AUTOMATIC_REDIRECTS
Definition: winhttp.h:141
#define WINHTTP_OPTION_HTTP_PROTOCOL_USED
Definition: winhttp.h:169
#define WINHTTP_OPTION_CONNECTION_INFO
Definition: winhttp.h:145
#define WINHTTP_OPTION_SERVER_CERT_CONTEXT
Definition: winhttp.h:130
#define WINHTTP_OPTION_SECURITY_FLAGS
Definition: winhttp.h:114
#define SECURITY_FLAG_STRENGTH_WEAK
Definition: winhttp.h:348
#define WINHTTP_OPTION_PROXY_USERNAME
Definition: winhttp.h:184
#define WINHTTP_OPTION_PASSWORD
Definition: winhttp.h:183
#define WINHTTP_OPTION_URL
Definition: winhttp.h:116
#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Definition: winhttp.h:246
#define WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT
Definition: winhttp.h:115
#define WINHTTP_OPTION_WEB_SOCKET_SEND_BUFFER_SIZE
Definition: winhttp.h:165
#define WINHTTP_OPTION_SECURITY_KEY_BITNESS
Definition: winhttp.h:117
#define SECURITY_FLAG_STRENGTH_STRONG
Definition: winhttp.h:350
WCHAR * LPWSTR
Definition: xmlstorage.h:184

◆ request_set_option()

static BOOL request_set_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD  buflen 
)
static

Definition at line 985 of file session.c.

986{
987 struct request *request = (struct request *)hdr;
988
989 switch (option)
990 {
992 {
994
995 FIXME( "%lu %s %s\n", pi->dwAccessType, debugstr_w(pi->lpszProxy), debugstr_w(pi->lpszProxyBypass) );
996 return TRUE;
997 }
999 {
1000 DWORD disable;
1001
1002 if (buflen != sizeof(DWORD))
1003 {
1005 return FALSE;
1006 }
1007
1008 disable = *(DWORD *)buffer;
1009 TRACE( "%#lx\n", disable );
1010 hdr->disable_flags |= disable;
1011 return TRUE;
1012 }
1014 {
1015 DWORD policy;
1016
1017 if (buflen != sizeof(DWORD))
1018 {
1020 return FALSE;
1021 }
1022
1023 policy = *(DWORD *)buffer;
1024 TRACE( "%#lx\n", policy );
1025 hdr->logon_policy = policy;
1026 return TRUE;
1027 }
1029 {
1030 DWORD policy;
1031
1032 if (buflen != sizeof(DWORD))
1033 {
1035 return FALSE;
1036 }
1037
1038 policy = *(DWORD *)buffer;
1039 TRACE( "%#lx\n", policy );
1040 hdr->redirect_policy = policy;
1041 return TRUE;
1042 }
1044 {
1045 DWORD flags;
1050
1051 if (buflen < sizeof(DWORD))
1052 {
1054 return FALSE;
1055 }
1056 flags = *(DWORD *)buffer;
1057 TRACE( "%#lx\n", flags );
1058 if (flags && (flags & ~accepted))
1059 {
1061 return FALSE;
1062 }
1064 return TRUE;
1065 }
1068 return TRUE;
1069
1072 return TRUE;
1073
1076 return TRUE;
1077
1080 return TRUE;
1081
1084 return TRUE;
1085
1087 {
1088 struct connect *connect = request->connect;
1089
1090 free( connect->username );
1091 if (!(connect->username = buffer_to_str( buffer, buflen ))) return FALSE;
1092 return TRUE;
1093 }
1095 {
1096 struct connect *connect = request->connect;
1097
1098 free( connect->password );
1099 if (!(connect->password = buffer_to_str( buffer, buflen ))) return FALSE;
1100 return TRUE;
1101 }
1103 {
1104 struct session *session = request->connect->session;
1105
1107 if (!(session->proxy_username = buffer_to_str( buffer, buflen ))) return FALSE;
1108 return TRUE;
1109 }
1111 {
1112 struct session *session = request->connect->session;
1113
1115 if (!(session->proxy_password = buffer_to_str( buffer, buflen ))) return FALSE;
1116 return TRUE;
1117 }
1119 {
1120 const CERT_CONTEXT *cert;
1121
1122 if (!(hdr->flags & WINHTTP_FLAG_SECURE))
1123 {
1125 return FALSE;
1126 }
1127 if (!buffer)
1128 {
1131 }
1132 else if (buflen >= sizeof(*cert))
1133 {
1137 }
1138 else
1139 {
1141 return FALSE;
1142 }
1143
1145 {
1148 }
1149
1150 return TRUE;
1151 }
1153 if(buflen == sizeof( DWORD ) && *(DWORD *)buffer == WINHTTP_ENABLE_SSL_REVOCATION)
1154 {
1157 return TRUE;
1158 }
1159 else
1160 {
1162 return FALSE;
1163 }
1164
1167 return TRUE;
1168
1170 FIXME("WINHTTP_OPTION_CONNECT_RETRIES\n");
1171 return TRUE;
1172
1174 if (buflen == sizeof(DWORD))
1175 {
1178 return TRUE;
1179 }
1180
1182 return FALSE;
1183
1185 FIXME("WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE\n");
1186 return TRUE;
1187
1189 FIXME("WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE\n");
1190 return TRUE;
1191
1193 if (buflen == sizeof(DWORD))
1194 {
1195 FIXME( "WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL %#lx\n", *(DWORD *)buffer );
1196 return TRUE;
1197 }
1199 return FALSE;
1200
1202 {
1204
1205 if (buflen != sizeof(buffer_size))
1206 {
1208 return FALSE;
1209 }
1210
1211 buffer_size = *(DWORD *)buffer;
1212 WARN( "Setting websocket receive buffer size currently has not effct, size %lu\n", buffer_size );
1214 return TRUE;
1215 }
1216
1218 {
1220
1221 if (buflen != sizeof(buffer_size))
1222 {
1224 return FALSE;
1225 }
1226
1227 buffer_size = *(DWORD *)buffer;
1229 TRACE( "Websocket send buffer size %lu.\n", buffer_size);
1230 return TRUE;
1231 }
1232
1233 default:
1234 FIXME( "unimplemented option %lu\n", option );
1236 return FALSE;
1237 }
1238}
WINBASEAPI _Check_return_ _Out_ AppPolicyProcessTerminationMethod * policy
Definition: appmodel.h:73
#define WARN(fmt,...)
Definition: precomp.h:61
#define NO_ERROR
Definition: dderror.h:5
static WCHAR * buffer_to_str(WCHAR *buffer, DWORD buflen)
Definition: session.c:972
static PROCESS_INFORMATION pi
Definition: debugger.c:2303
int disable
Definition: msacm.c:1365
static void accepted(enum accept_stat, struct rpc_err *)
Definition: rpc_prot.c:280
wchar_t const *const size_t const buffer_size
Definition: stat.cpp:95
enum request_flags flags
BOOL check_revocation
WCHAR * proxy_password
WCHAR * proxy_username
#define WINHTTP_OPTION_PROXY
Definition: winhttp.h:118
#define SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE
Definition: winhttp.h:346
#define WINHTTP_OPTION_ENABLE_FEATURE
Definition: winhttp.h:131
#define WINHTTP_OPTION_MAX_RESPONSE_DRAIN_SIZE
Definition: winhttp.h:144
#define WINHTTP_OPTION_DISABLE_FEATURE
Definition: winhttp.h:125
#define WINHTTP_OPTION_CLIENT_CERT_CONTEXT
Definition: winhttp.h:122
#define WINHTTP_ENABLE_SSL_REVOCATION
Definition: winhttp.h:218
#define ERROR_WINHTTP_INVALID_OPTION
Definition: winhttp.h:240
#define WINHTTP_OPTION_CONNECT_RETRIES
Definition: winhttp.h:105
#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
Definition: winhttp.h:344
#define WINHTTP_OPTION_AUTOLOGON_POLICY
Definition: winhttp.h:129
#define WINHTTP_OPTION_REDIRECT_POLICY
Definition: winhttp.h:140
#define WINHTTP_OPTION_ENABLE_HTTP_PROTOCOL
Definition: winhttp.h:168
#define WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET
Definition: winhttp.h:160
#define SECURITY_FLAG_IGNORE_UNKNOWN_CA
Definition: winhttp.h:343
#define WINHTTP_OPTION_MAX_RESPONSE_HEADER_SIZE
Definition: winhttp.h:143
#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID
Definition: winhttp.h:345
@ REQUEST_FLAG_WEBSOCKET_UPGRADE

◆ return_string_option()

static BOOL return_string_option ( WCHAR buffer,
const WCHAR str,
LPDWORD  buflen 
)
static

Definition at line 692 of file session.c.

693{
694 int len = sizeof(WCHAR);
695 if (str) len += lstrlenW( str ) * sizeof(WCHAR);
696 if (buffer && *buflen >= len)
697 {
698 if (str) memcpy( buffer, str, len );
699 len -= sizeof(WCHAR);
700 buffer[len / sizeof(WCHAR)] = 0;
701 *buflen = len;
702 return TRUE;
703 }
704 else
705 {
706 *buflen = len;
708 return FALSE;
709 }
710}
const WCHAR * str

Referenced by request_query_option().

◆ reverse_lookup()

static int reverse_lookup ( const struct addrinfo ai,
char hostname,
size_t  len 
)
static

Definition at line 1598 of file session.c.

1599{
1600 return getnameinfo( ai->ai_addr, ai->ai_addrlen, hostname, len, NULL, 0, 0 );
1601}
size_t ai_addrlen
Definition: ws2def.h:675
struct sockaddr * ai_addr
Definition: ws2def.h:677
#define getnameinfo
Definition: wspiapi.h:45

Referenced by build_wpad_url().

◆ run_script()

static BOOL run_script ( char script,
DWORD  size,
const WCHAR url,
WINHTTP_PROXY_INFO info,
DWORD  flags 
)
static

Definition at line 2095 of file session.c.

2096{
2098 BOOL ret;
2099 char *result, *urlA, *hostnameA;
2100 DWORD len, len_scheme, len_hostname;
2102 URL_COMPONENTSW uc;
2103
2104 memset( &uc, 0, sizeof(uc) );
2105 uc.dwStructSize = sizeof(uc);
2106 uc.dwSchemeLength = -1;
2107 uc.dwHostNameLength = -1;
2108
2109 if (!WinHttpCrackUrl( url, 0, 0, &uc ))
2110 return FALSE;
2111
2112 memcpy( scheme, uc.lpszScheme, uc.dwSchemeLength * sizeof(WCHAR) );
2113 scheme[uc.dwSchemeLength] = 0;
2114 wcslwr( scheme );
2115 len_scheme = WideCharToMultiByte( CP_ACP, 0, scheme, uc.dwSchemeLength, NULL, 0, NULL, NULL );
2116
2118 {
2119 memcpy( buf, uc.lpszHostName, uc.dwHostNameLength * sizeof(WCHAR) );
2120 buf[uc.dwHostNameLength] = 0;
2121 wcslwr( buf );
2122 hostname = buf;
2123 }
2124 else
2125 {
2126 hostname = uc.lpszHostName;
2127 }
2128 len_hostname = WideCharToMultiByte( CP_ACP, 0, hostname, uc.dwHostNameLength, NULL, 0, NULL, NULL );
2129
2130 len = WideCharToMultiByte( CP_ACP, 0, uc.lpszHostName + uc.dwHostNameLength, -1, NULL, 0, NULL, NULL );
2131 if (!(urlA = malloc( len + len_scheme + len_hostname + 3 ))) return FALSE;
2132 WideCharToMultiByte( CP_ACP, 0, scheme, uc.dwSchemeLength, urlA, len_scheme, NULL, NULL );
2133 urlA[len_scheme++] = ':';
2134 urlA[len_scheme++] = '/';
2135 urlA[len_scheme++] = '/';
2136 WideCharToMultiByte( CP_ACP, 0, hostname, uc.dwHostNameLength, urlA + len_scheme, len_hostname, NULL, NULL );
2137 hostnameA = urlA + len_scheme;
2138 WideCharToMultiByte( CP_ACP, 0, uc.lpszHostName + uc.dwHostNameLength, -1,
2139 urlA + len_scheme + len_hostname, len, NULL, NULL );
2140
2141 buffer.dwStructSize = sizeof(buffer);
2142 buffer.lpszScriptBuffer = script;
2143 buffer.dwScriptBufferSize = size;
2144
2146 {
2147 free( urlA );
2148 return FALSE;
2149 }
2150
2151 if ((ret = InternetGetProxyInfo( urlA, strlen(urlA), hostnameA, len_hostname, &result, &len )))
2152 {
2154 free( result );
2155 }
2156
2157 free( urlA );
2159 return ret;
2160}
#define WideCharToMultiByte
Definition: compat.h:111
static wchar_t * wcslwr(wchar_t *str)
Definition: string.h:96
#define MAX_HOST_NAME_LENGTH
Definition: session.c:499
BOOL WINAPI InternetDeInitializeAutoProxyDll(LPSTR, DWORD)
Definition: main.c:111
#define MAX_SCHEME_LENGTH
Definition: session.c:2094
BOOL WINAPI InternetInitializeAutoProxyDll(DWORD, LPSTR, LPSTR, void *, struct AUTO_PROXY_SCRIPT_BUFFER *)
static BOOL parse_script_result(const char *result, WINHTTP_PROXY_INFO *info)
Definition: session.c:1929
BOOL WINAPI InternetGetProxyInfo(LPCSTR, DWORD, LPSTR, DWORD, LPSTR *, LPDWORD)
script
Definition: msipriv.h:383
DWORD scheme
#define WINHTTP_AUTOPROXY_HOST_KEEPCASE
Definition: winhttp.h:606
#define WINHTTP_AUTOPROXY_HOST_LOWERCASE
Definition: winhttp.h:607

Referenced by WinHttpGetProxyForUrl().

◆ send_callback()

void send_callback ( struct object_header hdr,
DWORD  status,
void info,
DWORD  buflen 
)

Definition at line 47 of file session.c.

48{
49 if (hdr->callback && (hdr->notify_mask & status))
50 {
51 TRACE( "%p, %#lx, %p, %lu, %lu\n", hdr, status, info, buflen, hdr->recursion_count );
52 InterlockedIncrement( &hdr->recursion_count );
53 hdr->callback( hdr->handle, hdr->context, status, info, buflen );
54 InterlockedDecrement( &hdr->recursion_count );
55 TRACE("returning from %#lx callback\n", status);
56 }
57}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52

◆ session_destroy()

static void session_destroy ( struct object_header hdr)
static

Definition at line 68 of file session.c.

69{
70 struct session *session = (struct session *)hdr;
71
72 TRACE("%p\n", session);
73
76
77 session->cs.DebugInfo->Spare[0] = 0;
79 free( session->agent );
84 free( session );
85}
PRTL_CRITICAL_SECTION_DEBUG DebugInfo
Definition: rtltypes.h:1450
WCHAR * proxy_bypass
CRITICAL_SECTION cs
HANDLE unload_event
WCHAR * agent
WCHAR * proxy_server
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
Definition: synch.c:669
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
void destroy_cookies(struct session *session)
Definition: cookie.c:120

◆ session_query_option()

static BOOL session_query_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD buflen 
)
static

Definition at line 98 of file session.c.

99{
100 struct session *session = (struct session *)hdr;
101
102 switch (option)
103 {
105 {
106 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
107
108 *(DWORD *)buffer = hdr->redirect_policy;
109 *buflen = sizeof(DWORD);
110 return TRUE;
111 }
113 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
114
116 *buflen = sizeof(DWORD);
117 return TRUE;
118
120 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
121
123 *buflen = sizeof(DWORD);
124 return TRUE;
125
127 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
128
130 *buflen = sizeof(DWORD);
131 return TRUE;
132
134 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
135
137 *buflen = sizeof(DWORD);
138 return TRUE;
139
141 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
142
144 *buflen = sizeof(DWORD);
145 return TRUE;
146
148 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
149
151 *buflen = sizeof(DWORD);
152 return TRUE;
153
155 if (!validate_buffer( buffer, buflen, sizeof(DWORD) )) return FALSE;
156
158 *buflen = sizeof(DWORD);
159 return TRUE;
160
161 default:
162 FIXME( "unimplemented option %lu\n", option );
164 return FALSE;
165 }
166}
int resolve_timeout
int receive_response_timeout
int receive_timeout
unsigned int websocket_receive_buffer_size
int send_timeout
int connect_timeout
unsigned int websocket_send_buffer_size

◆ session_set_option()

static BOOL session_set_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD  buflen 
)
static

Definition at line 168 of file session.c.

169{
170 struct session *session = (struct session *)hdr;
171
172 switch (option)
173 {
175 {
177
178 FIXME( "%lu %s %s\n", pi->dwAccessType, debugstr_w(pi->lpszProxy), debugstr_w(pi->lpszProxyBypass) );
179 return TRUE;
180 }
182 {
184
185 if (buflen != sizeof(policy))
186 {
188 return FALSE;
189 }
190
191 policy = *(DWORD *)buffer;
192 TRACE( "%#lx\n", policy );
193 hdr->redirect_policy = policy;
194 return TRUE;
195 }
197 {
198 if (buflen != sizeof(session->secure_protocols))
199 {
201 return FALSE;
202 }
206 TRACE( "%#lx\n", session->secure_protocols );
207 return TRUE;
208 }
211 return FALSE;
212
215 return TRUE;
216
219 return TRUE;
220
223 return TRUE;
224
227 return TRUE;
228
231 return TRUE;
232
235 return TRUE;
236
238 TRACE("WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT: %p\n", *(HANDLE *)buffer);
240 return TRUE;
241
243 FIXME( "WINHTTP_OPTION_MAX_CONNS_PER_SERVER: %lu\n", *(DWORD *)buffer );
244 return TRUE;
245
247 FIXME( "WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER: %lu\n", *(DWORD *)buffer );
248 return TRUE;
249
251 {
253
254 if (buflen != sizeof(buffer_size))
255 {
257 return FALSE;
258 }
259
261 TRACE( "%#lx\n", buffer_size );
263 return TRUE;
264 }
265
267 {
269
270 if (buflen != sizeof(buffer_size))
271 {
273 return FALSE;
274 }
275
277 TRACE( "%#lx\n", buffer_size );
279 return TRUE;
280 }
281
282 default:
283 FIXME( "unimplemented option %lu\n", option );
285 return FALSE;
286 }
287}
DWORD passport_flags
DWORD secure_protocols
#define WINHTTP_OPTION_CONFIGURE_PASSPORT_AUTH
Definition: winhttp.h:135
#define WINHTTP_OPTION_MAX_CONNS_PER_SERVER
Definition: winhttp.h:127
#define WINHTTP_OPTION_UNLOAD_NOTIFY_EVENT
Definition: winhttp.h:150
#define WINHTTP_OPTION_SECURE_PROTOCOLS
Definition: winhttp.h:136
#define WINHTTP_OPTION_MAX_CONNS_PER_1_0_SERVER
Definition: winhttp.h:128

◆ set_option()

static BOOL set_option ( struct object_header hdr,
DWORD  option,
void buffer,
DWORD  buflen 
)
static

Definition at line 1440 of file session.c.

1441{
1442 BOOL ret = TRUE;
1443
1444 if (!buffer && buflen)
1445 {
1447 return FALSE;
1448 }
1449
1450 switch (option)
1451 {
1453 {
1454 if (buflen != sizeof(DWORD_PTR))
1455 {
1457 return FALSE;
1458 }
1459
1460 hdr->context = *(DWORD_PTR *)buffer;
1461 return TRUE;
1462 }
1463 default:
1464 if (hdr->vtbl->set_option) ret = hdr->vtbl->set_option( hdr, option, buffer, buflen );
1465 else
1466 {
1467 FIXME( "unimplemented option %lu\n", option );
1469 return FALSE;
1470 }
1471 break;
1472 }
1473 return ret;
1474}

Referenced by WinHttpSetOption().

◆ set_server_for_hostname()

BOOL set_server_for_hostname ( struct connect connect,
const WCHAR server,
INTERNET_PORT  port 
)

Definition at line 532 of file session.c.

533{
534 struct session *session = connect->session;
535 BOOL ret = TRUE;
536
538 {
539 LPCWSTR colon;
540
541 if ((colon = wcschr( session->proxy_server, ':' )))
542 {
544 session->proxy_server, colon - session->proxy_server - 1 ))
545 {
548 if (!(connect->servername = malloc( (colon - session->proxy_server + 1) * sizeof(WCHAR) )))
549 {
550 ret = FALSE;
551 goto end;
552 }
554 connect->servername[colon - session->proxy_server] = 0;
555 if (*(colon + 1))
556 connect->serverport = wcstol( colon + 1, NULL, 10 );
557 else
559 }
560 }
561 else
562 {
564 {
568 {
569 ret = FALSE;
570 goto end;
571 }
573 }
574 }
575 }
576 else if (server)
577 {
580 if (!(connect->servername = wcsdup( server )))
581 {
582 ret = FALSE;
583 goto end;
584 }
586 }
587end:
588 return ret;
589}
#define wcsnicmp
Definition: compat.h:14
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
Definition: wcs.c:2747
USHORT port
Definition: uri.c:228
static BOOL should_bypass_proxy(struct session *session, LPCWSTR server)
Definition: session.c:501
GLuint GLuint end
Definition: gl.h:1545
INTERNET_PORT serverport
#define INTERNET_DEFAULT_PORT
Definition: winhttp.h:40

Referenced by handle_redirect(), and WinHttpConnect().

◆ should_bypass_proxy()

static BOOL should_bypass_proxy ( struct session session,
LPCWSTR  server 
)
static

Definition at line 501 of file session.c.

502{
503 LPCWSTR ptr;
504 BOOL ret = FALSE;
505
506 if (!session->proxy_bypass) return FALSE;
508 do {
509 LPCWSTR tmp = ptr;
510
511 ptr = wcschr( ptr, ';' );
512 if (!ptr)
513 ptr = wcschr( tmp, ' ' );
514 if (ptr)
515 {
516 if (ptr - tmp < MAX_HOST_NAME_LENGTH)
517 {
519
520 memcpy( domain, tmp, (ptr - tmp) * sizeof(WCHAR) );
521 domain[ptr - tmp] = 0;
523 }
524 ptr += 1;
525 }
526 else if (*tmp)
527 ret = domain_matches( server, tmp );
528 } while (ptr && !ret);
529 return ret;
530}
static BOOL domain_matches(LPCWSTR server, LPCWSTR domain)
Definition: session.c:448

Referenced by set_server_for_hostname().

◆ validate_buffer()

static BOOL validate_buffer ( void buffer,
DWORD buflen,
DWORD  required 
)
static

Definition at line 87 of file session.c.

88{
89 if (!buffer || *buflen < required)
90 {
91 *buflen = required;
93 return FALSE;
94 }
95 return TRUE;
96}

Referenced by connect_query_option(), query_option(), request_query_option(), and session_query_option().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( winhttp  )

◆ WinHttpCheckPlatform()

BOOL WINAPI WinHttpCheckPlatform ( void  )

Definition at line 62 of file session.c.

63{
64 TRACE("\n");
65 return TRUE;
66}

◆ WinHttpCloseHandle()

BOOL WINAPI WinHttpCloseHandle ( HINTERNET  handle)

Definition at line 1358 of file session.c.

1359{
1360 struct object_header *hdr;
1361
1362 TRACE("%p\n", handle);
1363
1364 if (!(hdr = grab_object( handle )))
1365 {
1367 return FALSE;
1368 }
1372 return TRUE;
1373}
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
BOOL free_handle(HINTERNET hinternet)
Definition: handle.c:123
struct object_header * grab_object(HINTERNET hinternet)
Definition: handle.c:55

Referenced by close_request(), do_request(), download_script(), free_request(), reset_request(), test_async(), test_bad_header(), test_basic_authentication(), test_basic_request(), test_chunked_read(), test_chunked_request(), test_client_cert_authentication(), test_connect_error(), test_connection_cache(), test_connection_info(), test_cookies(), test_credentials(), test_empty_headers_param(), test_head_request(), test_large_data_authentication(), test_max_http_automatic_redirects(), test_multi_authentication(), test_multiple_reads(), test_no_content(), test_no_headers(), test_not_modified(), test_passport_auth(), test_recursion(), test_redirect(), test_request_parameter_defaults(), test_request_path_escapes(), test_resolve_timeout(), test_secure_connection(), test_timeouts(), test_websocket(), test_WinHttpAddHeaders(), test_WinHttpGetProxyForUrl(), test_WinHttpOpenRequest(), test_WinHttpQueryOption(), test_WinHttpSendRequest(), transfer_file_http(), and winhttp_request_Open().

◆ WinHttpConnect()

HINTERNET WINAPI WinHttpConnect ( HINTERNET  hsession,
const WCHAR server,
INTERNET_PORT  port,
DWORD  reserved 
)

Definition at line 594 of file session.c.

595{
596 struct connect *connect;
597 struct session *session;
598 HINTERNET hconnect = NULL;
599
600 TRACE( "%p, %s, %u, %#lx\n", hsession, debugstr_w(server), port, reserved );
601
602 if (!server)
603 {
605 return NULL;
606 }
607 if (!(session = (struct session *)grab_object( hsession )))
608 {
610 return NULL;
611 }
613 {
616 return NULL;
617 }
618 if (!(connect = calloc( 1, sizeof(*connect) )))
619 {
621 return NULL;
622 }
624 connect->hdr.vtbl = &connect_vtbl;
625 connect->hdr.refs = 1;
626 connect->hdr.flags = session->hdr.flags;
627 connect->hdr.callback = session->hdr.callback;
628 connect->hdr.notify_mask = session->hdr.notify_mask;
629 connect->hdr.context = session->hdr.context;
630 connect->hdr.redirect_policy = session->hdr.redirect_policy;
631
634
635 if (!(connect->hostname = wcsdup( server ))) goto end;
638
639 if ((hconnect = alloc_handle( &connect->hdr )))
640 {
641 send_callback( &session->hdr, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, &hconnect, sizeof(hconnect) );
642 }
643
644end:
647 TRACE("returning %p\n", hconnect);
648 if (hconnect) SetLastError( ERROR_SUCCESS );
649 return hconnect;
650}
static BOOL alloc_handle(struct handle_table *lpTable, OBJECTHDR *lpObject, HCRYPTKEY *lpHandle)
Definition: handle.c:183
struct object_header * addref_object(struct object_header *hdr)
Definition: handle.c:48
BOOL set_server_for_hostname(struct connect *connect, const WCHAR *server, INTERNET_PORT port)
Definition: session.c:532
static const struct object_vtbl connect_vtbl
Definition: session.c:440
#define calloc
Definition: rosglue.h:14
INTERNET_PORT hostport
struct object_header hdr
struct object_header hdr
#define WINHTTP_HANDLE_TYPE_CONNECT
Definition: winhttp.h:502
#define WINHTTP_HANDLE_TYPE_SESSION
Definition: winhttp.h:501
#define WINHTTP_CALLBACK_STATUS_HANDLE_CREATED
Definition: winhttp.h:453

Referenced by download_script(), open_async_request(), test_async(), test_bad_header(), test_basic_authentication(), test_basic_request(), test_chunked_read(), test_chunked_request(), test_client_cert_authentication(), test_connect_error(), test_connection_cache(), test_connection_info(), test_cookies(), test_credentials(), test_empty_headers_param(), test_head_request(), test_large_data_authentication(), test_max_http_automatic_redirects(), test_multi_authentication(), test_multiple_reads(), test_no_content(), test_no_headers(), test_not_modified(), test_passport_auth(), test_recursion(), test_redirect(), test_request_parameter_defaults(), test_request_path_escapes(), test_resolve_timeout(), test_secure_connection(), test_timeouts(), test_websocket(), test_WinHttpAddHeaders(), test_WinHttpOpenRequest(), test_WinHttpQueryOption(), test_WinHttpSendRequest(), transfer_file_http(), and winhttp_request_Open().

◆ WinHttpCreateProxyResolver()

DWORD WINAPI WinHttpCreateProxyResolver ( HINTERNET  hsession,
HINTERNET hresolver 
)

Definition at line 2328 of file session.c.

2329{
2330 FIXME("%p, %p\n", hsession, hresolver);
2332}
#define ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR
Definition: winhttp.h:274

◆ WinHttpDetectAutoProxyConfigUrl()

BOOL WINAPI WinHttpDetectAutoProxyConfigUrl ( DWORD  flags,
WCHAR **  url 
)

Definition at line 1675 of file session.c.

1676{
1677 TRACE( "%#lx, %p\n", flags, url );
1678
1679 if (!flags || !url)
1680 {
1682 return FALSE;
1683 }
1684 *url = NULL;
1686 {
1688 }
1690 {
1692 }
1693 if (!*url)
1694 {
1696 return FALSE;
1697 }
1699 return TRUE;
1700}
static WCHAR * detect_autoproxyconfig_url_dhcp(void)
Definition: session.c:1518
static WCHAR * detect_autoproxyconfig_url_dns(void)
Definition: session.c:1623
#define WINHTTP_AUTO_DETECT_TYPE_DHCP
Definition: winhttp.h:601
#define WINHTTP_AUTO_DETECT_TYPE_DNS_A
Definition: winhttp.h:602
#define ERROR_WINHTTP_AUTODETECTION_FAILED
Definition: winhttp.h:276

Referenced by test_WinHttpDetectAutoProxyConfigUrl(), and WinHttpGetProxyForUrl().

◆ WinHttpFreeProxyResult()

void WINAPI WinHttpFreeProxyResult ( WINHTTP_PROXY_RESULT result)

Definition at line 2337 of file session.c.

2338{
2339 FIXME("%p\n", result);
2340}

◆ WinHttpFreeProxyResultEx()

void WINAPI WinHttpFreeProxyResultEx ( WINHTTP_PROXY_RESULT_EX result)

Definition at line 2345 of file session.c.

2346{
2347 FIXME("%p\n", result);
2348}

◆ WinHttpFreeProxySettings()

void WINAPI WinHttpFreeProxySettings ( WINHTTP_PROXY_SETTINGS settings)

Definition at line 2353 of file session.c.

2354{
2355 FIXME("%p\n", settings);
2356}
struct mke2fs_defaults settings[]

◆ WinHttpGetDefaultProxyConfiguration()

BOOL WINAPI WinHttpGetDefaultProxyConfiguration ( WINHTTP_PROXY_INFO info)

Definition at line 1731 of file session.c.

1732{
1733 LONG l;
1734 HKEY key;
1735 BOOL got_from_reg = FALSE, direct = TRUE;
1736 WCHAR *envproxy;
1737
1738 TRACE("%p\n", info);
1739
1741 if (!l)
1742 {
1743 DWORD type, size = 0;
1744
1745 l = RegQueryValueExW( key, L"WinHttpSettings", NULL, &type, NULL, &size );
1746 if (!l && type == REG_BINARY &&
1747 size >= sizeof(struct connection_settings_header) + 2 * sizeof(DWORD))
1748 {
1749 BYTE *buf = malloc( size );
1750
1751 if (buf)
1752 {
1755 DWORD *len = (DWORD *)(hdr + 1);
1756
1757 l = RegQueryValueExW( key, L"WinHttpSettings", NULL, NULL, buf,
1758 &size );
1759 if (!l && hdr->magic == WINHTTP_SETTINGS_MAGIC &&
1760 hdr->unknown == 0)
1761 {
1762 if (hdr->flags & PROXY_TYPE_PROXY)
1763 {
1764 BOOL sane = FALSE;
1765 LPWSTR proxy = NULL;
1766 LPWSTR proxy_bypass = NULL;
1767
1768 /* Sanity-check length of proxy string */
1769 if ((BYTE *)len - buf + *len <= size)
1770 {
1771 sane = TRUE;
1772 proxy = GlobalAlloc( 0, (*len + 1) * sizeof(WCHAR) );
1773 if (proxy)
1774 copy_char_to_wchar_sz( (BYTE *)(len + 1), *len, proxy );
1775 len = (DWORD *)((BYTE *)(len + 1) + *len);
1776 }
1777 if (sane)
1778 {
1779 /* Sanity-check length of proxy bypass string */
1780 if ((BYTE *)len - buf + *len <= size)
1781 {
1782 proxy_bypass = GlobalAlloc( 0, (*len + 1) * sizeof(WCHAR) );
1783 if (proxy_bypass)
1784 copy_char_to_wchar_sz( (BYTE *)(len + 1), *len, proxy_bypass );
1785 }
1786 else
1787 {
1788 sane = FALSE;
1789 GlobalFree( proxy );
1790 proxy = NULL;
1791 }
1792 }
1793 info->lpszProxy = proxy;
1794 info->lpszProxyBypass = proxy_bypass;
1795 if (sane)
1796 {
1797 got_from_reg = TRUE;
1798 direct = FALSE;
1799 info->dwAccessType =
1801 TRACE("http proxy (from registry) = %s, bypass = %s\n",
1802 debugstr_w(info->lpszProxy),
1803 debugstr_w(info->lpszProxyBypass));
1804 }
1805 }
1806 }
1807 free( buf );
1808 }
1809 }
1810 RegCloseKey( key );
1811 }
1812 if (!got_from_reg && (envproxy = _wgetenv( L"http_proxy" )))
1813 {
1814 WCHAR *colon, *http_proxy = NULL;
1815
1816 if (!(colon = wcschr( envproxy, ':' ))) http_proxy = envproxy;
1817 else
1818 {
1819 if (*(colon + 1) == '/' && *(colon + 2) == '/')
1820 {
1821 /* It's a scheme, check that it's http */
1822 if (!wcsncmp( envproxy, L"http://", 7 )) http_proxy = envproxy + 7;
1823 else WARN("unsupported scheme in $http_proxy: %s\n", debugstr_w(envproxy));
1824 }
1825 else http_proxy = envproxy;
1826 }
1827
1828 if (http_proxy && http_proxy[0])
1829 {
1830 direct = FALSE;
1831 info->dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
1832 info->lpszProxy = GlobalAlloc( 0, (lstrlenW(http_proxy) + 1) * sizeof(WCHAR) );
1833 wcscpy( info->lpszProxy, http_proxy );
1834 info->lpszProxyBypass = NULL;
1835 TRACE("http proxy (from environment) = %s\n", debugstr_w(info->lpszProxy));
1836 }
1837 }
1838 if (direct)
1839 {
1840 info->dwAccessType = WINHTTP_ACCESS_TYPE_NO_PROXY;
1841 info->lpszProxy = NULL;
1842 info->lpszProxyBypass = NULL;
1843 }
1845 return TRUE;
1846}
#define RegCloseKey(hKey)
Definition: registry.h:49
r l[0]
Definition: byte_order.h:168
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
wchar_t *CDECL _wgetenv(const wchar_t *name)
Definition: environ.c:254
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
Definition: wcs.c:518
static const WCHAR path_connections[]
Definition: session.c:1702
static const DWORD PROXY_TYPE_PROXY
Definition: session.c:1708
static void copy_char_to_wchar_sz(const BYTE *src, DWORD len, WCHAR *dst)
Definition: session.c:1719
static const DWORD WINHTTP_SETTINGS_MAGIC
Definition: session.c:1705
int proxy
Definition: main.c:67
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611
#define REG_BINARY
Definition: nt_native.h:1499
#define KEY_READ
Definition: nt_native.h:1026
long LONG
Definition: pedump.c:60
wcscpy
Definition: copy.c:22
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12

Referenced by proxy_active(), and WinHttpOpen().

◆ WinHttpGetIEProxyConfigForCurrentUser()

BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser ( WINHTTP_CURRENT_USER_IE_PROXY_CONFIG config)

Definition at line 1851 of file session.c.

1852{
1853 HKEY hkey = NULL;
1855 DWORD type, offset, len, size = 0;
1856 BOOL ret = FALSE;
1857
1858 TRACE("%p\n", config);
1859
1860 if (!config)
1861 {
1863 return FALSE;
1864 }
1865 memset( config, 0, sizeof(*config) );
1866 config->fAutoDetect = TRUE;
1867
1869 RegQueryValueExW( hkey, L"DefaultConnectionSettings", NULL, &type, NULL, &size ) ||
1870 type != REG_BINARY || size < sizeof(struct connection_settings_header))
1871 {
1872 ret = TRUE;
1873 goto done;
1874 }
1875 if (!(hdr = malloc( size ))) goto done;
1876 if (RegQueryValueExW( hkey, L"DefaultConnectionSettings", NULL, &type, (BYTE *)hdr, &size ) ||
1877 hdr->magic != WININET_SETTINGS_MAGIC)
1878 {
1879 ret = TRUE;
1880 goto done;
1881 }
1882
1883 config->fAutoDetect = (hdr->flags & PROXY_AUTODETECT_SETTINGS) != 0;
1884 offset = sizeof(*hdr);
1885 if (offset + sizeof(DWORD) > size) goto done;
1886 len = *(DWORD *)((char *)hdr + offset);
1887 offset += sizeof(DWORD);
1888 if (len && hdr->flags & PROXY_TYPE_PROXY)
1889 {
1890 if (!(config->lpszProxy = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) ))) goto done;
1891 copy_char_to_wchar_sz( (const BYTE *)hdr + offset , len, config->lpszProxy );
1892 }
1893 offset += len;
1894 if (offset + sizeof(DWORD) > size) goto done;
1895 len = *(DWORD *)((char *)hdr + offset);
1896 offset += sizeof(DWORD);
1897 if (len && (hdr->flags & PROXY_TYPE_PROXY))
1898 {
1899 if (!(config->lpszProxyBypass = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) ))) goto done;
1900 copy_char_to_wchar_sz( (const BYTE *)hdr + offset , len, config->lpszProxyBypass );
1901 }
1902 offset += len;
1903 if (offset + sizeof(DWORD) > size) goto done;
1904 len = *(DWORD *)((char *)hdr + offset);
1905 offset += sizeof(DWORD);
1906 if (len && (hdr->flags & PROXY_USE_PAC_SCRIPT))
1907 {
1908 if (!(config->lpszAutoConfigUrl = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) ))) goto done;
1909 copy_char_to_wchar_sz( (const BYTE *)hdr + offset , len, config->lpszAutoConfigUrl );
1910 }
1911 ret = TRUE;
1912
1913done:
1914 RegCloseKey( hkey );
1915 free( hdr );
1916 if (!ret)
1917 {
1918 GlobalFree( config->lpszAutoConfigUrl );
1919 config->lpszAutoConfigUrl = NULL;
1920 GlobalFree( config->lpszProxy );
1921 config->lpszProxy = NULL;
1922 GlobalFree( config->lpszProxyBypass );
1923 config->lpszProxyBypass = NULL;
1924 }
1926 return ret;
1927}
static const DWORD PROXY_AUTODETECT_SETTINGS
Definition: session.c:1710
static const DWORD WININET_SETTINGS_MAGIC
Definition: session.c:1706
static const DWORD PROXY_USE_PAC_SCRIPT
Definition: session.c:1709
#define HKEY_CURRENT_USER
Definition: winreg.h:11

Referenced by test_WinHttpGetIEProxyConfigForCurrentUser().

◆ WinHttpGetProxyForUrl()

BOOL WINAPI WinHttpGetProxyForUrl ( HINTERNET  hsession,
LPCWSTR  url,
WINHTTP_AUTOPROXY_OPTIONS options,
WINHTTP_PROXY_INFO info 
)

Definition at line 2165 of file session.c.

2167{
2168 WCHAR *pac_url;
2169 struct session *session;
2170 char *script = NULL;
2171 DWORD size;
2172 BOOL ret = FALSE;
2173
2174 TRACE("%p, %s, %p, %p\n", hsession, debugstr_w(url), options, info);
2175
2176 if (!(session = (struct session *)grab_object( hsession )))
2177 {
2179 return FALSE;
2180 }
2182 {
2185 return FALSE;
2186 }
2187 if (!url || !options || !info ||
2189 ((options->dwFlags & WINHTTP_AUTOPROXY_AUTO_DETECT) && !options->dwAutoDetectFlags) ||
2190 (options->dwFlags & WINHTTP_AUTOPROXY_CONFIG_URL && !options->lpszAutoConfigUrl))
2191 {
2194 return FALSE;
2195 }
2196
2197 if (options->dwFlags & WINHTTP_AUTOPROXY_AUTO_DETECT &&
2198 WinHttpDetectAutoProxyConfigUrl( options->dwAutoDetectFlags, &pac_url ))
2199 {
2200 script = download_script( pac_url, &size );
2201 GlobalFree( pac_url );
2202 }
2203
2204 if (!script && options->dwFlags & WINHTTP_AUTOPROXY_CONFIG_URL)
2205 script = download_script( options->lpszAutoConfigUrl, &size );
2206
2207 if (script)
2208 {
2209 ret = run_script( script, size, url, info, options->dwFlags );
2210 free( script );
2211 }
2212
2215 return ret;
2216}
static char * download_script(const WCHAR *url, DWORD *out_size)
Definition: session.c:2017
BOOL WINAPI WinHttpDetectAutoProxyConfigUrl(DWORD flags, WCHAR **url)
Definition: session.c:1675
static BOOL run_script(char *script, DWORD size, const WCHAR *url, WINHTTP_PROXY_INFO *info, DWORD flags)
Definition: session.c:2095
#define WINHTTP_AUTOPROXY_AUTO_DETECT
Definition: winhttp.h:604
#define WINHTTP_AUTOPROXY_CONFIG_URL
Definition: winhttp.h:605

Referenced by test_WinHttpGetProxyForUrl().

◆ WinHttpGetProxyForUrlEx()

DWORD WINAPI WinHttpGetProxyForUrlEx ( HINTERNET  hresolver,
const WCHAR url,
WINHTTP_AUTOPROXY_OPTIONS options,
DWORD_PTR  ctx 
)

Definition at line 2361 of file session.c.

2363{
2364 FIXME( "%p, %s, %p, %Ix\n", hresolver, debugstr_w(url), options, ctx );
2366}

◆ WinHttpGetProxyForUrlEx2()

DWORD WINAPI WinHttpGetProxyForUrlEx2 ( HINTERNET  hresolver,
const WCHAR url,
WINHTTP_AUTOPROXY_OPTIONS options,
DWORD  selection_len,
BYTE selection,
DWORD_PTR  ctx 
)

Definition at line 2371 of file session.c.

2373{
2374 FIXME( "%p, %s, %p, %lu, %p, %Ix\n", hresolver, debugstr_w(url), options, selection_len, selection, ctx );
2376}
int selection
Definition: ctm.c:92

◆ WinHttpGetProxyResult()

DWORD WINAPI WinHttpGetProxyResult ( HINTERNET  hresolver,
WINHTTP_PROXY_RESULT result 
)

Definition at line 2381 of file session.c.

2382{
2383 FIXME("%p, %p\n", hresolver, result);
2385}

◆ WinHttpGetProxyResultEx()

DWORD WINAPI WinHttpGetProxyResultEx ( HINTERNET  hresolver,
WINHTTP_PROXY_RESULT_EX result 
)

Definition at line 2390 of file session.c.

2391{
2392 FIXME("%p, %p\n", hresolver, result);
2394}

◆ WinHttpGetProxySettingsVersion()

DWORD WINAPI WinHttpGetProxySettingsVersion ( HINTERNET  hsession,
DWORD version 
)

Definition at line 2399 of file session.c.

2400{
2401 FIXME("%p, %p\n", hsession, version);
2403}
static const WCHAR version[]
Definition: asmname.c:66

◆ WinHttpOpen()

HINTERNET WINAPI WinHttpOpen ( LPCWSTR  agent,
DWORD  access,
LPCWSTR  proxy,
LPCWSTR  bypass,
DWORD  flags 
)

Definition at line 304 of file session.c.

305{
306 struct session *session;
308
309 TRACE( "%s, %lu, %s, %s, %#lx\n", debugstr_w(agent), access, debugstr_w(proxy), debugstr_w(bypass), flags );
310
311 if (!(session = calloc( 1, sizeof(*session) ))) return NULL;
312
314 session->hdr.vtbl = &session_vtbl;
315 session->hdr.flags = flags;
316 session->hdr.refs = 1;
327 session->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": session.cs");
328
329 if (agent && !(session->agent = wcsdup( agent ))) goto end;
331 {
333
335 session->access = info.dwAccessType;
336 if (info.lpszProxy && !(session->proxy_server = wcsdup( info.lpszProxy )))
337 {
338 GlobalFree( info.lpszProxy );
339 GlobalFree( info.lpszProxyBypass );
340 goto end;
341 }
342 if (info.lpszProxyBypass && !(session->proxy_bypass = wcsdup( info.lpszProxyBypass )))
343 {
344 GlobalFree( info.lpszProxy );
345 GlobalFree( info.lpszProxyBypass );
346 goto end;
347 }
348 }
350 {
352 if (proxy && !(session->proxy_server = wcsdup( proxy ))) goto end;
353 if (bypass && !(session->proxy_bypass = wcsdup( bypass ))) goto end;
354 }
355
357
358#ifdef __REACTOS__
359 winsock_init();
360#endif
361
362end:
364 TRACE("returning %p\n", handle);
366 return handle;
367}
static void list_init(struct list_entry *head)
Definition: list.h:51
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
Definition: sync.c:107
BOOL WINAPI WinHttpGetDefaultProxyConfiguration(WINHTTP_PROXY_INFO *info)
Definition: session.c:1731
static const struct object_vtbl session_vtbl
Definition: session.c:289
#define DEFAULT_RECEIVE_TIMEOUT
Definition: session.c:44
#define DEFAULT_RESOLVE_TIMEOUT
Definition: session.c:41
#define DEFAULT_SEND_TIMEOUT
Definition: session.c:43
#define DEFAULT_RECEIVE_RESPONSE_TIMEOUT
Definition: session.c:45
#define DEFAULT_CONNECT_TIMEOUT
Definition: session.c:42
GLuint GLint GLboolean GLint GLenum access
Definition: glext.h:7866
DWORD access
struct list cookie_cache
#define DWORD_PTR
Definition: treelist.c:76
#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
Definition: winhttp.h:69
#define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP
Definition: winhttp.h:204
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
Definition: winnt_old.h:1156
BOOL winsock_init(void)
Definition: wintirpc.c:77

Referenced by download_script(), open_async_request(), test_async(), test_bad_header(), test_basic_authentication(), test_basic_request(), test_chunked_read(), test_chunked_request(), test_client_cert_authentication(), test_connect_error(), test_connection_cache(), test_connection_info(), test_cookies(), test_credentials(), test_empty_headers_param(), test_head_request(), test_large_data_authentication(), test_max_http_automatic_redirects(), test_multi_authentication(), test_multiple_reads(), test_no_content(), test_no_headers(), test_not_modified(), test_passport_auth(), test_recursion(), test_redirect(), test_request_parameter_defaults(), test_request_path_escapes(), test_resolve_timeout(), test_secure_connection(), test_timeouts(), test_websocket(), test_WinHttpAddHeaders(), test_WinHttpGetProxyForUrl(), test_WinHttpOpenRequest(), test_WinHttpQueryOption(), test_WinHttpSendRequest(), transfer_file_http(), and winhttp_request_Open().

◆ WinHttpOpenRequest()

HINTERNET WINAPI WinHttpOpenRequest ( HINTERNET  hconnect,
const WCHAR verb,
const WCHAR object,
const WCHAR version,
const WCHAR referrer,
const WCHAR **  types,
DWORD  flags 
)

Definition at line 1277 of file session.c.

1279{
1280 struct request *request;
1281 struct connect *connect;
1282 HINTERNET hrequest = NULL;
1283
1284 TRACE( "%p, %s, %s, %s, %s, %p, %#lx\n", hconnect, debugstr_w(verb), debugstr_w(object),
1285 debugstr_w(version), debugstr_w(referrer), types, flags );
1286
1287 if (types && TRACE_ON(winhttp))
1288 {
1289 const WCHAR **iter;
1290 TRACE("accept types:\n");
1291 for (iter = types; *iter; iter++) TRACE(" %s\n", debugstr_w(*iter));
1292 }
1293
1294 if (!(connect = (struct connect *)grab_object( hconnect )))
1295 {
1297 return NULL;
1298 }
1300 {
1303 return NULL;
1304 }
1305 if (!(request = calloc( 1, sizeof(*request) )))
1306 {
1308 return NULL;
1309 }
1311 request->hdr.vtbl = &request_vtbl;
1312 request->hdr.refs = 1;
1313 request->hdr.flags = flags;
1314 request->hdr.callback = connect->hdr.callback;
1315 request->hdr.notify_mask = connect->hdr.notify_mask;
1316 request->hdr.context = connect->hdr.context;
1317 request->hdr.redirect_policy = connect->hdr.redirect_policy;
1319
1322
1323 request->resolve_timeout = connect->session->resolve_timeout;
1324 request->connect_timeout = connect->session->connect_timeout;
1325 request->send_timeout = connect->session->send_timeout;
1326 request->receive_timeout = connect->session->receive_timeout;
1327 request->receive_response_timeout = connect->session->receive_response_timeout;
1328 request->max_redirects = 10;
1329 request->websocket_receive_buffer_size = connect->session->websocket_receive_buffer_size;
1330 request->websocket_send_buffer_size = connect->session->websocket_send_buffer_size;
1333
1334 if (!verb || !verb[0]) verb = L"GET";
1335 if (!(request->verb = wcsdup( verb ))) goto end;
1336 if (!(request->path = get_request_path( object ))) goto end;
1337
1338 if (!version || !version[0]) version = L"HTTP/1.1";
1339 if (!(request->version = wcsdup( version ))) goto end;
1340 if (!(add_accept_types_header( request, types ))) goto end;
1341
1342 if ((hrequest = alloc_handle( &request->hdr )))
1343 {
1344 send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_HANDLE_CREATED, &hrequest, sizeof(hrequest) );
1345 }
1346
1347end:
1350 TRACE("returning %p\n", hrequest);
1351 if (hrequest) SetLastError( ERROR_SUCCESS );
1352 return hrequest;
1353}
#define TRACE_ON(x)
Definition: compat.h:75
static const struct object_vtbl request_vtbl
Definition: session.c:1240
static WCHAR * get_request_path(const WCHAR *object)
Definition: session.c:1261
static BOOL add_accept_types_header(struct request *request, const WCHAR **types)
Definition: session.c:1248
void init_queue(struct queue *queue)
Definition: request.c:137
DWORD read_reply_status
unsigned int websocket_send_buffer_size
#define WINHTTP_HANDLE_TYPE_REQUEST
Definition: winhttp.h:503

Referenced by do_request(), download_script(), open_async_request(), test_async(), test_bad_header(), test_basic_authentication(), test_basic_request(), test_chunked_read(), test_chunked_request(), test_client_cert_authentication(), test_connect_error(), test_connection_cache(), test_connection_info(), test_cookies(), test_credentials(), test_empty_headers_param(), test_head_request(), test_large_data_authentication(), test_max_http_automatic_redirects(), test_multi_authentication(), test_multiple_reads(), test_no_content(), test_no_headers(), test_not_modified(), test_passport_auth(), test_recursion(), test_redirect(), test_request_parameter_defaults(), test_resolve_timeout(), test_secure_connection(), test_timeouts(), test_websocket(), test_WinHttpAddHeaders(), test_WinHttpOpenRequest(), test_WinHttpQueryOption(), test_WinHttpSendRequest(), transfer_file_http(), and winhttp_request_Open().

◆ WinHttpQueryOption()

BOOL WINAPI WinHttpQueryOption ( HINTERNET  handle,
DWORD  option,
void buffer,
DWORD buflen 
)

Definition at line 1420 of file session.c.

1421{
1422 BOOL ret = FALSE;
1423 struct object_header *hdr;
1424
1425 TRACE( "%p, %lu, %p, %p\n", handle, option, buffer, buflen );
1426
1427 if (!(hdr = grab_object( handle )))
1428 {
1430 return FALSE;
1431 }
1432
1433 ret = query_option( hdr, option, buffer, buflen );
1434
1437 return ret;
1438}
static BOOL query_option(struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
Definition: session.c:1375

Referenced by check_notification(), test_basic_request(), test_connection_info(), test_credentials(), test_max_http_automatic_redirects(), test_redirect(), test_secure_connection(), test_timeouts(), test_websocket(), test_WinHttpQueryOption(), and test_WinHttpSendRequest().

◆ WinHttpReadProxySettings()

DWORD WINAPI WinHttpReadProxySettings ( HINTERNET  hsession,
const WCHAR connection,
BOOL  use_defaults,
BOOL  set_autodiscover,
DWORD version,
BOOL defaults_returned,
WINHTTP_PROXY_SETTINGS settings 
)

Definition at line 2408 of file session.c.

2411{
2412 FIXME("%p, %s, %d, %d, %p, %p, %p\n", hsession, debugstr_w(connection), use_defaults, set_autodiscover,
2413 version, defaults_returned, settings);
2415}

◆ WinHttpResetAutoProxy()

DWORD WINAPI WinHttpResetAutoProxy ( HINTERNET  hsession,
DWORD  flags 
)

Definition at line 2420 of file session.c.

2421{
2422 FIXME( "%p, %#lx\n", hsession, flags );
2424}

◆ WinHttpSetDefaultProxyConfiguration()

BOOL WINAPI WinHttpSetDefaultProxyConfiguration ( WINHTTP_PROXY_INFO info)

Definition at line 2221 of file session.c.

2222{
2223 LONG l;
2224 HKEY key;
2225 BOOL ret = FALSE;
2226 const WCHAR *src;
2227
2228 TRACE("%p\n", info);
2229
2230 if (!info)
2231 {
2233 return FALSE;
2234 }
2235 switch (info->dwAccessType)
2236 {
2238 break;
2240 if (!info->lpszProxy)
2241 {
2243 return FALSE;
2244 }
2245 /* Only ASCII characters are allowed */
2246 for (src = info->lpszProxy; *src; src++)
2247 if (*src > 0x7f)
2248 {
2250 return FALSE;
2251 }
2252 if (info->lpszProxyBypass)
2253 {
2254 for (src = info->lpszProxyBypass; *src; src++)
2255 if (*src > 0x7f)
2256 {
2258 return FALSE;
2259 }
2260 }
2261 break;
2262 default:
2264 return FALSE;
2265 }
2266
2268 KEY_WRITE, NULL, &key, NULL );
2269 if (!l)
2270 {
2271 DWORD size = sizeof(struct connection_settings_header) + 2 * sizeof(DWORD);
2272 BYTE *buf;
2273
2274 if (info->dwAccessType == WINHTTP_ACCESS_TYPE_NAMED_PROXY)
2275 {
2276 size += lstrlenW( info->lpszProxy );
2277 if (info->lpszProxyBypass)
2278 size += lstrlenW( info->lpszProxyBypass );
2279 }
2280 if ((buf = malloc( size )))
2281 {
2284 DWORD *len = (DWORD *)(hdr + 1);
2285
2286 hdr->magic = WINHTTP_SETTINGS_MAGIC;
2287 hdr->unknown = 0;
2288 if (info->dwAccessType == WINHTTP_ACCESS_TYPE_NAMED_PROXY)
2289 {
2290 BYTE *dst;
2291
2292 hdr->flags = PROXY_TYPE_PROXY;
2293 *len++ = lstrlenW( info->lpszProxy );
2294 for (dst = (BYTE *)len, src = info->lpszProxy; *src;
2295 src++, dst++)
2296 *dst = *src;
2297 len = (DWORD *)dst;
2298 if (info->lpszProxyBypass)
2299 {
2300 *len++ = lstrlenW( info->lpszProxyBypass );
2301 for (dst = (BYTE *)len, src = info->lpszProxyBypass; *src;
2302 src++, dst++)
2303 *dst = *src;
2304 }
2305 else
2306 *len++ = 0;
2307 }
2308 else
2309 {
2310 hdr->flags = PROXY_TYPE_DIRECT;
2311 *len++ = 0;
2312 *len++ = 0;
2313 }
2314 l = RegSetValueExW( key, L"WinHttpSettings", 0, REG_BINARY, buf, size );
2315 if (!l)
2316 ret = TRUE;
2317 free( buf );
2318 }
2319 RegCloseKey( key );
2320 }
2322 return ret;
2323}
LONG WINAPI RegCreateKeyExW(_In_ HKEY hKey, _In_ LPCWSTR lpSubKey, _In_ DWORD Reserved, _In_opt_ LPWSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_opt_ LPDWORD lpdwDisposition)
Definition: reg.c:1096
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4882
static const DWORD PROXY_TYPE_DIRECT
Definition: session.c:1707
#define KEY_WRITE
Definition: nt_native.h:1034

Referenced by test_set_default_proxy_config().

◆ WinHttpSetOption()

BOOL WINAPI WinHttpSetOption ( HINTERNET  handle,
DWORD  option,
void buffer,
DWORD  buflen 
)

◆ WinHttpSetStatusCallback()

WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback ( HINTERNET  handle,
WINHTTP_STATUS_CALLBACK  callback,
DWORD  flags,
DWORD_PTR  reserved 
)

Definition at line 2435 of file session.c.

2437{
2438 struct object_header *hdr;
2440
2441 TRACE( "%p, %p, %#lx, %Ix\n", handle, callback, flags, reserved );
2442
2443 if (!(hdr = grab_object( handle )))
2444 {
2447 }
2448 ret = hdr->callback;
2449 hdr->callback = callback;
2450 hdr->notify_mask = flags;
2451
2454 return ret;
2455}
static IPrintDialogCallback callback
Definition: printdlg.c:326
#define WINHTTP_INVALID_STATUS_CALLBACK
Definition: winhttp.h:492
VOID(CALLBACK * WINHTTP_STATUS_CALLBACK)(_In_ HINTERNET, _In_ DWORD_PTR, _In_ DWORD, _In_ LPVOID, _In_ DWORD)
Definition: winhttp.h:592

Referenced by open_async_request(), test_async(), test_connection_cache(), test_recursion(), test_redirect(), test_secure_connection(), test_websocket(), transfer_file_http(), and wait_set_status_callback().

◆ WinHttpSetTimeouts()

BOOL WINAPI WinHttpSetTimeouts ( HINTERNET  handle,
int  resolve,
int  connect,
int  send,
int  receive 
)

Definition at line 2460 of file session.c.

2461{
2462 BOOL ret = TRUE;
2463 struct object_header *hdr;
2464
2465 TRACE("%p, %d, %d, %d, %d\n", handle, resolve, connect, send, receive);
2466
2467 if (resolve < -1 || connect < -1 || send < -1 || receive < -1)
2468 {
2470 return FALSE;
2471 }
2472
2473 if (!(hdr = grab_object( handle )))
2474 {
2476 return FALSE;
2477 }
2478
2479 switch(hdr->type)
2480 {
2482 {
2483 struct request *request = (struct request *)hdr;
2485
2486 if (resolve < 0) resolve = 0;
2487 request->resolve_timeout = resolve;
2488
2489 if (send < 0) send = 0;
2491
2492 if (receive < 0) receive = 0;
2493 request->receive_timeout = receive;
2494
2495 if (request->netconn)
2496 {
2498 if (netconn_set_timeout( request->netconn, FALSE, receive )) ret = FALSE;
2499 }
2500 break;
2501 }
2503 {
2504 struct session *session = (struct session *)hdr;
2506
2507 if (resolve < 0) resolve = 0;
2508 session->resolve_timeout = resolve;
2509
2510 if (send < 0) send = 0;
2512
2513 if (receive < 0) receive = 0;
2514 session->receive_timeout = receive;
2515 break;
2516 }
2517 default:
2519 ret = FALSE;
2520 }
2523 return ret;
2524}
DWORD netconn_set_timeout(struct netconn *netconn, BOOL send, int value)
Definition: net.c:686
INT WSAAPI send(IN SOCKET s, IN CONST CHAR FAR *buf, IN INT len, IN INT flags)
Definition: send.c:23

Referenced by download_script(), request_set_parameters(), and test_timeouts().

◆ WinHttpTimeFromSystemTime()

BOOL WINAPI WinHttpTimeFromSystemTime ( const SYSTEMTIME time,
LPWSTR  string 
)

Definition at line 2534 of file session.c.

2535{
2536 TRACE("%p, %p\n", time, string);
2537
2538 if (!time || !string)
2539 {
2541 return FALSE;
2542 }
2543
2544 swprintf( string, WINHTTP_TIME_FORMAT_BUFSIZE / sizeof(WCHAR),
2545 L"%s, %02d %s %4d %02d:%02d:%02d GMT",
2546 wkday[time->wDayOfWeek],
2547 time->wDay,
2548 month[time->wMonth - 1],
2549 time->wYear,
2550 time->wHour,
2551 time->wMinute,
2552 time->wSecond );
2553
2555 return TRUE;
2556}
static const WCHAR wkday[7][4]
Definition: session.c:2526
static const WCHAR month[12][4]
Definition: session.c:2528
#define swprintf
Definition: precomp.h:40
__u16 time
Definition: mkdosfs.c:8
#define WINHTTP_TIME_FORMAT_BUFSIZE
Definition: winhttp.h:533

Referenced by test_IWinHttpRequest(), test_not_modified(), and test_WinHttpTimeFromSystemTime().

◆ WinHttpTimeToSystemTime()

BOOL WINAPI WinHttpTimeToSystemTime ( LPCWSTR  string,
SYSTEMTIME time 
)

Definition at line 2561 of file session.c.

2562{
2563 unsigned int i;
2564 const WCHAR *s = string;
2565 WCHAR *end;
2566
2567 TRACE("%s, %p\n", debugstr_w(string), time);
2568
2569 if (!string || !time)
2570 {
2572 return FALSE;
2573 }
2574
2575 /* Windows does this too */
2577
2578 /* Convert an RFC1123 time such as 'Fri, 07 Jan 2005 12:06:35 GMT' into
2579 * a SYSTEMTIME structure.
2580 */
2581
2583
2584 while (*s && !iswalpha( *s )) s++;
2585 if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return TRUE;
2586 time->wDayOfWeek = 7;
2587
2588 for (i = 0; i < 7; i++)
2589 {
2590 if (towupper( wkday[i][0] ) == towupper( s[0] ) &&
2591 towupper( wkday[i][1] ) == towupper( s[1] ) &&
2592 towupper( wkday[i][2] ) == towupper( s[2] ) )
2593 {
2594 time->wDayOfWeek = i;
2595 break;
2596 }
2597 }
2598
2599 if (time->wDayOfWeek > 6) return TRUE;
2600 while (*s && !iswdigit( *s )) s++;
2601 time->wDay = wcstol( s, &end, 10 );
2602 s = end;
2603
2604 while (*s && !iswalpha( *s )) s++;
2605 if (s[0] == '\0' || s[1] == '\0' || s[2] == '\0') return TRUE;
2606 time->wMonth = 0;
2607
2608 for (i = 0; i < 12; i++)
2609 {
2610 if (towupper( month[i][0]) == towupper( s[0] ) &&
2611 towupper( month[i][1]) == towupper( s[1] ) &&
2612 towupper( month[i][2]) == towupper( s[2] ) )
2613 {
2614 time->wMonth = i + 1;
2615 break;
2616 }
2617 }
2618 if (time->wMonth == 0) return TRUE;
2619
2620 while (*s && !iswdigit( *s )) s++;
2621 if (*s == '\0') return TRUE;
2622 time->wYear = wcstol( s, &end, 10 );
2623 s = end;
2624
2625 while (*s && !iswdigit( *s )) s++;
2626 if (*s == '\0') return TRUE;
2627 time->wHour = wcstol( s, &end, 10 );
2628 s = end;
2629
2630 while (*s && !iswdigit( *s )) s++;
2631 if (*s == '\0') return TRUE;
2632 time->wMinute = wcstol( s, &end, 10 );
2633 s = end;
2634
2635 while (*s && !iswdigit( *s )) s++;
2636 if (*s == '\0') return TRUE;
2637 time->wSecond = wcstol( s, &end, 10 );
2638
2639 time->wMilliseconds = 0;
2640 return TRUE;
2641}
VOID WINAPI GetSystemTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:327
GLdouble s
Definition: gl.h:2039
char string[160]
Definition: util.h:11
#define iswdigit(_c)
Definition: ctype.h:667
#define iswalpha(_c)
Definition: ctype.h:664
#define towupper(c)
Definition: wctype.h:99

Referenced by query_headers(), and test_WinHttpTimeToSystemTime().

◆ WinHttpWriteProxySettings()

DWORD WINAPI WinHttpWriteProxySettings ( HINTERNET  hsession,
BOOL  force,
WINHTTP_PROXY_SETTINGS settings 
)

Definition at line 2426 of file session.c.

2427{
2428 FIXME("%p, %d, %p\n", hsession, force, settings);
2430}
BOOL force
Definition: metahost.c:100

Variable Documentation

◆ cache_lock

◆ cache_update_time

ULONGLONG cache_update_time
static

Definition at line 1975 of file session.c.

Referenced by cache_script(), and get_cached_script().

◆ cached_script

char* cached_script
static

Definition at line 1976 of file session.c.

Referenced by cache_script(), and get_cached_script().

◆ cached_script_size

DWORD cached_script_size
static

Definition at line 1974 of file session.c.

Referenced by cache_script(), and get_cached_script().

◆ cached_url

WCHAR* cached_url
static

Definition at line 1977 of file session.c.

Referenced by cache_script(), and get_cached_script().

◆ connect_vtbl

const struct object_vtbl connect_vtbl
static
Initial value:
=
{
}
static void connect_destroy(struct object_header *hdr)
Definition: session.c:369
static BOOL connect_query_option(struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
Definition: session.c:384

Definition at line 440 of file session.c.

Referenced by WinHttpConnect().

◆ month

◆ path_connections

const WCHAR path_connections[]
static
Initial value:
=
L"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections"

Definition at line 1702 of file session.c.

Referenced by WinHttpGetDefaultProxyConfiguration(), WinHttpGetIEProxyConfigForCurrentUser(), and WinHttpSetDefaultProxyConfiguration().

◆ PROXY_AUTODETECT_SETTINGS

const DWORD PROXY_AUTODETECT_SETTINGS = 8
static

Definition at line 1710 of file session.c.

Referenced by WinHttpGetIEProxyConfigForCurrentUser().

◆ PROXY_TYPE_DIRECT

const DWORD PROXY_TYPE_DIRECT = 1
static

Definition at line 1707 of file session.c.

Referenced by WinHttpSetDefaultProxyConfiguration().

◆ PROXY_TYPE_PROXY

◆ PROXY_USE_PAC_SCRIPT

const DWORD PROXY_USE_PAC_SCRIPT = 4
static

Definition at line 1709 of file session.c.

Referenced by WinHttpGetIEProxyConfigForCurrentUser().

◆ request_vtbl

const struct object_vtbl request_vtbl
static
Initial value:
=
{
}
static BOOL request_set_option(struct object_header *hdr, DWORD option, void *buffer, DWORD buflen)
Definition: session.c:985
static BOOL request_query_option(struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
Definition: session.c:777
static void request_destroy(struct object_header *hdr)
Definition: session.c:652

Definition at line 1240 of file session.c.

Referenced by WinHttpOpenRequest().

◆ session_vtbl

const struct object_vtbl session_vtbl
static
Initial value:
=
{
}
static void session_destroy(struct object_header *hdr)
Definition: session.c:68
static BOOL session_set_option(struct object_header *hdr, DWORD option, void *buffer, DWORD buflen)
Definition: session.c:168
static BOOL session_query_option(struct object_header *hdr, DWORD option, void *buffer, DWORD *buflen)
Definition: session.c:98

Definition at line 289 of file session.c.

Referenced by WinHttpOpen().

◆ WINHTTP_SETTINGS_MAGIC

const DWORD WINHTTP_SETTINGS_MAGIC = 0x18
static

◆ WININET_SETTINGS_MAGIC

const DWORD WININET_SETTINGS_MAGIC = 0x46
static

Definition at line 1706 of file session.c.

Referenced by WinHttpGetIEProxyConfigForCurrentUser().

◆ wkday

const WCHAR wkday[7][4]
static
Initial value:
=
{L"Sun", L"Mon", L"Tue", L"Wed", L"Thu", L"Fri", L"Sat"}

Definition at line 2526 of file session.c.

Referenced by WinHttpTimeFromSystemTime(), and WinHttpTimeToSystemTime().