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"
61 class RTPIPv6Destination
64 RTPIPv6Destination(in6_addr ip,uint16_t portbase)
66 memset(&rtpaddr,0,
sizeof(
struct sockaddr_in6));
67 memset(&rtcpaddr,0,
sizeof(
struct sockaddr_in6));
68 rtpaddr.sin6_family = AF_INET6;
69 rtpaddr.sin6_port = htons(portbase);
70 rtpaddr.sin6_addr = ip;
71 rtcpaddr.sin6_family = AF_INET6;
72 rtcpaddr.sin6_port = htons(portbase+1);
73 rtcpaddr.sin6_addr = ip;
75 in6_addr GetIP()
const {
return rtpaddr.sin6_addr; }
76 bool operator==(
const RTPIPv6Destination &src)
const
78 if (rtpaddr.sin6_port == src.rtpaddr.sin6_port && (memcmp(&(src.rtpaddr.sin6_addr),&(rtpaddr.sin6_addr),
sizeof(in6_addr)) == 0))
82 const struct sockaddr_in6 *GetRTPSockAddr()
const {
return &rtpaddr; }
83 const struct sockaddr_in6 *GetRTCPSockAddr()
const {
return &rtcpaddr; }
85 std::string GetDestinationString()
const;
88 struct sockaddr_in6 rtpaddr;
89 struct sockaddr_in6 rtcpaddr;
93 inline std::string RTPIPv6Destination::GetDestinationString()
const
97 uint16_t portbase = ntohs(rtpaddr.sin6_port);
99 for (i = 0,j = 0 ; j < 8 ; j++,i += 2)
101 ip16[j] = (((uint16_t)rtpaddr.sin6_addr.s6_addr[i])<<8);
102 ip16[j] |= ((uint16_t)rtpaddr.sin6_addr.s6_addr[i+1]);
104 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);
105 return std::string(str);
111 #endif // RTP_SUPPORT_IPV6
113 #endif // RTPIPV6DESTINATION_H