reman3/Rayman_X/cpa/tempgrp/NET/netsock.c

413 lines
10 KiB
C

/********************************************************************************/
/* */
/* NetSock.c */
/* */
/* This file defines the interface with the WinSock API */
/* */
/********************************************************************************/
/*
USING WINSOCK EITHER IN STATIC DLL OR IN DYNAMIC DLL
*/
#define _NETLIB_WINSOCK_DYNAMIC_
#include "warnings.h"
#include "netsock.h"
#ifdef _NETLIB_WINSOCK_DYNAMIC_
static HINSTANCE gs_h_WinsockDllHandle = NULL;
#endif
static tdstWinSockFunc stWinSockDesc;
static int gs_iCount = 0;
NetLib_tdeErrorStatus eNetLoadWinSock(tdstWinSockFunc *p_stWinSockDesc)
{
WSADATA WsaData;
int iErrorCode;
if(gs_iCount>0) {
gs_iCount++;
return NetLib_E_es_NoError;
}
#ifdef _NETLIB_WINSOCK_DYNAMIC_
if((gs_h_WinsockDllHandle = LoadLibrary("Wsock32.dll"))==NULL)
return NetLib_E_es_InvalidHandle;
#endif
gs_iCount=1;
p_stWinSockDesc->m_pfn_ui_accept =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_ui_accept)GetProcAddress(gs_h_WinsockDllHandle,"accept");
#else
accept;
#endif
p_stWinSockDesc->m_pfn_i_bind =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_bind )GetProcAddress(gs_h_WinsockDllHandle,"bind");
#else
bind;
#endif
p_stWinSockDesc->m_pfn_i_closesocket =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_closesocket )GetProcAddress(gs_h_WinsockDllHandle,"closesocket");
#else
closesocket;
#endif
p_stWinSockDesc->m_pfn_i_connect =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_connect )GetProcAddress(gs_h_WinsockDllHandle,"connect");
#else
connect;
#endif
p_stWinSockDesc->m_pfn_i_ioctlsocket =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_ioctlsocket )GetProcAddress(gs_h_WinsockDllHandle,"ioctlsocket");
#else
ioctlsocket;
#endif
p_stWinSockDesc->m_pfn_i_getpeername =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_getpeername )GetProcAddress(gs_h_WinsockDllHandle,"getpeername");
#else
getpeername;
#endif
p_stWinSockDesc->m_pfn_i_getsockname =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_getsockname )GetProcAddress(gs_h_WinsockDllHandle,"getsockname");
#else
getsockname;
#endif
p_stWinSockDesc->m_pfn_i_getsockopt =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_getsockopt )GetProcAddress(gs_h_WinsockDllHandle,"getsockopt");
#else
getsockopt;
#endif
p_stWinSockDesc->m_pfn_ul_htonl =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_ul_htonl )GetProcAddress(gs_h_WinsockDllHandle,"htonl");
#else
htonl;
#endif
p_stWinSockDesc->m_pfn_uw_htons =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_uw_htons )GetProcAddress(gs_h_WinsockDllHandle,"htons");
#else
htons;
#endif
p_stWinSockDesc->m_pfn_ul_inet_addr =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_ul_inet_addr )GetProcAddress(gs_h_WinsockDllHandle,"inet_addr");
#else
inet_addr;
#endif
p_stWinSockDesc->m_pfn_pc_inet_ntoa =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pc_inet_ntoa )GetProcAddress(gs_h_WinsockDllHandle,"inet_ntoa");
#else
inet_ntoa;
#endif
p_stWinSockDesc->m_pfn_i_listen =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_listen )GetProcAddress(gs_h_WinsockDllHandle,"listen");
#else
listen;
#endif
p_stWinSockDesc->m_pfn_ul_ntohl =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_ul_ntohl )GetProcAddress(gs_h_WinsockDllHandle,"ntohl");
#else
ntohl;
#endif
p_stWinSockDesc->m_pfn_uw_ntohs =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_uw_ntohs )GetProcAddress(gs_h_WinsockDllHandle,"ntohs");
#else
ntohs;
#endif
p_stWinSockDesc->m_pfn_i_recv =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_recv )GetProcAddress(gs_h_WinsockDllHandle,"recv");
#else
recv;
#endif
p_stWinSockDesc->m_pfn_i_recvfrom =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_recvfrom )GetProcAddress(gs_h_WinsockDllHandle,"recvfrom");
#else
recvfrom;
#endif
p_stWinSockDesc->m_pfn_i_select =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_select )GetProcAddress(gs_h_WinsockDllHandle,"select");
#else
select;
#endif
p_stWinSockDesc->m_pfn_i_send =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_send )GetProcAddress(gs_h_WinsockDllHandle,"send");
#else
send;
#endif
p_stWinSockDesc->m_pfn_i_sendto =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_sendto )GetProcAddress(gs_h_WinsockDllHandle,"sendto");
#else
sendto;
#endif
p_stWinSockDesc->m_pfn_i_setsockopt =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_setsockopt )GetProcAddress(gs_h_WinsockDllHandle,"setsockopt");
#else
setsockopt;
#endif
p_stWinSockDesc->m_pfn_i_shutdown =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_shutdown )GetProcAddress(gs_h_WinsockDllHandle,"shutdown");
#else
shutdown;
#endif
p_stWinSockDesc->m_pfn_ui_socket =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_ui_socket )GetProcAddress(gs_h_WinsockDllHandle,"socket");
#else
socket;
#endif
p_stWinSockDesc->m_pfn_pst_gethostbyaddr =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pst_gethostbyaddr )GetProcAddress(gs_h_WinsockDllHandle,"gethostbyaddr");
#else
gethostbyaddr;
#endif
p_stWinSockDesc->m_pfn_pst_gethostbyname =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pst_gethostbyname )GetProcAddress(gs_h_WinsockDllHandle,"gethostbyname");
#else
gethostbyname;
#endif
p_stWinSockDesc->m_pfn_i_gethostname =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_gethostname )GetProcAddress(gs_h_WinsockDllHandle,"gethostname");
#else
gethostname;
#endif
p_stWinSockDesc->m_pfn_pst_getservbyport =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pst_getservbyport )GetProcAddress(gs_h_WinsockDllHandle,"getservbyport");
#else
getservbyport;
#endif
p_stWinSockDesc->m_pfn_pst_getservbyname =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pst_getservbyname )GetProcAddress(gs_h_WinsockDllHandle,"getservbyname");
#else
getservbyname;
#endif
p_stWinSockDesc->m_pfn_pst_getprotobynumber =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pst_getprotobynumber )GetProcAddress(gs_h_WinsockDllHandle,"getprotobynumber");
#else
getprotobynumber;
#endif
p_stWinSockDesc->m_pfn_pst_getprotobyname =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pst_getprotobyname )GetProcAddress(gs_h_WinsockDllHandle,"getprotobyname");
#else
getprotobyname;
#endif
p_stWinSockDesc->m_pfn_i_WSAStartup =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSAStartup )GetProcAddress(gs_h_WinsockDllHandle,"WSAStartup");
#else
WSAStartup;
#endif
p_stWinSockDesc->m_pfn_i_WSACleanup =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSACleanup )GetProcAddress(gs_h_WinsockDllHandle,"WSACleanup");
#else
WSACleanup;
#endif
p_stWinSockDesc->m_pfn_v_WSASetLastError =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_v_WSASetLastError )GetProcAddress(gs_h_WinsockDllHandle,"WSASetLastError");
#else
WSASetLastError;
#endif
p_stWinSockDesc->m_pfn_i_WSAGetLastError =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSAGetLastError )GetProcAddress(gs_h_WinsockDllHandle,"WSAGetLastError");
#else
WSAGetLastError;
#endif
p_stWinSockDesc->m_pfn_b_WSAIsBlocking =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_b_WSAIsBlocking )GetProcAddress(gs_h_WinsockDllHandle,"WSAIsBlocking");
#else
WSAIsBlocking;
#endif
p_stWinSockDesc->m_pfn_i_WSAUnhookBlockingHook =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSAUnhookBlockingHook )GetProcAddress(gs_h_WinsockDllHandle,"WSAUnhookBlockingHook");
#else
WSAUnhookBlockingHook;
#endif
p_stWinSockDesc->m_pfn_pfn_WSASetBlockingHook =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_pfn_WSASetBlockingHook )GetProcAddress(gs_h_WinsockDllHandle,"WSASetBlockingHook");
#else
WSASetBlockingHook;
#endif
p_stWinSockDesc->m_pfn_i_WSACancelBlockingCall =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSACancelBlockingCall )GetProcAddress(gs_h_WinsockDllHandle,"WSACancelBlockingCall");
#else
WSACancelBlockingCall;
#endif
p_stWinSockDesc->m_pfn_h_WSAAsyncGetServByName =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_h_WSAAsyncGetServByName )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncGetServByName");
#else
WSAAsyncGetServByName;
#endif
p_stWinSockDesc->m_pfn_h_WSAAsyncGetServByPort =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_h_WSAAsyncGetServByPort )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncGetServByPort");
#else
WSAAsyncGetServByPort;
#endif
p_stWinSockDesc->m_pfn_h_WSAAsyncGetProtoByName =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_h_WSAAsyncGetProtoByName )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncGetProtoByName");
#else
WSAAsyncGetProtoByName;
#endif
p_stWinSockDesc->m_pfn_h_WSAAsyncGetProtoByNumber =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_h_WSAAsyncGetProtoByNumber )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncGetProtoByNumber");
#else
WSAAsyncGetProtoByNumber;
#endif
p_stWinSockDesc->m_pfn_h_WSAAsyncGetHostByName =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_h_WSAAsyncGetHostByName )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncGetHostByName");
#else
WSAAsyncGetHostByName;
#endif
p_stWinSockDesc->m_pfn_h_WSAAsyncGetHostByAddr =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_h_WSAAsyncGetHostByAddr )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncGetHostByAddr");
#else
WSAAsyncGetHostByAddr;
#endif
p_stWinSockDesc->m_pfn_i_WSACancelAsyncRequest =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSACancelAsyncRequest )GetProcAddress(gs_h_WinsockDllHandle,"WSACancelAsyncRequest");
#else
WSACancelAsyncRequest;
#endif
p_stWinSockDesc->m_pfn_i_WSAAsyncSelect =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSAAsyncSelect )GetProcAddress(gs_h_WinsockDllHandle,"WSAAsyncSelect");
#else
WSAAsyncSelect;
#endif
p_stWinSockDesc->m_pfn_i_WSARecvEx =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSARecvEx )GetProcAddress(gs_h_WinsockDllHandle,"WSARecvEx");
#else
WSARecvEx;
#endif
p_stWinSockDesc->m_pfn_i_WSAFDIsSet =
#ifdef _NETLIB_WINSOCK_DYNAMIC_
(tdp_fn_i_WSAFDIsSet)GetProcAddress(gs_h_WinsockDllHandle,"__WSAFDIsSet");
#else
__WSAFDIsSet;
#endif
iErrorCode=p_stWinSockDesc->m_pfn_i_WSAStartup(0x0101, &WsaData);
if(iErrorCode)
return NetLib_E_es_InitialisationSocketError;
else
return NetLib_E_es_NoError;
}
NetLib_tdeErrorStatus eNetGetWinSockDesc(tdstWinSockFunc **p_pstWinSocDesc)
{
NetLib_tdeErrorStatus eErrorCode;
if((eErrorCode=eNetLoadWinSock(&stWinSockDesc))!=NetLib_E_es_NoError)
*p_pstWinSocDesc = NULL;
else
*p_pstWinSocDesc = &stWinSockDesc;
return eErrorCode;
}
NetLib_tdeErrorStatus eNetRestoreWinSock(void)
{
int iErrorCode;
gs_iCount--;
#ifdef _NETLIB_WINSOCK_DYNAMIC_
if(!gs_iCount) {
if(iErrorCode=WSACleanup())
return NetLib_E_es_UnknownError;
FreeLibrary(gs_h_WinsockDllHandle);
}
#endif
return NetLib_E_es_NoError;
}