--- parser3/src/main/pa_socks.C 2002/08/01 11:41:19 1.16 +++ parser3/src/main/pa_socks.C 2012/06/20 20:54:26 1.27 @@ -1,24 +1,48 @@ /** @file Parser: socks initialization/finalization. - Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2012 Art. Lebedev Studio (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ -static const char* IDENT_SOCKS_C="$Date: 2002/08/01 11:41:19 $"; +volatile const char * IDENT_PA_SOCKS_C="$Id: pa_socks.C,v 1.27 2012/06/20 20:54:26 moko Exp $"; #define NO_UNISTD_H #include "pa_config_includes.h" -#ifndef HAVE_SYS_SELECT_H +#ifdef WIN32 #include "pa_exception.h" #include "pa_socks.h" +#include "pa_string.h" -#include +// in cygwin: for pascal +// in MSVC: for everything +#include + +#ifdef CYGWIN +// WSADATA +#define WSADESCRIPTION_LEN 256 +#define WSASYS_STATUS_LEN 128 +typedef struct WSAData { + WORD wVersion; + WORD wHighVersion; + char szDescription[WSADESCRIPTION_LEN+1]; + char szSystemStatus[WSASYS_STATUS_LEN+1]; + unsigned short iMaxSockets; + unsigned short iMaxUdpDg; + char * lpVendorInfo; +} WSADATA; +typedef WSADATA *LPWSADATA; + +extern "C" int PASCAL FAR WSAStartup(WORD,LPWSADATA); +extern "C" int PASCAL FAR WSACleanup(void); +extern "C" int PASCAL FAR WSAGetLastError(); + +#endif // CYGWIN WSADATA wsaData; -void init_socks(Pool& pool) { +void pa_socks_init() { WORD wVersionRequested; int err; wVersionRequested = MAKEWORD( 1, 1 ); @@ -34,7 +58,7 @@ void init_socks(Pool& pool) { } } -void done_socks() { +void pa_socks_done() { /* Confirm that the WinSock DLL supports 2.2.*/ /* Note that if the DLL supports versions greater */ /* than 2.2 in addition to 2.2, it will still return */ @@ -47,11 +71,37 @@ void done_socks() { } } +const char* pa_socks_strerr(int no) { + char buf[MAX_STRING]; + buf[0]=0; + size_t error_size=FormatMessage( + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + no, + 0, // Default language + (LPTSTR) &buf, + sizeof(buf), + NULL + ); + if(error_size>3) // ".\r\n" + buf[error_size-3]=0; + return buf[0]? pa_strdup(buf): "unknown error"; +} +int pa_socks_errno() { + return WSAGetLastError(); +} + #else -#include "pa_pool.h" +void pa_socks_init() {} +void pa_socks_done() {} -void init_socks(Pool& pool) {} -void done_socks() {} +const char* pa_socks_strerr(int no) { + return strerror(no); +} +int pa_socks_errno() { + return errno; +} #endif