VirtualBox

Changeset 26588 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 16, 2010 5:02:59 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
57776
Message:

iprt: New type RTNETADDR for storing any address + type + port. Added %RTnaddr for printing it.

Location:
trunk/src/VBox/Runtime
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/string/strformatrt.cpp

    r26351 r26588  
    5252 *      - \%RTldrm          - Takes a #RTLDRMOD value.
    5353 *      - \%RTmac           - Takes a #PCRTMAC pointer.
     54 *      - \%RTnaddr         - Takes a #PCRTNETADDR value.
    5455 *      - \%RTnaipv4        - Takes a #RTNETADDRIPV4 value.
    5556 *      - \%RTnaipv6        - Takes a #PCRTNETADDRIPV6 value.
     
    215216                    RTSF_IPV6,
    216217                    RTSF_MAC,
     218                    RTSF_NETADDR,
    217219                    RTSF_UUID
    218220                } RTSF;
     
    266268                    { STRMEM("Tldrm"),   sizeof(RTLDRMOD),       16, RTSF_INTW,  0 },
    267269                    { STRMEM("Tmac"),    sizeof(PCRTMAC),        16, RTSF_MAC,   0 },
     270                    { STRMEM("Tnaddr"),  sizeof(PCRTNETADDR),    10, RTSF_NETADDR,0 },
    268271                    { STRMEM("Tnaipv4"), sizeof(RTNETADDRIPV4),  10, RTSF_IPV4,  0 },
    269272                    { STRMEM("Tnaipv6"), sizeof(PCRTNETADDRIPV6),16, RTSF_IPV6,  0 },
     
    316319                    RTNETADDRIPV4       Ipv4Addr;
    317320                    PCRTNETADDRIPV6     pIpv6Addr;
     321                    PCRTNETADDR         pNetAddr;
    318322                    PCRTUUID            pUuid;
    319323                } u;
     
    532536                    }
    533537
     538                    case RTSF_NETADDR:
     539                    {
     540                        if (VALID_PTR(u.pNetAddr))
     541                        {
     542                            switch (u.pNetAddr->enmType)
     543                            {
     544                                case RTNETADDRTYPE_IPV4:
     545                                    if (u.pNetAddr->uPort == RTNETADDR_PORT_NA)
     546                                        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     547                                                           "%u.%u.%u.%u",
     548                                                           u.pNetAddr->uAddr.IPv4.au8[0],
     549                                                           u.pNetAddr->uAddr.IPv4.au8[1],
     550                                                           u.pNetAddr->uAddr.IPv4.au8[2],
     551                                                           u.pNetAddr->uAddr.IPv4.au8[3]);
     552                                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     553                                                       "%u.%u.%u.%u:%u",
     554                                                       u.pNetAddr->uAddr.IPv4.au8[0],
     555                                                       u.pNetAddr->uAddr.IPv4.au8[1],
     556                                                       u.pNetAddr->uAddr.IPv4.au8[2],
     557                                                       u.pNetAddr->uAddr.IPv4.au8[3],
     558                                                       u.pNetAddr->uPort);
     559
     560                                case RTNETADDRTYPE_IPV6:
     561                                    if (u.pNetAddr->uPort == RTNETADDR_PORT_NA)
     562                                        return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     563                                                           "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
     564                                                           u.pNetAddr->uAddr.IPv6.au8[0],
     565                                                           u.pNetAddr->uAddr.IPv6.au8[1],
     566                                                           u.pNetAddr->uAddr.IPv6.au8[2],
     567                                                           u.pNetAddr->uAddr.IPv6.au8[3],
     568                                                           u.pNetAddr->uAddr.IPv6.au8[4],
     569                                                           u.pNetAddr->uAddr.IPv6.au8[5],
     570                                                           u.pNetAddr->uAddr.IPv6.au8[6],
     571                                                           u.pNetAddr->uAddr.IPv6.au8[7],
     572                                                           u.pNetAddr->uAddr.IPv6.au8[8],
     573                                                           u.pNetAddr->uAddr.IPv6.au8[9],
     574                                                           u.pNetAddr->uAddr.IPv6.au8[10],
     575                                                           u.pNetAddr->uAddr.IPv6.au8[11],
     576                                                           u.pNetAddr->uAddr.IPv6.au8[12],
     577                                                           u.pNetAddr->uAddr.IPv6.au8[13],
     578                                                           u.pNetAddr->uAddr.IPv6.au8[14],
     579                                                           u.pNetAddr->uAddr.IPv6.au8[15]);
     580                                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     581                                                       "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x %u",
     582                                                       u.pNetAddr->uAddr.IPv6.au8[0],
     583                                                       u.pNetAddr->uAddr.IPv6.au8[1],
     584                                                       u.pNetAddr->uAddr.IPv6.au8[2],
     585                                                       u.pNetAddr->uAddr.IPv6.au8[3],
     586                                                       u.pNetAddr->uAddr.IPv6.au8[4],
     587                                                       u.pNetAddr->uAddr.IPv6.au8[5],
     588                                                       u.pNetAddr->uAddr.IPv6.au8[6],
     589                                                       u.pNetAddr->uAddr.IPv6.au8[7],
     590                                                       u.pNetAddr->uAddr.IPv6.au8[8],
     591                                                       u.pNetAddr->uAddr.IPv6.au8[9],
     592                                                       u.pNetAddr->uAddr.IPv6.au8[10],
     593                                                       u.pNetAddr->uAddr.IPv6.au8[11],
     594                                                       u.pNetAddr->uAddr.IPv6.au8[12],
     595                                                       u.pNetAddr->uAddr.IPv6.au8[13],
     596                                                       u.pNetAddr->uAddr.IPv6.au8[14],
     597                                                       u.pNetAddr->uAddr.IPv6.au8[15],
     598                                                       u.pNetAddr->uPort);
     599
     600                                case RTNETADDRTYPE_MAC:
     601                                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     602                                                       "%02x:%02x:%02x:%02x:%02x:%02x",
     603                                                       u.pNetAddr->uAddr.Mac.au8[0],
     604                                                       u.pNetAddr->uAddr.Mac.au8[1],
     605                                                       u.pNetAddr->uAddr.Mac.au8[2],
     606                                                       u.pNetAddr->uAddr.Mac.au8[3],
     607                                                       u.pNetAddr->uAddr.Mac.au8[4],
     608                                                       u.pNetAddr->uAddr.Mac.au8[5]);
     609
     610                                default:
     611                                    return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
     612                                                       "unsupported-netaddr-type=%u", u.pNetAddr->enmType);
     613
     614                            }
     615                        }
     616                        return pfnOutput(pvArgOutput, s_szNull, sizeof(s_szNull) - 1);
     617                    }
     618
    534619                    case RTSF_UUID:
    535620                    {
  • trunk/src/VBox/Runtime/r3/tcp.cpp

    r26252 r26588  
    910910
    911911
     912RTR3DECL(int) RTTcpGetPeerAddress(RTSOCKET Sock, PRTNETADDR pAddr)
     913{
     914    union
     915    {
     916        struct sockaddr     Addr;
     917        struct sockaddr_in  Ipv4;
     918        struct sockaddr_in6 Ipv6;
     919    }               u;
     920#ifdef RT_OS_WINDOWS
     921    int             cbAddr = sizeof(u);
     922#else
     923    socklen_t       cbAddr = sizeof(u);
     924#endif
     925    RT_ZERO(u);
     926    if (!getpeername(Sock, &u.Addr, &cbAddr))
     927    {
     928        /*
     929         * Convert the address.
     930         */
     931        if (   cbAddr == sizeof(struct sockaddr_in)
     932            && u.Addr.sa_family == AF_INET)
     933        {
     934            RT_ZERO(*pAddr);
     935            pAddr->enmType      = RTNETADDRTYPE_IPV4;
     936            pAddr->uPort        = u.Ipv4.sin_port;
     937            pAddr->uAddr.IPv4.u = u.Ipv4.sin_addr.s_addr;
     938        }
     939#ifdef AF_INET6
     940        else if (   cbAddr == sizeof(struct sockaddr_in6)
     941                 && u.Addr.sa_family == AF_INET6)
     942        {
     943            RT_ZERO(*pAddr);
     944            pAddr->enmType            = RTNETADDRTYPE_IPV6;
     945            pAddr->uPort              = u.Ipv6.sin6_port;
     946            pAddr->uAddr.IPv6.au32[0] = u.Ipv6.sin6_addr.s6_addr32[0];
     947            pAddr->uAddr.IPv6.au32[1] = u.Ipv6.sin6_addr.s6_addr32[1];
     948            pAddr->uAddr.IPv6.au32[2] = u.Ipv6.sin6_addr.s6_addr32[2];
     949            pAddr->uAddr.IPv6.au32[3] = u.Ipv6.sin6_addr.s6_addr32[3];
     950        }
     951#endif
     952        else
     953            return VERR_NET_ADDRESS_FAMILY_NOT_SUPPORTED;
     954        return VINF_SUCCESS;
     955    }
     956    return rtTcpError();
     957}
     958
     959
    912960RTR3DECL(int) RTTcpClientConnect(const char *pszAddress, uint32_t uPort, PRTSOCKET pSock)
    913961{
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette