mirror of
https://github.com/reactos/reactos.git
synced 2024-10-30 03:27:31 +00:00
203 lines
6.7 KiB
Diff
203 lines
6.7 KiB
Diff
diff -pudN e:\wine\dlls\winhttp/net.c e:\reactos\dll\win32\winhttp/net.c
|
|
--- e:\wine\dlls\winhttp/net.c 2016-11-16 17:36:37 +0100
|
|
+++ e:\reactos\dll\win32\winhttp/net.c 2016-10-13 11:15:39 +0100
|
|
@@ -50,6 +50,7 @@ static CRITICAL_SECTION cs_gethostbyname
|
|
#endif
|
|
|
|
/* translate a unix error code into a winsock error code */
|
|
+#ifndef __REACTOS__
|
|
static int sock_get_error( int err )
|
|
{
|
|
#if !defined(__MINGW32__) && !defined (_MSC_VER)
|
|
@@ -115,6 +116,15 @@ static int sock_get_error( int err )
|
|
#endif
|
|
return err;
|
|
}
|
|
+#else
|
|
+#define sock_get_error(x) WSAGetLastError()
|
|
+
|
|
+static inline int unix_ioctl(int filedes, long request, void *arg)
|
|
+{
|
|
+ return ioctlsocket(filedes, request, arg);
|
|
+}
|
|
+#define ioctlsocket unix_ioctl
|
|
+#endif
|
|
|
|
static int sock_send(int fd, const void *msg, size_t len, int flags)
|
|
{
|
|
@@ -266,6 +276,28 @@ static BOOL ensure_cred_handle(void)
|
|
return ret;
|
|
}
|
|
|
|
+#ifdef __REACTOS__
|
|
+static BOOL winsock_initialized = FALSE;
|
|
+BOOL netconn_init_winsock()
|
|
+{
|
|
+ WSADATA wsaData;
|
|
+ int error;
|
|
+ if (!winsock_initialized)
|
|
+ {
|
|
+ error = WSAStartup(MAKEWORD(1, 1), &wsaData);
|
|
+ if (error)
|
|
+ {
|
|
+ ERR("WSAStartup failed: %d\n", error);
|
|
+ return FALSE;
|
|
+ }
|
|
+ else
|
|
+ winsock_initialized = TRUE;
|
|
+ }
|
|
+ return winsock_initialized;
|
|
+}
|
|
+
|
|
+#endif
|
|
+
|
|
BOOL netconn_init( netconn_t *conn )
|
|
{
|
|
memset(conn, 0, sizeof(*conn));
|
|
@@ -281,6 +313,10 @@ void netconn_unload( void )
|
|
#ifndef HAVE_GETADDRINFO
|
|
DeleteCriticalSection(&cs_gethostbyname);
|
|
#endif
|
|
+#ifdef __REACTOS__
|
|
+ if(winsock_initialized)
|
|
+ WSACleanup();
|
|
+#endif
|
|
}
|
|
|
|
BOOL netconn_connected( netconn_t *conn )
|
|
@@ -343,11 +379,25 @@ BOOL netconn_connect( netconn_t *conn, c
|
|
res = sock_get_error( errno );
|
|
if (res == WSAEWOULDBLOCK || res == WSAEINPROGRESS)
|
|
{
|
|
+#ifdef __REACTOS__
|
|
+ /* ReactOS: use select instead of poll */
|
|
+ fd_set outfd;
|
|
+ struct timeval tv;
|
|
+
|
|
+ FD_ZERO(&outfd);
|
|
+ FD_SET(conn->socket, &outfd);
|
|
+
|
|
+ tv.tv_sec = 0;
|
|
+ tv.tv_usec = timeout * 1000;
|
|
+
|
|
+ if (select( 0, NULL, &outfd, NULL, &tv ) > 0)
|
|
+#else
|
|
struct pollfd pfd;
|
|
|
|
pfd.fd = conn->socket;
|
|
pfd.events = POLLOUT;
|
|
if (poll( &pfd, 1, timeout ) > 0)
|
|
+#endif
|
|
ret = TRUE;
|
|
else
|
|
res = sock_get_error( errno );
|
|
diff -pudN e:\wine\dlls\winhttp/request.c e:\reactos\dll\win32\winhttp/request.c
|
|
--- e:\wine\dlls\winhttp/request.c 2016-11-16 17:36:37 +0100
|
|
+++ e:\reactos\dll\win32\winhttp/request.c 2016-02-27 16:08:59 +0100
|
|
@@ -1258,6 +1258,7 @@ BOOL WINAPI WinHttpSendRequest( HINTERNE
|
|
return ret;
|
|
}
|
|
|
|
+#undef ARRAYSIZE
|
|
#define ARRAYSIZE(array) (sizeof(array) / sizeof((array)[0]))
|
|
|
|
static const WCHAR basicW[] = {'B','a','s','i','c',0};
|
|
@@ -2758,8 +2759,8 @@ static void free_request( struct winhttp
|
|
CloseHandle( request->thread );
|
|
CloseHandle( request->wait );
|
|
CloseHandle( request->cancel );
|
|
- heap_free( request->proxy.lpszProxy );
|
|
- heap_free( request->proxy.lpszProxyBypass );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxy );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxyBypass );
|
|
heap_free( request->buffer );
|
|
heap_free( request->verb );
|
|
VariantClear( &request->data );
|
|
@@ -3005,16 +3006,16 @@ static HRESULT WINAPI winhttp_request_Se
|
|
{
|
|
case HTTPREQUEST_PROXYSETTING_DEFAULT:
|
|
request->proxy.dwAccessType = WINHTTP_ACCESS_TYPE_DEFAULT_PROXY;
|
|
- heap_free( request->proxy.lpszProxy );
|
|
- heap_free( request->proxy.lpszProxyBypass );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxy );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxyBypass );
|
|
request->proxy.lpszProxy = NULL;
|
|
request->proxy.lpszProxyBypass = NULL;
|
|
break;
|
|
|
|
case HTTPREQUEST_PROXYSETTING_DIRECT:
|
|
request->proxy.dwAccessType = WINHTTP_ACCESS_TYPE_NO_PROXY;
|
|
- heap_free( request->proxy.lpszProxy );
|
|
- heap_free( request->proxy.lpszProxyBypass );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxy );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxyBypass );
|
|
request->proxy.lpszProxy = NULL;
|
|
request->proxy.lpszProxyBypass = NULL;
|
|
break;
|
|
@@ -3023,12 +3024,12 @@ static HRESULT WINAPI winhttp_request_Se
|
|
request->proxy.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
|
|
if (V_VT( &proxy_server ) == VT_BSTR)
|
|
{
|
|
- heap_free( request->proxy.lpszProxy );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxy );
|
|
request->proxy.lpszProxy = strdupW( V_BSTR( &proxy_server ) );
|
|
}
|
|
if (V_VT( &bypass_list ) == VT_BSTR)
|
|
{
|
|
- heap_free( request->proxy.lpszProxyBypass );
|
|
+ heap_free( (WCHAR *)request->proxy.lpszProxyBypass );
|
|
request->proxy.lpszProxyBypass = strdupW( V_BSTR( &bypass_list ) );
|
|
}
|
|
break;
|
|
diff -pudN e:\wine\dlls\winhttp/session.c e:\reactos\dll\win32\winhttp/session.c
|
|
--- e:\wine\dlls\winhttp/session.c 2016-11-16 17:36:37 +0100
|
|
+++ e:\reactos\dll\win32\winhttp/session.c 2016-11-17 00:14:49 +0100
|
|
@@ -197,6 +197,9 @@ static const object_vtbl_t session_vtbl
|
|
session_set_option
|
|
};
|
|
|
|
+#ifdef __REACTOS__
|
|
+BOOL netconn_init_winsock();
|
|
+#endif /* __REACTOS__ */
|
|
/***********************************************************************
|
|
* WinHttpOpen (winhttp.@)
|
|
*/
|
|
@@ -204,6 +207,9 @@ HINTERNET WINAPI WinHttpOpen( LPCWSTR ag
|
|
{
|
|
session_t *session;
|
|
HINTERNET handle = NULL;
|
|
+#ifdef __REACTOS__
|
|
+ if (!netconn_init_winsock()) return NULL;
|
|
+#endif
|
|
|
|
TRACE("%s, %u, %s, %s, 0x%08x\n", debugstr_w(agent), access, debugstr_w(proxy), debugstr_w(bypass), flags);
|
|
|
|
@@ -230,14 +236,14 @@ HINTERNET WINAPI WinHttpOpen( LPCWSTR ag
|
|
session->access = info.dwAccessType;
|
|
if (info.lpszProxy && !(session->proxy_server = strdupW( info.lpszProxy )))
|
|
{
|
|
- GlobalFree( info.lpszProxy );
|
|
- GlobalFree( info.lpszProxyBypass );
|
|
+ GlobalFree( (LPWSTR)info.lpszProxy );
|
|
+ GlobalFree( (LPWSTR)info.lpszProxyBypass );
|
|
goto end;
|
|
}
|
|
if (info.lpszProxyBypass && !(session->proxy_bypass = strdupW( info.lpszProxyBypass )))
|
|
{
|
|
- GlobalFree( info.lpszProxy );
|
|
- GlobalFree( info.lpszProxyBypass );
|
|
+ GlobalFree( (LPWSTR)info.lpszProxy );
|
|
+ GlobalFree( (LPWSTR)info.lpszProxyBypass );
|
|
goto end;
|
|
}
|
|
}
|
|
@@ -610,7 +616,7 @@ static WCHAR *blob_to_str( DWORD encodin
|
|
|
|
static BOOL convert_sockaddr( const struct sockaddr *addr, SOCKADDR_STORAGE *addr_storage )
|
|
{
|
|
-#ifndef __MINGW32__
|
|
+#if !defined(__MINGW32__) && !defined(_MSC_VER)
|
|
switch (addr->sa_family)
|
|
{
|
|
case AF_INET:
|