⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ns.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
📖 第 1 页 / 共 3 页
字号:
/*
 * 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 + -