37 #ifndef RTPUDPV4TRANSMITTER_H
39 #define RTPUDPV4TRANSMITTER_H
41 #include "rtpconfig.h"
48 #ifdef RTP_SUPPORT_THREAD
49 #include <jthread/jmutex.h>
50 #endif // RTP_SUPPORT_THREAD
52 #define RTPUDPV4TRANS_HASHSIZE 8317
53 #define RTPUDPV4TRANS_DEFAULTPORTBASE 5000
55 #define RTPUDPV4TRANS_RTPRECEIVEBUFFER 32768
56 #define RTPUDPV4TRANS_RTCPRECEIVEBUFFER 32768
57 #define RTPUDPV4TRANS_RTPTRANSMITBUFFER 32768
58 #define RTPUDPV4TRANS_RTCPTRANSMITBUFFER 32768
130 uint32_t bindIP, mcastifaceIP;
131 std::list<uint32_t> localIPs;
132 uint8_t multicastTTL;
133 int rtpsendbuf, rtprecvbuf;
134 int rtcpsendbuf, rtcprecvbuf;
141 #if ! (defined(WIN32) || defined(_WIN32_WCE))
146 { localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; }
148 ~RTPUDPv4TransmissionInfo() { }
152 #if ! (defined(WIN32) || defined(_WIN32_WCE))
163 std::list<uint32_t> localIPlist;
164 #if ! (defined(WIN32) || defined(_WIN32_WCE))
165 int rtpsocket,rtcpsocket;
167 SOCKET rtpsocket,rtcpsocket;
171 class RTPUDPv4Trans_GetHashIndex_IPv4Dest
174 static int GetIndex(
const RTPIPv4Destination &d) {
return d.GetIP()%RTPUDPV4TRANS_HASHSIZE; }
177 class RTPUDPv4Trans_GetHashIndex_uint32_t
180 static int GetIndex(
const uint32_t &k) {
return k%RTPUDPV4TRANS_HASHSIZE; }
183 #define RTPUDPV4TRANS_HEADERSIZE (20+8)
198 int Init(
bool treadsafe);
204 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
205 bool ComesFromThisTransmitter(
const RTPAddress *addr);
206 size_t GetHeaderOverhead() {
return RTPUDPV4TRANS_HEADERSIZE; }
209 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
212 int SendRTPData(
const void *data,
size_t len);
213 int SendRTCPData(
const void *data,
size_t len);
216 int DeleteDestination(
const RTPAddress &addr);
217 void ClearDestinations();
219 bool SupportsMulticasting();
220 int JoinMulticastGroup(
const RTPAddress &addr);
221 int LeaveMulticastGroup(
const RTPAddress &addr);
222 void LeaveAllMulticastGroups();
226 int DeleteFromIgnoreList(
const RTPAddress &addr);
227 void ClearIgnoreList();
229 int DeleteFromAcceptList(
const RTPAddress &addr);
230 void ClearAcceptList();
231 int SetMaximumPacketSize(
size_t s);
233 bool NewDataAvailable();
239 int CreateLocalIPList();
240 bool GetLocalIPList_Interfaces();
241 void GetLocalIPList_DNS();
242 void AddLoopbackAddress();
244 int PollSocket(
bool rtp);
245 int ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port);
246 int ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port);
247 #ifdef RTP_SUPPORT_IPV4MULTICAST
248 bool SetMulticastTTL(uint8_t ttl);
249 #endif // RTP_SUPPORT_IPV4MULTICAST
250 bool ShouldAcceptData(uint32_t srcip,uint16_t srcport);
251 void ClearAcceptIgnoreInfo();
256 #if (defined(WIN32) || defined(_WIN32_WCE))
257 SOCKET rtpsock,rtcpsock;
258 #else // not using winsock
259 int rtpsock,rtcpsock;
261 uint32_t bindIP, mcastifaceIP;
262 std::list<uint32_t> localIPs;
264 uint8_t multicastTTL;
267 uint8_t *localhostname;
268 size_t localhostnamelength;
270 RTPHashTable<const RTPIPv4Destination,RTPUDPv4Trans_GetHashIndex_IPv4Dest,RTPUDPV4TRANS_HASHSIZE> destinations;
271 #ifdef RTP_SUPPORT_IPV4MULTICAST
272 RTPHashTable<const uint32_t,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> multicastgroups;
273 #endif // RTP_SUPPORT_IPV4MULTICAST
274 std::list<RTPRawPacket*> rawpacketlist;
276 bool supportsmulticasting;
282 PortInfo() { all =
false; }
285 std::list<uint16_t> portlist;
288 RTPKeyHashTable<const uint32_t,PortInfo*,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> acceptignoreinfo;
291 #if (defined(WIN32) || defined(_WIN32_WCE))
296 int CreateAbortDescriptors();
297 void DestroyAbortDescriptors();
298 void AbortWaitInternal();
299 #ifdef RTP_SUPPORT_THREAD
300 jthread::JMutex mainmutex,waitmutex;
302 #endif // RTP_SUPPORT_THREAD
307 #endif // RTPUDPV4TRANSMITTER_H
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:82
int GetRTPSendBuffer() const
Returns the RTP socket's send buffer size.
Definition: rtpudpv4transmitter.h:118
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:71
Base class for transmission parameters.
Definition: rtptransmitter.h:227
int GetRTPReceiveBuffer() const
Returns the RTP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:121
Additional information about the UDP over IPv4 transmitter.
Definition: rtpudpv4transmitter.h:138
std::list< uint32_t > GetLocalIPList() const
Returns the list of IPv4 addresses the transmitter considers to be the local IP addresses.
Definition: rtpudpv4transmitter.h:151
int GetRTCPSendBuffer() const
Returns the RTCP socket's send buffer size.
Definition: rtpudpv4transmitter.h:124
void ClearLocalIPList()
Clears the list of local IP addresses.
Definition: rtpudpv4transmitter.h:88
Parameters for the UDP over IPv4 transmitter.
Definition: rtpudpv4transmitter.h:64
uint8_t GetMulticastTTL() const
Returns the multicast TTL which will be used (default is 1).
Definition: rtpudpv4transmitter.h:100
void SetRTPSendBuffer(int s)
Sets the RTP socket's send buffer size.
Definition: rtpudpv4transmitter.h:106
int GetRTPSocket() const
Returns the socket descriptor used for receiving and transmitting RTP packets.
Definition: rtpudpv4transmitter.h:154
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:73
uint32_t GetBindIP() const
Returns the IP address which will be used to bind the sockets.
Definition: rtpudpv4transmitter.h:91
uint32_t GetMulticastInterfaceIP() const
Returns the multicast interface IP address.
Definition: rtpudpv4transmitter.h:94
An UDP over IPv4 transmission component.
Definition: rtpudpv4transmitter.h:192
int GetRTCPSocket() const
Returns the socket descriptor used for receiving and transmitting RTCP packets.
Definition: rtpudpv4transmitter.h:157
Abstract class from which actual transmission components should be derived.
Definition: rtptransmitter.h:61
ReceiveMode
Three kind of receive modes can be specified.
Definition: rtptransmitter.h:78
void SetRTCPReceiveBuffer(int s)
Sets the RTCP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:115
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:80
A memory manager.
Definition: rtpmemorymanager.h:147
void SetRTCPSendBuffer(int s)
Sets the RTCP socket's send buffer size.
Definition: rtpudpv4transmitter.h:112
void SetMulticastTTL(uint8_t mcastTTL)
Sets the multicast TTL to be used to mcastTTL.
Definition: rtpudpv4transmitter.h:79
void SetPortbase(uint16_t pbase)
Sets the RTP portbase to pbase.
Definition: rtpudpv4transmitter.h:76
int GetRTCPReceiveBuffer() const
Returns the RTCP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:127
const std::list< uint32_t > & GetLocalIPList() const
Returns the list of local IP addresses.
Definition: rtpudpv4transmitter.h:103
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:246
void SetBindIP(uint32_t ip)
Sets the IP address which is used to bind the sockets to ip.
Definition: rtpudpv4transmitter.h:70
uint16_t GetPortbase() const
Returns the RTP portbase which will be used (default is 5000).
Definition: rtpudpv4transmitter.h:97
void SetRTPReceiveBuffer(int s)
Sets the RTP socket's receive buffer size.
Definition: rtpudpv4transmitter.h:109