37 #ifndef RTPUDPV4TRANSMITTER_H 39 #define RTPUDPV4TRANSMITTER_H 41 #include "rtpconfig.h" 50 #ifdef RTP_SUPPORT_THREAD 51 #include <jthread/jmutex.h> 52 #endif // RTP_SUPPORT_THREAD 54 #define RTPUDPV4TRANS_HASHSIZE 8317 55 #define RTPUDPV4TRANS_DEFAULTPORTBASE 5000 57 #define RTPUDPV4TRANS_RTPRECEIVEBUFFER 32768 58 #define RTPUDPV4TRANS_RTCPRECEIVEBUFFER 32768 59 #define RTPUDPV4TRANS_RTPTRANSMITBUFFER 32768 60 #define RTPUDPV4TRANS_RTCPTRANSMITBUFFER 32768 134 void SetUseExistingSockets(SocketType rtpsocket, SocketType rtcpsocket) { rtpsock = rtpsocket; rtcpsock = rtcpsocket; useexistingsockets =
true; }
164 bool GetUseExistingSockets(SocketType &rtpsocket, SocketType &rtcpsocket)
const {
if (!useexistingsockets)
return false; rtpsocket = rtpsock; rtcpsocket = rtcpsock;
return true; }
172 uint32_t bindIP, mcastifaceIP;
173 std::list<uint32_t> localIPs;
174 uint8_t multicastTTL;
175 int rtpsendbuf, rtprecvbuf;
176 int rtcpsendbuf, rtcprecvbuf;
178 bool allowoddportbase;
179 uint16_t forcedrtcpport;
181 SocketType rtpsock, rtcpsock;
182 bool useexistingsockets;
189 portbase = RTPUDPV4TRANS_DEFAULTPORTBASE;
193 rtpsendbuf = RTPUDPV4TRANS_RTPTRANSMITBUFFER;
194 rtprecvbuf = RTPUDPV4TRANS_RTPRECEIVEBUFFER;
195 rtcpsendbuf = RTPUDPV4TRANS_RTCPTRANSMITBUFFER;
196 rtcprecvbuf = RTPUDPV4TRANS_RTCPRECEIVEBUFFER;
198 allowoddportbase =
false;
200 useexistingsockets =
false;
212 { localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; m_rtpPort = rtpport; m_rtcpPort = rtcpport; }
231 std::list<uint32_t> localIPlist;
232 SocketType rtpsocket,rtcpsocket;
233 uint16_t m_rtpPort, m_rtcpPort;
236 class JRTPLIB_IMPORTEXPORT RTPUDPv4Trans_GetHashIndex_IPv4Dest
239 static int GetIndex(
const RTPIPv4Destination &d) {
return d.GetIP()%RTPUDPV4TRANS_HASHSIZE; }
242 class JRTPLIB_IMPORTEXPORT RTPUDPv4Trans_GetHashIndex_uint32_t
245 static int GetIndex(
const uint32_t &k) {
return k%RTPUDPV4TRANS_HASHSIZE; }
248 #define RTPUDPV4TRANS_HEADERSIZE (20+8) 263 int Init(
bool treadsafe);
269 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
270 bool ComesFromThisTransmitter(
const RTPAddress *addr);
271 size_t GetHeaderOverhead() {
return RTPUDPV4TRANS_HEADERSIZE; }
274 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
277 int SendRTPData(
const void *data,
size_t len);
278 int SendRTCPData(
const void *data,
size_t len);
281 int DeleteDestination(
const RTPAddress &addr);
282 void ClearDestinations();
284 bool SupportsMulticasting();
285 int JoinMulticastGroup(
const RTPAddress &addr);
286 int LeaveMulticastGroup(
const RTPAddress &addr);
287 void LeaveAllMulticastGroups();
291 int DeleteFromIgnoreList(
const RTPAddress &addr);
292 void ClearIgnoreList();
294 int DeleteFromAcceptList(
const RTPAddress &addr);
295 void ClearAcceptList();
296 int SetMaximumPacketSize(
size_t s);
298 bool NewDataAvailable();
304 int CreateLocalIPList();
305 bool GetLocalIPList_Interfaces();
306 void GetLocalIPList_DNS();
307 void AddLoopbackAddress();
309 int PollSocket(
bool rtp);
310 int ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port);
311 int ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port);
312 #ifdef RTP_SUPPORT_IPV4MULTICAST 313 bool SetMulticastTTL(uint8_t ttl);
314 #endif // RTP_SUPPORT_IPV4MULTICAST 315 bool ShouldAcceptData(uint32_t srcip,uint16_t srcport);
316 void ClearAcceptIgnoreInfo();
321 SocketType rtpsock,rtcpsock;
322 uint32_t mcastifaceIP;
323 std::list<uint32_t> localIPs;
324 uint16_t m_rtpPort, m_rtcpPort;
325 uint8_t multicastTTL;
328 uint8_t *localhostname;
329 size_t localhostnamelength;
331 RTPHashTable<const RTPIPv4Destination,RTPUDPv4Trans_GetHashIndex_IPv4Dest,RTPUDPV4TRANS_HASHSIZE> destinations;
332 #ifdef RTP_SUPPORT_IPV4MULTICAST 333 RTPHashTable<const uint32_t,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> multicastgroups;
334 #endif // RTP_SUPPORT_IPV4MULTICAST 335 std::list<RTPRawPacket*> rawpacketlist;
337 bool supportsmulticasting;
343 PortInfo() { all =
false; }
346 std::list<uint16_t> portlist;
349 RTPKeyHashTable<const uint32_t,PortInfo*,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> acceptignoreinfo;
351 bool closesocketswhendone;
355 #ifdef RTP_SUPPORT_THREAD 356 jthread::JMutex mainmutex,waitmutex;
358 #endif // RTP_SUPPORT_THREAD 363 #endif // RTPUDPV4TRANSMITTER_H bool GetUseExistingSockets(SocketType &rtpsocket, SocketType &rtcpsocket) const
Returns true and fills in sockets if existing sockets were set using RTPUDPv4TransmissionParams::SetU...
Definition: rtpudpv4transmitter.h:164
void SetLocalIPList(std::list< uint32_t > &iplist)
Passes a list of IP addresses which will be used as the local IP addresses.
Definition: rtpudpv4transmitter.h:86
int GetRTPSendBuffer() const
Returns the RTP socket's send buffer size.
Definition: rtpudpv4transmitter.h:142
uint16_t GetRTCPPort() const
Returns the port number that the RTCP socket receives packets on.
Definition: rtpudpv4transmitter.h:229
This class is used by the transmission component to store the incoming RTP and RTCP data in...
Definition: rtprawpacket.h:51
Specifies the internal UDP over IPv4 transmitter.
Definition: rtptransmitter.h:72
RTPAbortDescriptors * GetCreatedAbortDescriptors() const
If non-null, this RTPAbortDescriptors instance will be used internally, which can be useful when crea...
Definition: rtpudpv4transmitter.h:169
Base class for transmission parameters.
Definition: rtptransmitter.h:229
SocketType GetRTCPSocket() const
Returns the socket descriptor used for receiving and transmitting RTCP packets.
Definition: rtpudpv4transmitter.h:223
int GetRTPReceiveBuffer() const
Returns the RTP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:145
Additional information about the UDP over IPv4 transmitter.
Definition: rtpudpv4transmitter.h:207
void SetForcedRTCPPort(uint16_t rtcpport)
Force the RTCP socket to use a specific port, not necessarily one more than the RTP port (set this to...
Definition: rtpudpv4transmitter.h:129
std::list< uint32_t > GetLocalIPList() const
Returns the list of IPv4 addresses the transmitter considers to be the local IP addresses.
Definition: rtpudpv4transmitter.h:217
int GetRTCPSendBuffer() const
Returns the RTCP socket's send buffer size.
Definition: rtpudpv4transmitter.h:148
void ClearLocalIPList()
Clears the list of local IP addresses.
Definition: rtpudpv4transmitter.h:92
Parameters for the UDP over IPv4 transmitter.
Definition: rtpudpv4transmitter.h:66
uint8_t GetMulticastTTL() const
Returns the multicast TTL which will be used (default is 1).
Definition: rtpudpv4transmitter.h:104
void SetRTPSendBuffer(int s)
Sets the RTP socket's send buffer size.
Definition: rtpudpv4transmitter.h:110
void SetCreatedAbortDescriptors(RTPAbortDescriptors *desc)
If non null, the specified abort descriptors will be used to cancel the function that's waiting for p...
Definition: rtpudpv4transmitter.h:139
This class is an abstract class which is used to specify destinations, multicast groups etc...
Definition: rtpaddress.h:50
void SetMulticastInterfaceIP(uint32_t ip)
Sets the multicast interface IP address.
Definition: rtpudpv4transmitter.h:75
uint32_t GetBindIP() const
Returns the IP address which will be used to bind the sockets.
Definition: rtpudpv4transmitter.h:95
SocketType GetRTPSocket() const
Returns the socket descriptor used for receiving and transmitting RTP packets.
Definition: rtpudpv4transmitter.h:220
uint16_t GetRTPPort() const
Returns the port number that the RTP socket receives packets on.
Definition: rtpudpv4transmitter.h:226
uint32_t GetMulticastInterfaceIP() const
Returns the multicast interface IP address.
Definition: rtpudpv4transmitter.h:98
uint16_t GetForcedRTCPPort() const
If non-zero, the specified port will be used to receive RTCP traffic.
Definition: rtpudpv4transmitter.h:160
An UDP over IPv4 transmission component.
Definition: rtpudpv4transmitter.h:257
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
void SetAllowOddPortbase(bool f)
Can be used to allow the RTP port base to be any number, not just even numbers.
Definition: rtpudpv4transmitter.h:125
void SetRTCPReceiveBuffer(int s)
Sets the RTCP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:119
Definition: rtpfaketransmitter.h:64
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
void SetUseExistingSockets(SocketType rtpsocket, SocketType rtcpsocket)
Use sockets that have already been created, no checks on port numbers will be done, and no buffer sizes will be set; you'll need to close the sockets yourself when done, it will not be done automatically.
Definition: rtpudpv4transmitter.h:134
void SetRTCPMultiplexing(bool f)
Enables or disables multiplexing RTCP traffic over the RTP channel, so that only a single port is use...
Definition: rtpudpv4transmitter.h:122
A memory manager.
Definition: rtpmemorymanager.h:150
void SetRTCPSendBuffer(int s)
Sets the RTCP socket's send buffer size.
Definition: rtpudpv4transmitter.h:116
void SetMulticastTTL(uint8_t mcastTTL)
Sets the multicast TTL to be used to mcastTTL.
Definition: rtpudpv4transmitter.h:83
void SetPortbase(uint16_t pbase)
Sets the RTP portbase to pbase, which has to be an even number unless RTPUDPv4TransmissionParams::Set...
Definition: rtpudpv4transmitter.h:80
int GetRTCPReceiveBuffer() const
Returns the RTCP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:151
const std::list< uint32_t > & GetLocalIPList() const
Returns the list of local IP addresses.
Definition: rtpudpv4transmitter.h:107
bool GetAllowOddPortbase() const
If true, any RTP portbase will be allowed, not just even numbers.
Definition: rtpudpv4transmitter.h:157
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:248
Helper class for several RTPTransmitter instances, to be able to cancel a call to 'select'...
Definition: rtpabortdescriptors.h:64
void SetBindIP(uint32_t ip)
Sets the IP address which is used to bind the sockets to ip.
Definition: rtpudpv4transmitter.h:72
bool GetRTCPMultiplexing() const
Returns a flag indicating if RTCP traffic will be multiplexed over the RTP channel.
Definition: rtpudpv4transmitter.h:154
uint16_t GetPortbase() const
Returns the RTP portbase which will be used (default is 5000).
Definition: rtpudpv4transmitter.h:101
void SetRTPReceiveBuffer(int s)
Sets the RTP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:113