Changeset 21322 for trunk/src


Ignore:
Timestamp:
Jul 3, 2009, 11:07:32 PM (16 years ago)
Author:
ydario
Message:

ws2_32 implemented WSAAddressToString.

Location:
trunk/src/ws2_32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ws2_32/socket.cpp

    r9843 r21322  
    281281                        NULL, NULL, lpOverlapped, lpCompletionRoutine);
    282282}
     283
     284/***********************************************************************
     285 *              WSAAddressToStringA                      (WS2_32.27)
     286 *
     287 *  See WSAAddressToStringW
     288 */
     289INT WINAPI WSAAddressToStringA( LPSOCKADDR sockaddr, DWORD len,
     290                                LPWSAPROTOCOL_INFOA info, LPSTR string,
     291                                LPDWORD lenstr )
     292{
     293    INT size;
     294    CHAR buffer[22]; /* 12 digits + 3 dots + ':' + 5 digits + '\0' */
     295    CHAR *p;
     296
     297    TRACE( "(%p, %d, %p, %p, %p)\n", sockaddr, len, info, string, lenstr );
     298
     299    if (!sockaddr || len < sizeof(SOCKADDR_IN)) return SOCKET_ERROR;
     300    if (!string || !lenstr) return SOCKET_ERROR;
     301
     302    /* sin_family is guaranteed to be the first u_short */
     303    if (((SOCKADDR_IN *)sockaddr)->sin_family != AF_INET) return SOCKET_ERROR;
     304
     305    sprintf( buffer, "%u.%u.%u.%u:%u",
     306             (unsigned int)(ntohl( ((SOCKADDR_IN *)sockaddr)->sin_addr.s_addr ) >> 24 & 0xff),
     307             (unsigned int)(ntohl( ((SOCKADDR_IN *)sockaddr)->sin_addr.s_addr ) >> 16 & 0xff),
     308             (unsigned int)(ntohl( ((SOCKADDR_IN *)sockaddr)->sin_addr.s_addr ) >> 8 & 0xff),
     309             (unsigned int)(ntohl( ((SOCKADDR_IN *)sockaddr)->sin_addr.s_addr ) & 0xff),
     310             ntohs( ((SOCKADDR_IN *)sockaddr)->sin_port ) );
     311
     312    p = strchr( buffer, ':' );
     313    if (!((SOCKADDR_IN *)sockaddr)->sin_port) *p = 0;
     314
     315    size = strlen( buffer );
     316
     317    if (*lenstr <  size)
     318    {
     319        *lenstr = size;
     320        WSASetLastError(WSAEFAULT);
     321        return SOCKET_ERROR;
     322    }
     323
     324    strcpy( string, buffer );
     325    return 0;
     326}
  • trunk/src/ws2_32/ws2_32.def

    r21308 r21322  
    4545; WPUCompleteOverlappedRequest                     @25
    4646  WSAAccept = _WSAAccept@20                        @26
    47 ; WSAAddressToStringA                              @27
     47  WSAAddressToStringA  = _WSAAddressToStringA@20   @27
    4848; WSAAddressToStringW                              @28
    4949
Note: See TracChangeset for help on using the changeset viewer.