37 #ifndef RTPUDPV6TRANSMITTER_H 39 #define RTPUDPV6TRANSMITTER_H 41 #include "rtpconfig.h" 43 #ifdef RTP_SUPPORT_IPV6 54 #ifdef RTP_SUPPORT_THREAD 55 #include <jthread/jmutex.h> 56 #endif // RTP_SUPPORT_THREAD 58 #define RTPUDPV6TRANS_HASHSIZE 8317 59 #define RTPUDPV6TRANS_DEFAULTPORTBASE 5000 61 #define RTPUDPV6TRANS_RTPRECEIVEBUFFER 32768 62 #define RTPUDPV6TRANS_RTCPRECEIVEBUFFER 32768 63 #define RTPUDPV6TRANS_RTPTRANSMITBUFFER 32768 64 #define RTPUDPV6TRANS_RTCPTRANSMITBUFFER 32768 147 unsigned int mcastifidx;
148 std::list<in6_addr> localIPs;
149 uint8_t multicastTTL;
150 int rtpsendbuf, rtprecvbuf;
151 int rtcpsendbuf, rtcprecvbuf;
156 inline RTPUDPv6TransmissionParams::RTPUDPv6TransmissionParams()
159 portbase = RTPUDPV6TRANS_DEFAULTPORTBASE;
160 for (
int i = 0 ; i < 16 ; i++)
161 bindIP.s6_addr[i] = 0;
165 rtpsendbuf = RTPUDPV6TRANS_RTPTRANSMITBUFFER;
166 rtprecvbuf= RTPUDPV6TRANS_RTPRECEIVEBUFFER;
167 rtcpsendbuf = RTPUDPV6TRANS_RTCPTRANSMITBUFFER;
168 rtcprecvbuf = RTPUDPV6TRANS_RTCPRECEIVEBUFFER;
179 { localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; m_rtpPort = rtpport; m_rtcpPort = rtcpport; }
198 std::list<in6_addr> localIPlist;
199 SocketType rtpsocket,rtcpsocket;
200 uint16_t m_rtpPort, m_rtcpPort;
203 class JRTPLIB_IMPORTEXPORT RTPUDPv6Trans_GetHashIndex_IPv6Dest
206 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; }
209 class JRTPLIB_IMPORTEXPORT RTPUDPv6Trans_GetHashIndex_in6_addr
212 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; }
215 #define RTPUDPV6TRANS_HEADERSIZE (40+8) 230 int Init(
bool treadsafe);
236 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
237 bool ComesFromThisTransmitter(
const RTPAddress *addr);
238 size_t GetHeaderOverhead() {
return RTPUDPV6TRANS_HEADERSIZE; }
241 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
244 int SendRTPData(
const void *data,
size_t len);
245 int SendRTCPData(
const void *data,
size_t len);
248 int DeleteDestination(
const RTPAddress &addr);
249 void ClearDestinations();
251 bool SupportsMulticasting();
252 int JoinMulticastGroup(
const RTPAddress &addr);
253 int LeaveMulticastGroup(
const RTPAddress &addr);
254 void LeaveAllMulticastGroups();
258 int DeleteFromIgnoreList(
const RTPAddress &addr);
259 void ClearIgnoreList();
261 int DeleteFromAcceptList(
const RTPAddress &addr);
262 void ClearAcceptList();
263 int SetMaximumPacketSize(
size_t s);
265 bool NewDataAvailable();
271 int CreateLocalIPList();
272 bool GetLocalIPList_Interfaces();
273 void GetLocalIPList_DNS();
274 void AddLoopbackAddress();
276 int PollSocket(
bool rtp);
277 int ProcessAddAcceptIgnoreEntry(in6_addr ip,uint16_t port);
278 int ProcessDeleteAcceptIgnoreEntry(in6_addr ip,uint16_t port);
279 #ifdef RTP_SUPPORT_IPV6MULTICAST 280 bool SetMulticastTTL(uint8_t ttl);
281 #endif // RTP_SUPPORT_IPV6MULTICAST 282 bool ShouldAcceptData(in6_addr srcip,uint16_t srcport);
283 void ClearAcceptIgnoreInfo();
288 SocketType rtpsock,rtcpsock;
290 unsigned int mcastifidx;
291 std::list<in6_addr> localIPs;
293 uint8_t multicastTTL;
296 uint8_t *localhostname;
297 size_t localhostnamelength;
299 RTPHashTable<const RTPIPv6Destination,RTPUDPv6Trans_GetHashIndex_IPv6Dest,RTPUDPV6TRANS_HASHSIZE> destinations;
300 #ifdef RTP_SUPPORT_IPV6MULTICAST 301 RTPHashTable<const in6_addr,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> multicastgroups;
302 #endif // RTP_SUPPORT_IPV6MULTICAST 303 std::list<RTPRawPacket*> rawpacketlist;
305 bool supportsmulticasting;
311 PortInfo() { all =
false; }
314 std::list<uint16_t> portlist;
317 RTPKeyHashTable<const in6_addr,PortInfo*,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> acceptignoreinfo;
321 #ifdef RTP_SUPPORT_THREAD 322 jthread::JMutex mainmutex,waitmutex;
324 #endif // RTP_SUPPORT_THREAD 329 #endif // RTP_SUPPORT_IPV6 331 #endif // RTPUDPV6TRANSMITTER_H void SetBindIP(in6_addr ip)
Sets the IP address which is used to bind the sockets to ip.
Definition: rtpudpv6transmitter.h:76
This class is used by the transmission component to store the incoming RTP and RTCP data in...
Definition: rtprawpacket.h:51
Base class for transmission parameters.
Definition: rtptransmitter.h:229
SocketType GetRTCPSocket() const
Returns the socket descriptor used for receiving and transmitting RTCP packets.
Definition: rtpudpv6transmitter.h:190
void SetRTCPSendBuffer(int s)
Sets the RTCP socket's send buffer size.
Definition: rtpudpv6transmitter.h:118
uint16_t GetRTPPort() const
Returns the port number that the RTP socket receives packets on.
Definition: rtpudpv6transmitter.h:193
uint16_t GetPortbase() const
Returns the RTP portbase which will be used (default is 5000).
Definition: rtpudpv6transmitter.h:103
SocketType GetRTPSocket() const
Returns the socket descriptor used for receiving and transmitting RTP packets.
Definition: rtpudpv6transmitter.h:187
int GetRTPReceiveBuffer() const
Returns the RTP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:132
void SetRTPSendBuffer(int s)
Sets the RTP socket's send buffer size.
Definition: rtpudpv6transmitter.h:112
Additional information about the UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:174
int GetRTCPReceiveBuffer() const
Returns the RTCP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:138
This class is an abstract class which is used to specify destinations, multicast groups etc...
Definition: rtpaddress.h:50
void SetMulticastInterfaceIndex(unsigned int idx)
Sets the multicast interface index.
Definition: rtpudpv6transmitter.h:79
An UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:224
void SetMulticastTTL(uint8_t mcastTTL)
Sets the multicast TTL to be used to mcastTTL.
Definition: rtpudpv6transmitter.h:85
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:88
Abstract class from which actual transmission components should be derived.
Definition: rtptransmitter.h:62
ReceiveMode
Three kind of receive modes can be specified.
Definition: rtptransmitter.h:80
const std::list< in6_addr > & GetLocalIPList() const
Returns the list of local IP addresses.
Definition: rtpudpv6transmitter.h:109
Definition: rtpfaketransmitter.h:64
void SetRTPReceiveBuffer(int s)
Sets the RTP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:115
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
A memory manager.
Definition: rtpmemorymanager.h:150
in6_addr GetBindIP() const
Returns the IP address which will be used to bind the sockets.
Definition: rtpudpv6transmitter.h:97
void SetRTCPReceiveBuffer(int s)
Sets the RTCP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:121
uint8_t GetMulticastTTL() const
Returns the multicast TTL which will be used (default is 1).
Definition: rtpudpv6transmitter.h:106
void ClearLocalIPList()
Clears the list of local IP addresses.
Definition: rtpudpv6transmitter.h:94
Specifies the internal UDP over IPv6 transmitter.
Definition: rtptransmitter.h:73
unsigned int GetMulticastInterfaceIndex() const
Returns the multicast interface index.
Definition: rtpudpv6transmitter.h:100
int GetRTPSendBuffer() const
Returns the RTP socket's send buffer size.
Definition: rtpudpv6transmitter.h:129
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:248
Parameters for the UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:70
Helper class for several RTPTransmitter instances, to be able to cancel a call to 'select'...
Definition: rtpabortdescriptors.h:64
uint16_t GetRTCPPort() const
Returns the port number that the RTCP socket receives packets on.
Definition: rtpudpv6transmitter.h:196
int GetRTCPSendBuffer() const
Returns the RTCP socket's send buffer size.
Definition: rtpudpv6transmitter.h:135
RTPAbortDescriptors * GetCreatedAbortDescriptors() const
If non-null, this RTPAbortDescriptors instance will be used internally, which can be useful when crea...
Definition: rtpudpv6transmitter.h:143
std::list< in6_addr > GetLocalIPList() const
Returns the list of IPv6 addresses the transmitter considers to be the local IP addresses.
Definition: rtpudpv6transmitter.h:184
void SetPortbase(uint16_t pbase)
Sets the RTP portbase to pbase.
Definition: rtpudpv6transmitter.h:82
void SetCreatedAbortDescriptors(RTPAbortDescriptors *desc)
If non null, the specified abort descriptors will be used to cancel the function that's waiting for p...
Definition: rtpudpv6transmitter.h:126