37 #ifndef RTPUDPV4TRANSMITTER_H
39 #define RTPUDPV4TRANSMITTER_H
41 #include "rtpconfig.h"
48 #ifdef RTP_SUPPORT_THREAD
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
127 uint32_t bindIP, mcastifaceIP;
128 std::list<uint32_t> localIPs;
129 uint8_t multicastTTL;
130 int rtpsendbuf, rtprecvbuf;
131 int rtcpsendbuf, rtcprecvbuf;
138 #if ! (defined(WIN32) || defined(_WIN32_WCE))
143 { localIPlist = iplist; rtpsocket = rtpsock; rtcpsocket = rtcpsock; }
145 ~RTPUDPv4TransmissionInfo() { }
149 #if ! (defined(WIN32) || defined(_WIN32_WCE))
160 std::list<uint32_t> localIPlist;
161 #if ! (defined(WIN32) || defined(_WIN32_WCE))
162 int rtpsocket,rtcpsocket;
164 SOCKET rtpsocket,rtcpsocket;
168 class RTPUDPv4Trans_GetHashIndex_IPv4Dest
171 static int GetIndex(
const RTPIPv4Destination &d) {
return d.GetIP()%RTPUDPV4TRANS_HASHSIZE; }
174 class RTPUDPv4Trans_GetHashIndex_uint32_t
177 static int GetIndex(
const uint32_t &k) {
return k%RTPUDPV4TRANS_HASHSIZE; }
180 #define RTPUDPV4TRANS_HEADERSIZE (20+8)
195 int Init(
bool treadsafe);
200 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
201 bool ComesFromThisTransmitter(
const RTPAddress *addr);
202 size_t GetHeaderOverhead() {
return RTPUDPV4TRANS_HEADERSIZE; }
205 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
208 int SendRTPData(
const void *data,
size_t len);
209 int SendRTCPData(
const void *data,
size_t len);
212 int DeleteDestination(
const RTPAddress &addr);
213 void ClearDestinations();
215 bool SupportsMulticasting();
216 int JoinMulticastGroup(
const RTPAddress &addr);
217 int LeaveMulticastGroup(
const RTPAddress &addr);
218 void LeaveAllMulticastGroups();
222 int DeleteFromIgnoreList(
const RTPAddress &addr);
223 void ClearIgnoreList();
225 int DeleteFromAcceptList(
const RTPAddress &addr);
226 void ClearAcceptList();
227 int SetMaximumPacketSize(
size_t s);
229 bool NewDataAvailable();
235 int CreateLocalIPList();
236 bool GetLocalIPList_Interfaces();
237 void GetLocalIPList_DNS();
238 void AddLoopbackAddress();
240 int PollSocket(
bool rtp);
241 int ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port);
242 int ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port);
243 #ifdef RTP_SUPPORT_IPV4MULTICAST
244 bool SetMulticastTTL(uint8_t ttl);
245 #endif // RTP_SUPPORT_IPV4MULTICAST
246 bool ShouldAcceptData(uint32_t srcip,uint16_t srcport);
247 void ClearAcceptIgnoreInfo();
252 #if (defined(WIN32) || defined(_WIN32_WCE))
253 SOCKET rtpsock,rtcpsock;
254 #else // not using winsock
255 int rtpsock,rtcpsock;
257 uint32_t bindIP, mcastifaceIP;
258 std::list<uint32_t> localIPs;
260 uint8_t multicastTTL;
263 uint8_t *localhostname;
264 size_t localhostnamelength;
266 RTPHashTable<const RTPIPv4Destination,RTPUDPv4Trans_GetHashIndex_IPv4Dest,RTPUDPV4TRANS_HASHSIZE> destinations;
267 #ifdef RTP_SUPPORT_IPV4MULTICAST
268 RTPHashTable<const uint32_t,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> multicastgroups;
269 #endif // RTP_SUPPORT_IPV4MULTICAST
270 std::list<RTPRawPacket*> rawpacketlist;
272 bool supportsmulticasting;
278 PortInfo() { all =
false; }
281 std::list<uint16_t> portlist;
284 RTPKeyHashTable<const uint32_t,PortInfo*,RTPUDPv4Trans_GetHashIndex_uint32_t,RTPUDPV4TRANS_HASHSIZE> acceptignoreinfo;
287 #if (defined(WIN32) || defined(_WIN32_WCE))
292 int CreateAbortDescriptors();
293 void DestroyAbortDescriptors();
294 void AbortWaitInternal();
295 #ifdef RTP_SUPPORT_THREAD
296 JMutex mainmutex,waitmutex;
298 #endif // RTP_SUPPORT_THREAD
301 #endif // RTPUDPV4TRANSMITTER_H