Module: wine Branch: master Commit: ba45902dafc8fabd93ce49e2d8bcf4cc9d946e33 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ba45902dafc8fabd93ce49e2d8...
Author: Juan Lang juan.lang@gmail.com Date: Mon Sep 17 08:40:04 2007 -0700
wininet: Create a TCP connection if FLAG_ICC_FORCE_CONNECTION is specified.
---
dlls/wininet/internet.c | 49 +++++++++++++++++++++++++++++++++------------- 1 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 9910955..345b2aa 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -2739,6 +2739,7 @@ BOOL WINAPI InternetCheckConnectionW( LPCWSTR lpszUrl, DWORD dwFlags, DWORD dwRe CHAR *command = NULL; WCHAR hostW[1024]; DWORD len; + INTERNET_PORT port; int status = -1;
FIXME("\n"); @@ -2770,26 +2771,46 @@ BOOL WINAPI InternetCheckConnectionW( LPCWSTR lpszUrl, DWORD dwFlags, DWORD dwRe goto End;
TRACE("host name : %s\n",debugstr_w(components.lpszHostName)); + port = components.nPort; + TRACE("port: %d\n", port); }
- /* - * Build our ping command - */ - len = WideCharToMultiByte(CP_UNIXCP, 0, hostW, -1, NULL, 0, NULL, NULL); - command = HeapAlloc( GetProcessHeap(), 0, strlen(ping)+len+strlen(redirect) ); - strcpy(command,ping); - WideCharToMultiByte(CP_UNIXCP, 0, hostW, -1, command+strlen(ping), len, NULL, NULL); - strcat(command,redirect); + if (dwFlags & FLAG_ICC_FORCE_CONNECTION) + { + struct sockaddr_in sin; + int fd; + + if (!GetAddress(hostW, port, &sin)) + goto End; + fd = socket(sin.sin_family, SOCK_STREAM, 0); + if (fd != -1) + { + if (connect(fd, (struct sockaddr *)&sin, sizeof(sin)) == 0) + rc = TRUE; + close(fd); + } + } + else + { + /* + * Build our ping command + */ + len = WideCharToMultiByte(CP_UNIXCP, 0, hostW, -1, NULL, 0, NULL, NULL); + command = HeapAlloc( GetProcessHeap(), 0, strlen(ping)+len+strlen(redirect) ); + strcpy(command,ping); + WideCharToMultiByte(CP_UNIXCP, 0, hostW, -1, command+strlen(ping), len, NULL, NULL); + strcat(command,redirect);
- TRACE("Ping command is : %s\n",command); + TRACE("Ping command is : %s\n",command);
- status = system(command); + status = system(command);
- TRACE("Ping returned a code of %i\n",status); + TRACE("Ping returned a code of %i\n",status);
- /* Ping return code of 0 indicates success */ - if (status == 0) - rc = TRUE; + /* Ping return code of 0 indicates success */ + if (status == 0) + rc = TRUE; + }
End: