📄 ns.c
字号:
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS WinSock 2 DLL
* FILE: misc/ns.c
* PURPOSE: Namespace APIs
* PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
* REVISIONS:
* CSH 01/09-2000 Created
*/
#define __NO_CTYPE_INLINES
#include <ctype.h>
#include <ws2_32.h>
#include <winbase.h>
#ifndef BUFSIZ
#define BUFSIZ 1024
#endif/*BUFSIZ*/
#ifndef MAX_HOSTNAME_LEN
#define MAX_HOSTNAME_LEN 256
#endif
/* Name resolution APIs */
/*
* @unimplemented
*/
INT
EXPORT
WSAAddressToStringA(IN LPSOCKADDR lpsaAddress,
IN DWORD dwAddressLength,
IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
OUT LPSTR lpszAddressString,
IN OUT LPDWORD lpdwAddressStringLength)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAAddressToStringW(IN LPSOCKADDR lpsaAddress,
IN DWORD dwAddressLength,
IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
OUT LPWSTR lpszAddressString,
IN OUT LPDWORD lpdwAddressStringLength)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAEnumNameSpaceProvidersA(IN OUT LPDWORD lpdwBufferLength,
OUT LPWSANAMESPACE_INFOA lpnspBuffer)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAEnumNameSpaceProvidersW(IN OUT LPDWORD lpdwBufferLength,
OUT LPWSANAMESPACE_INFOW lpnspBuffer)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAGetServiceClassInfoA(IN LPGUID lpProviderId,
IN LPGUID lpServiceClassId,
IN OUT LPDWORD lpdwBufferLength,
OUT LPWSASERVICECLASSINFOA lpServiceClassInfo)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAGetServiceClassInfoW(IN LPGUID lpProviderId,
IN LPGUID lpServiceClassId,
IN OUT LPDWORD lpdwBufferLength,
OUT LPWSASERVICECLASSINFOW lpServiceClassInfo)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAGetServiceClassNameByClassIdA(IN LPGUID lpServiceClassId,
OUT LPSTR lpszServiceClassName,
IN OUT LPDWORD lpdwBufferLength)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAGetServiceClassNameByClassIdW(IN LPGUID lpServiceClassId,
OUT LPWSTR lpszServiceClassName,
IN OUT LPDWORD lpdwBufferLength)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAInstallServiceClassA(IN LPWSASERVICECLASSINFOA lpServiceClassInfo)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAInstallServiceClassW(IN LPWSASERVICECLASSINFOW lpServiceClassInfo)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSALookupServiceBeginA(IN LPWSAQUERYSETA lpqsRestrictions,
IN DWORD dwControlFlags,
OUT LPHANDLE lphLookup)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSALookupServiceBeginW(IN LPWSAQUERYSETW lpqsRestrictions,
IN DWORD dwControlFlags,
OUT LPHANDLE lphLookup)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSALookupServiceEnd(IN HANDLE hLookup)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSALookupServiceNextA(IN HANDLE hLookup,
IN DWORD dwControlFlags,
IN OUT LPDWORD lpdwBufferLength,
OUT LPWSAQUERYSETA lpqsResults)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSALookupServiceNextW(IN HANDLE hLookup,
IN DWORD dwControlFlags,
IN OUT LPDWORD lpdwBufferLength,
OUT LPWSAQUERYSETW lpqsResults)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSARemoveServiceClass(IN LPGUID lpServiceClassId)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSASetServiceA(IN LPWSAQUERYSETA lpqsRegInfo,
IN WSAESETSERVICEOP essOperation,
IN DWORD dwControlFlags)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSASetServiceW(IN LPWSAQUERYSETW lpqsRegInfo,
IN WSAESETSERVICEOP essOperation,
IN DWORD dwControlFlags)
{
UNIMPLEMENTED
return 0;
}
/*
* @unimplemented
*/
INT
EXPORT
WSAStringToAddressA(IN LPSTR AddressString,
IN INT AddressFamily,
IN LPWSAPROTOCOL_INFOA lpProtocolInfo,
OUT LPSOCKADDR lpAddress,
IN OUT LPINT lpAddressLength)
{
INT ret, len;
LPWSTR szTemp;
LPWSAPROTOCOL_INFOW lpProtoInfoW = NULL;
len = MultiByteToWideChar(CP_ACP,
0,
AddressString,
-1,
NULL,
0);
szTemp = HeapAlloc(GetProcessHeap(),
0,
len * sizeof(WCHAR));
MultiByteToWideChar(CP_ACP,
0,
AddressString,
-1,
szTemp,
len);
if (lpProtocolInfo)
{
len = WSAPROTOCOL_LEN+1;
lpProtoInfoW = HeapAlloc(GetProcessHeap(),
0,
len * sizeof(WCHAR) );
memcpy(lpProtoInfoW,
lpProtocolInfo,
sizeof(LPWSAPROTOCOL_INFOA));
MultiByteToWideChar(CP_ACP,
0,
lpProtocolInfo->szProtocol,
-1,
lpProtoInfoW->szProtocol,
len);
}
ret = WSAStringToAddressW(szTemp,
AddressFamily,
lpProtoInfoW,
lpAddress,
lpAddressLength);
HeapFree(GetProcessHeap(),
0,
szTemp );
if (lpProtocolInfo)
HeapFree(GetProcessHeap(),
0,
lpProtoInfoW);
WSASetLastError(ret);
return ret;
}
/*
* @implement
*/
INT
EXPORT
WSAStringToAddressW(IN LPWSTR AddressString,
IN INT AddressFamily,
IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
OUT LPSOCKADDR lpAddress,
IN OUT LPINT lpAddressLength)
{
int pos=0;
int res=0;
LONG inetaddr = 0;
LPWSTR *bp=NULL;
SOCKADDR_IN *sockaddr = (SOCKADDR_IN *) lpAddress;
if (!lpAddressLength || !lpAddress)
return SOCKET_ERROR;
if (AddressString==NULL)
return WSAEINVAL;
/* Set right adress family */
if (lpProtocolInfo!=NULL)
sockaddr->sin_family = lpProtocolInfo->iAddressFamily;
else sockaddr->sin_family = AddressFamily;
/* Report size */
if (AddressFamily == AF_INET)
{
if (*lpAddressLength < (INT)sizeof(SOCKADDR_IN))
{
*lpAddressLength = sizeof(SOCKADDR_IN);
res = WSAEFAULT;
}
else
{
if (!lpAddress)
res = WSAEINVAL;
else
{
// translate now ip string to ip
/* rest sockaddr.sin_addr.s_addr
for we need to be sure it is zero when we come to while */
memset(lpAddress,0,sizeof(SOCKADDR_IN));
/* Set right adress family */
sockaddr->sin_family = AF_INET;
/* Get port number */
pos = wcscspn(AddressString,L":") + 1;
if (pos < (int)wcslen(AddressString))
sockaddr->sin_port = wcstol(&AddressString[pos],
bp,
10);
else
sockaddr->sin_port = 0;
/* Get ip number */
pos=0;
inetaddr=0;
while (pos < (int)wcslen(AddressString))
{
inetaddr = (inetaddr<<8) + ((UCHAR)wcstol(&AddressString[pos],
bp,
10));
pos += wcscspn( &AddressString[pos],L".") +1 ;
}
res = 0;
sockaddr->sin_addr.s_addr = inetaddr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -