From 05da1e0157e5d5e4ed7d96e3e33dcca819be8ee5 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 17 Sep 2007 08:40:04 -0700 Subject: [PATCH] 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( LP CHAR *command = NULL; WCHAR hostW[1024]; DWORD len; + INTERNET_PORT port; int status = -1; FIXME("\n"); @@ -2770,26 +2771,46 @@ BOOL WINAPI InternetCheckConnectionW( LP 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: -- 1.4.1