37 #ifndef RTPUDPV6TRANSMITTER_H
39 #define RTPUDPV6TRANSMITTER_H
41 #include "rtpconfig.h"
43 #ifdef RTP_SUPPORT_IPV6
49 #if ! (defined(WIN32) || defined(_WIN32_WCE))
50 #include <netinet/in.h>
55 #ifdef RTP_SUPPORT_THREAD
57 #endif // RTP_SUPPORT_THREAD
59 #define RTPUDPV6TRANS_HASHSIZE 8317
60 #define RTPUDPV6TRANS_DEFAULTPORTBASE 5000
106 unsigned int mcastifidx;
107 std::list<in6_addr> localIPs;
108 uint8_t multicastTTL;
115 #if ! (defined(WIN32) || defined(_WIN32_WCE))
120 { localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; }
122 ~RTPUDPv6TransmissionInfo() { }
126 #if ! (defined(WIN32) || defined(_WIN32_WCE))
137 std::list<in6_addr> localIPlist;
138 #if ! (defined(WIN32) || defined(_WIN32_WCE))
139 int rtpsocket,rtcpsocket;
141 SOCKET rtpsocket,rtcpsocket;
145 class RTPUDPv6Trans_GetHashIndex_IPv6Dest
148 static int GetIndex(
const RTPIPv6Destination &d) { in6_addr ip = d.GetIP();
return ((((uint32_t)ip.s6_addr[12])<<24)|(((uint32_t)ip.s6_addr[13])<<16)|(((uint32_t)ip.s6_addr[14])<<8)|((uint32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
151 class RTPUDPv6Trans_GetHashIndex_in6_addr
154 static int GetIndex(
const in6_addr &ip) {
return ((((uint32_t)ip.s6_addr[12])<<24)|(((uint32_t)ip.s6_addr[13])<<16)|(((uint32_t)ip.s6_addr[14])<<8)|((uint32_t)ip.s6_addr[15]))%RTPUDPV6TRANS_HASHSIZE; }
157 #define RTPUDPV6TRANS_HEADERSIZE (40+8)
172 int Init(
bool treadsafe);
177 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
178 bool ComesFromThisTransmitter(
const RTPAddress *addr);
179 size_t GetHeaderOverhead() {
return RTPUDPV6TRANS_HEADERSIZE; }
182 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
185 int SendRTPData(
const void *data,
size_t len);
186 int SendRTCPData(
const void *data,
size_t len);
189 int DeleteDestination(
const RTPAddress &addr);
190 void ClearDestinations();
192 bool SupportsMulticasting();
193 int JoinMulticastGroup(
const RTPAddress &addr);
194 int LeaveMulticastGroup(
const RTPAddress &addr);
195 void LeaveAllMulticastGroups();
199 int DeleteFromIgnoreList(
const RTPAddress &addr);
200 void ClearIgnoreList();
202 int DeleteFromAcceptList(
const RTPAddress &addr);
203 void ClearAcceptList();
204 int SetMaximumPacketSize(
size_t s);
206 bool NewDataAvailable();
212 int CreateLocalIPList();
213 bool GetLocalIPList_Interfaces();
214 void GetLocalIPList_DNS();
215 void AddLoopbackAddress();
217 int PollSocket(
bool rtp);
218 int ProcessAddAcceptIgnoreEntry(in6_addr ip,uint16_t port);
219 int ProcessDeleteAcceptIgnoreEntry(in6_addr ip,uint16_t port);
220 #ifdef RTP_SUPPORT_IPV6MULTICAST
221 bool SetMulticastTTL(uint8_t ttl);
222 #endif // RTP_SUPPORT_IPV6MULTICAST
223 bool ShouldAcceptData(in6_addr srcip,uint16_t srcport);
224 void ClearAcceptIgnoreInfo();
229 #if (defined(WIN32) || defined(_WIN32_WCE))
230 SOCKET rtpsock,rtcpsock;
231 #else // not using winsock
232 int rtpsock,rtcpsock;
235 unsigned int mcastifidx;
236 std::list<in6_addr> localIPs;
238 uint8_t multicastTTL;
241 uint8_t *localhostname;
242 size_t localhostnamelength;
244 RTPHashTable<const RTPIPv6Destination,RTPUDPv6Trans_GetHashIndex_IPv6Dest,RTPUDPV6TRANS_HASHSIZE> destinations;
245 #ifdef RTP_SUPPORT_IPV6MULTICAST
246 RTPHashTable<const in6_addr,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> multicastgroups;
247 #endif // RTP_SUPPORT_IPV6MULTICAST
248 std::list<RTPRawPacket*> rawpacketlist;
250 bool supportsmulticasting;
256 PortInfo() { all =
false; }
259 std::list<uint16_t> portlist;
262 RTPKeyHashTable<const in6_addr,PortInfo*,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> acceptignoreinfo;
265 #if (defined(WIN32) || defined(_WIN32_WCE))
270 int CreateAbortDescriptors();
271 void DestroyAbortDescriptors();
272 void AbortWaitInternal();
273 #ifdef RTP_SUPPORT_THREAD
274 JMutex mainmutex,waitmutex;
276 #endif // RTP_SUPPORT_THREAD
279 #endif // RTP_SUPPORT_IPV6
281 #endif // RTPUDPV6TRANSMITTER_H
uint8_t GetMulticastTTL() const
Returns the multicast TTL which will be used (default is 1).
Definition: rtpudpv6transmitter.h:99
void SetMulticastTTL(uint8_t mcastTTL)
Sets the multicast TTL to be used to mcastTTL.
Definition: rtpudpv6transmitter.h:78
Parameters for the UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:63
void SetMulticastInterfaceIndex(unsigned int idx)
Sets the multicast interface index.
Definition: rtpudpv6transmitter.h:72
in6_addr GetBindIP() const
Returns the IP address which will be used to bind the sockets.
Definition: rtpudpv6transmitter.h:90
A memory manager.
Definition: rtpmemorymanager.h:144
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:77
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:236
Specifies the internal UDP over IPv6 transmitter.
Definition: rtptransmitter.h:68
int GetRTCPSocket() const
Returns the socket descriptor used for receiving and transmitting RTCP packets.
Definition: rtpudpv6transmitter.h:131
This class is used by the transmission component to store the incoming RTP and RTCP data in...
Definition: rtprawpacket.h:48
An UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:166
ReceiveMode
Three kind of receive modes can be specified.
Definition: rtptransmitter.h:73
Abstract class from which actual transmission components should be derived.
Definition: rtptransmitter.h:57
void SetBindIP(in6_addr ip)
Sets the IP address which is used to bind the sockets to ip.
Definition: rtpudpv6transmitter.h:69
This class is an abstract class which is used to specify destinations, multicast groups etc...
Definition: rtpaddress.h:47
void ClearLocalIPList()
Clears the list of local IP addresses.
Definition: rtpudpv6transmitter.h:87
const std::list< in6_addr > & GetLocalIPList() const
Returns the list of local IP addresses.
Definition: rtpudpv6transmitter.h:102
std::list< in6_addr > GetLocalIPList() const
Returns the list of IPv6 addresses the transmitter considers to be the local IP addresses.
Definition: rtpudpv6transmitter.h:125
void SetPortbase(uint16_t pbase)
Sets the RTP portbase to pbase.
Definition: rtpudpv6transmitter.h:75
uint16_t GetPortbase() const
Returns the RTP portbase which will be used (default is 5000).
Definition: rtpudpv6transmitter.h:96
Additional information about the UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:112
void SetLocalIPList(std::list< in6_addr > &iplist)
Passes a list of IP addresses which will be used as the local IP addresses.
Definition: rtpudpv6transmitter.h:81
int GetRTPSocket() const
Returns the socket descriptor used for receiving and transmitting RTP packets.
Definition: rtpudpv6transmitter.h:128
Base class for transmission parameters.
Definition: rtptransmitter.h:217
unsigned int GetMulticastInterfaceIndex() const
Returns the multicast interface index.
Definition: rtpudpv6transmitter.h:93