37 #ifndef RTPUDPV6TRANSMITTER_H
39 #define RTPUDPV6TRANSMITTER_H
41 #include "rtpconfig.h"
43 #ifdef RTP_SUPPORT_IPV6
53 #ifdef RTP_SUPPORT_THREAD
54 #include <jthread/jmutex.h>
55 #endif // RTP_SUPPORT_THREAD
57 #define RTPUDPV6TRANS_HASHSIZE 8317
58 #define RTPUDPV6TRANS_DEFAULTPORTBASE 5000
60 #define RTPUDPV6TRANS_RTPRECEIVEBUFFER 32768
61 #define RTPUDPV6TRANS_RTCPRECEIVEBUFFER 32768
62 #define RTPUDPV6TRANS_RTPTRANSMITBUFFER 32768
63 #define RTPUDPV6TRANS_RTCPTRANSMITBUFFER 32768
72 RTPUDPv6TransmissionParams():
RTPTransmissionParams(
RTPTransmitter::IPv6UDPProto) { portbase = RTPUDPV6TRANS_DEFAULTPORTBASE;
for (
int i = 0 ; i < 16 ; i++) bindIP.s6_addr[i] = 0; multicastTTL = 1; mcastifidx = 0; rtpsendbuf = RTPUDPV6TRANS_RTPTRANSMITBUFFER; rtprecvbuf= RTPUDPV6TRANS_RTPRECEIVEBUFFER; rtcpsendbuf = RTPUDPV6TRANS_RTCPTRANSMITBUFFER; rtcprecvbuf = RTPUDPV6TRANS_RTCPRECEIVEBUFFER; }
136 unsigned int mcastifidx;
137 std::list<in6_addr> localIPs;
138 uint8_t multicastTTL;
139 int rtpsendbuf, rtprecvbuf;
140 int rtcpsendbuf, rtcprecvbuf;
148 { localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; }
161 std::list<in6_addr> localIPlist;
162 SocketType rtpsocket,rtcpsocket;
165 class JRTPLIB_IMPORTEXPORT RTPUDPv6Trans_GetHashIndex_IPv6Dest
168 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; }
171 class JRTPLIB_IMPORTEXPORT RTPUDPv6Trans_GetHashIndex_in6_addr
174 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; }
177 #define RTPUDPV6TRANS_HEADERSIZE (40+8)
192 int Init(
bool treadsafe);
198 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
199 bool ComesFromThisTransmitter(
const RTPAddress *addr);
200 size_t GetHeaderOverhead() {
return RTPUDPV6TRANS_HEADERSIZE; }
203 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
206 int SendRTPData(
const void *data,
size_t len);
207 int SendRTCPData(
const void *data,
size_t len);
210 int DeleteDestination(
const RTPAddress &addr);
211 void ClearDestinations();
213 bool SupportsMulticasting();
214 int JoinMulticastGroup(
const RTPAddress &addr);
215 int LeaveMulticastGroup(
const RTPAddress &addr);
216 void LeaveAllMulticastGroups();
220 int DeleteFromIgnoreList(
const RTPAddress &addr);
221 void ClearIgnoreList();
223 int DeleteFromAcceptList(
const RTPAddress &addr);
224 void ClearAcceptList();
225 int SetMaximumPacketSize(
size_t s);
227 bool NewDataAvailable();
233 int CreateLocalIPList();
234 bool GetLocalIPList_Interfaces();
235 void GetLocalIPList_DNS();
236 void AddLoopbackAddress();
238 int PollSocket(
bool rtp);
239 int ProcessAddAcceptIgnoreEntry(in6_addr ip,uint16_t port);
240 int ProcessDeleteAcceptIgnoreEntry(in6_addr ip,uint16_t port);
241 #ifdef RTP_SUPPORT_IPV6MULTICAST
242 bool SetMulticastTTL(uint8_t ttl);
243 #endif // RTP_SUPPORT_IPV6MULTICAST
244 bool ShouldAcceptData(in6_addr srcip,uint16_t srcport);
245 void ClearAcceptIgnoreInfo();
250 SocketType rtpsock,rtcpsock;
252 unsigned int mcastifidx;
253 std::list<in6_addr> localIPs;
255 uint8_t multicastTTL;
258 uint8_t *localhostname;
259 size_t localhostnamelength;
261 RTPHashTable<const RTPIPv6Destination,RTPUDPv6Trans_GetHashIndex_IPv6Dest,RTPUDPV6TRANS_HASHSIZE> destinations;
262 #ifdef RTP_SUPPORT_IPV6MULTICAST
263 RTPHashTable<const in6_addr,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> multicastgroups;
264 #endif // RTP_SUPPORT_IPV6MULTICAST
265 std::list<RTPRawPacket*> rawpacketlist;
267 bool supportsmulticasting;
273 PortInfo() { all =
false; }
276 std::list<uint16_t> portlist;
279 RTPKeyHashTable<const in6_addr,PortInfo*,RTPUDPv6Trans_GetHashIndex_in6_addr,RTPUDPV6TRANS_HASHSIZE> acceptignoreinfo;
282 SocketType abortdesc[2];
284 int CreateAbortDescriptors();
285 void DestroyAbortDescriptors();
286 void AbortWaitInternal();
287 #ifdef RTP_SUPPORT_THREAD
288 jthread::JMutex mainmutex,waitmutex;
290 #endif // RTP_SUPPORT_THREAD
295 #endif // RTP_SUPPORT_IPV6
297 #endif // RTPUDPV6TRANSMITTER_H
void SetBindIP(in6_addr ip)
Sets the IP address which is used to bind the sockets to ip.
Definition: rtpudpv6transmitter.h:75
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:228
SocketType GetRTCPSocket() const
Returns the socket descriptor used for receiving and transmitting RTCP packets.
Definition: rtpudpv6transmitter.h:159
void SetRTCPSendBuffer(int s)
Sets the RTCP socket's send buffer size.
Definition: rtpudpv6transmitter.h:117
uint16_t GetPortbase() const
Returns the RTP portbase which will be used (default is 5000).
Definition: rtpudpv6transmitter.h:102
SocketType GetRTPSocket() const
Returns the socket descriptor used for receiving and transmitting RTP packets.
Definition: rtpudpv6transmitter.h:156
int GetRTPReceiveBuffer() const
Returns the RTP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:126
void SetRTPSendBuffer(int s)
Sets the RTP socket's send buffer size.
Definition: rtpudpv6transmitter.h:111
Additional information about the UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:144
int GetRTCPReceiveBuffer() const
Returns the RTCP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:132
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:78
An UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:186
void SetMulticastTTL(uint8_t mcastTTL)
Sets the multicast TTL to be used to mcastTTL.
Definition: rtpudpv6transmitter.h:84
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:87
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:79
const std::list< in6_addr > & GetLocalIPList() const
Returns the list of local IP addresses.
Definition: rtpudpv6transmitter.h:108
void SetRTPReceiveBuffer(int s)
Sets the RTP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:114
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:96
void SetRTCPReceiveBuffer(int s)
Sets the RTCP socket's receive buffer size.
Definition: rtpudpv6transmitter.h:120
uint8_t GetMulticastTTL() const
Returns the multicast TTL which will be used (default is 1).
Definition: rtpudpv6transmitter.h:105
void ClearLocalIPList()
Clears the list of local IP addresses.
Definition: rtpudpv6transmitter.h:93
Specifies the internal UDP over IPv6 transmitter.
Definition: rtptransmitter.h:73
unsigned int GetMulticastInterfaceIndex() const
Returns the multicast interface index.
Definition: rtpudpv6transmitter.h:99
int GetRTPSendBuffer() const
Returns the RTP socket's send buffer size.
Definition: rtpudpv6transmitter.h:123
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:247
Parameters for the UDP over IPv6 transmitter.
Definition: rtpudpv6transmitter.h:69
int GetRTCPSendBuffer() const
Returns the RTCP socket's send buffer size.
Definition: rtpudpv6transmitter.h:129
std::list< in6_addr > GetLocalIPList() const
Returns the list of IPv6 addresses the transmitter considers to be the local IP addresses.
Definition: rtpudpv6transmitter.h:153
void SetPortbase(uint16_t pbase)
Sets the RTP portbase to pbase.
Definition: rtpudpv6transmitter.h:81