Changeset 26588 in vbox
- Timestamp:
- Feb 16, 2010 5:02:59 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
include/iprt/net.h (modified) (3 diffs)
-
include/iprt/tcp.h (modified) (2 diffs)
-
src/VBox/Runtime/common/string/strformatrt.cpp (modified) (5 diffs)
-
src/VBox/Runtime/r3/tcp.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/net.h
r25645 r26588 58 58 typedef RTUINT128U RTNETADDRIPV6; 59 59 AssertCompileSize(RTNETADDRIPV6, 16); 60 /** Pointer to a IPv 4address. */60 /** Pointer to a IPv6 address. */ 61 61 typedef RTNETADDRIPV6 *PRTNETADDRIPV6; 62 /** Pointer to a const IPv 4address. */62 /** Pointer to a const IPv6 address. */ 63 63 typedef RTNETADDRIPV6 const *PCRTNETADDRIPV6; 64 64 … … 82 82 83 83 /** 84 * Address union. 84 * Network address union. 85 * 86 * @remarks The size of this structure may change in the future. 85 87 */ 86 88 typedef union RTNETADDRU … … 109 111 typedef RTNETADDRU const *PCRTNETADDRU; 110 112 113 /** 114 * Network address type. 115 * 116 * @remarks The value assignments may change in the future. 117 */ 118 typedef enum RTNETADDRTYPE 119 { 120 /** The invalid 0 entry. */ 121 RTNETADDRTYPE_INVALID = 0, 122 /** IP version 4. */ 123 RTNETADDRTYPE_IPV4, 124 /** IP version 6. */ 125 RTNETADDRTYPE_IPV6, 126 /** IPX. */ 127 RTNETADDRTYPE_IPX, 128 /** MAC address. */ 129 RTNETADDRTYPE_MAC, 130 /** The end of the valid values. */ 131 RTNETADDRTYPE_END, 132 /** The usual 32-bit hack. */ 133 RTNETADDRTYPE_32_BIT_HACK = 0x7fffffff 134 } RTNETADDRTYPE; 135 /** Pointer to a network address type. */ 136 typedef RTNETADDRTYPE *PRTNETADDRTYPE; 137 /** Pointer to a const network address type. */ 138 typedef RTNETADDRTYPE const *PCRTNETADDRTYPE; 139 140 /** 141 * Network address. 142 * 143 * @remarks The size and type values may change. 144 */ 145 typedef struct RTNETADDR 146 { 147 /** The address union. */ 148 RTNETADDRU uAddr; 149 /** Indicates which view of @a u that is valid. */ 150 RTNETADDRTYPE enmType; 151 /** The port number for IPv4 and IPv6 addresses. This is set to 152 * RTNETADDR_NA_PORT if not applicable. */ 153 uint32_t uPort; 154 } RTNETADDR; 155 /** Pointer to a network address. */ 156 typedef RTNETADDR *PRTNETADDR; 157 /** Pointer to a const network address. */ 158 typedef RTNETADDR const *PCRTNETADDR; 159 160 /** The not applicable value of RTNETADDR::uPort value use to inid. */ 161 #define RTNETADDR_PORT_NA UINT32_MAX 111 162 112 163 /** -
trunk/include/iprt/tcp.h
r25724 r26588 34 34 #include <iprt/types.h> 35 35 #include <iprt/thread.h> 36 #include <iprt/net.h> 36 37 37 38 #ifdef IN_RING0 … … 224 225 #endif 225 226 227 /** 228 * Gets the address of the other party. 229 * 230 * @returns IPRT status code. 231 * @param Sock Socket descriptor. 232 * @param pAddr Where to store the peer address on success. 233 */ 234 RTR3DECL(int) RTTcpGetPeerAddress(RTSOCKET Sock, PRTNETADDR pAddr); 226 235 227 236 /** @} */ -
trunk/src/VBox/Runtime/common/string/strformatrt.cpp
r26351 r26588 52 52 * - \%RTldrm - Takes a #RTLDRMOD value. 53 53 * - \%RTmac - Takes a #PCRTMAC pointer. 54 * - \%RTnaddr - Takes a #PCRTNETADDR value. 54 55 * - \%RTnaipv4 - Takes a #RTNETADDRIPV4 value. 55 56 * - \%RTnaipv6 - Takes a #PCRTNETADDRIPV6 value. … … 215 216 RTSF_IPV6, 216 217 RTSF_MAC, 218 RTSF_NETADDR, 217 219 RTSF_UUID 218 220 } RTSF; … … 266 268 { STRMEM("Tldrm"), sizeof(RTLDRMOD), 16, RTSF_INTW, 0 }, 267 269 { STRMEM("Tmac"), sizeof(PCRTMAC), 16, RTSF_MAC, 0 }, 270 { STRMEM("Tnaddr"), sizeof(PCRTNETADDR), 10, RTSF_NETADDR,0 }, 268 271 { STRMEM("Tnaipv4"), sizeof(RTNETADDRIPV4), 10, RTSF_IPV4, 0 }, 269 272 { STRMEM("Tnaipv6"), sizeof(PCRTNETADDRIPV6),16, RTSF_IPV6, 0 }, … … 316 319 RTNETADDRIPV4 Ipv4Addr; 317 320 PCRTNETADDRIPV6 pIpv6Addr; 321 PCRTNETADDR pNetAddr; 318 322 PCRTUUID pUuid; 319 323 } u; … … 532 536 } 533 537 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 534 619 case RTSF_UUID: 535 620 { -
trunk/src/VBox/Runtime/r3/tcp.cpp
r26252 r26588 910 910 911 911 912 RTR3DECL(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 912 960 RTR3DECL(int) RTTcpClientConnect(const char *pszAddress, uint32_t uPort, PRTSOCKET pSock) 913 961 {
Note:
See TracChangeset
for help on using the changeset viewer.

