37 #ifndef RTPIPV6DESTINATION_H
39 #define RTPIPV6DESTINATION_H
41 #include "rtpconfig.h"
43 #ifdef RTP_SUPPORT_IPV6
48 #include <netinet/in.h>
49 #include <arpa/inet.h>
50 #include <sys/socket.h>
53 #include "rtpdefines.h"
58 class RTPIPv6Destination
61 RTPIPv6Destination(in6_addr ip,uint16_t portbase)
63 memset(&rtpaddr,0,
sizeof(
struct sockaddr_in6));
64 memset(&rtcpaddr,0,
sizeof(
struct sockaddr_in6));
65 rtpaddr.sin6_family = AF_INET6;
66 rtpaddr.sin6_port = htons(portbase);
67 rtpaddr.sin6_addr = ip;
68 rtcpaddr.sin6_family = AF_INET6;
69 rtcpaddr.sin6_port = htons(portbase+1);
70 rtcpaddr.sin6_addr = ip;
72 in6_addr GetIP()
const {
return rtpaddr.sin6_addr; }
73 bool operator==(
const RTPIPv6Destination &src)
const
75 if (rtpaddr.sin6_port == src.rtpaddr.sin6_port && (memcmp(&(src.rtpaddr.sin6_addr),&(rtpaddr.sin6_addr),
sizeof(in6_addr)) == 0))
79 const struct sockaddr_in6 *GetRTPSockAddr()
const {
return &rtpaddr; }
80 const struct sockaddr_in6 *GetRTCPSockAddr()
const {
return &rtcpaddr; }
82 std::string GetDestinationString()
const;
85 struct sockaddr_in6 rtpaddr;
86 struct sockaddr_in6 rtcpaddr;
90 inline std::string RTPIPv6Destination::GetDestinationString()
const
94 uint16_t portbase = ntohs(rtpaddr.sin6_port);
96 for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
98 ip16[j] = (((uint16_t)rtpaddr.sin6_addr.s6_addr[i])<<8);
99 ip16[j] |= ((uint16_t)rtpaddr.sin6_addr.s6_addr[i+1]);
101 RTP_SNPRINTF(str,48,
"%04X:%04X:%04X:%04X:%04X:%04X:%04X:%04X/%d",(
int)ip16[0],(
int)ip16[1],(
int)ip16[2],(
int)ip16[3],(
int)ip16[4],(
int)ip16[5],(
int)ip16[6],(
int)ip16[7],(
int)portbase);
102 return std::string(str);
106 #endif // RTP_SUPPORT_IPV6
108 #endif // RTPIPV6DESTINATION_H