45 #ifndef RTPFAKETRANSMITTER_H 47 #define RTPFAKETRANSMITTER_H 49 #include "rtpconfig.h" 57 #ifdef RTP_SUPPORT_THREAD 58 #include <jthread/jmutex.h> 59 #endif // RTP_SUPPORT_THREAD 61 #define RTPFAKETRANS_HASHSIZE 8317 62 #define RTPFAKETRANS_DEFAULTPORTBASE 5000 69 typedef void(*packet_ready_cb)(
void*, uint8_t*, uint16_t, uint32_t, uint16_t,
int rtp);
71 class RTPFakeTransmissionParams :
public RTPTransmissionParams
74 RTPFakeTransmissionParams():RTPTransmissionParams(RTPTransmitter::UserDefinedProto) { portbase = RTPFAKETRANS_DEFAULTPORTBASE; bindIP = 0; multicastTTL = 1; currentdata = NULL;}
75 void SetBindIP(uint32_t ip) { bindIP = ip; }
76 void SetPortbase(uint16_t pbase) { portbase = pbase; }
77 void SetMulticastTTL(uint8_t mcastTTL) { multicastTTL = mcastTTL; }
78 void SetLocalIPList(std::list<uint32_t> &iplist) { localIPs = iplist; }
79 void ClearLocalIPList() { localIPs.clear(); }
80 void SetCurrentData(uint8_t *data) { currentdata = data; }
81 void SetCurrentDataLen(uint16_t len) { currentdatalen = len; }
82 void SetCurrentDataAddr(uint32_t addr) { currentdataaddr = addr; }
83 void SetCurrentDataPort(uint16_t port) { currentdataport = port; }
84 void SetCurrentDataType(
bool type) { currentdatatype = type; }
85 void SetPacketReadyCB(packet_ready_cb cb) { packetreadycb = cb; };
86 void SetPacketReadyCBData(
void *data) { packetreadycbdata = data; };
87 uint32_t GetBindIP()
const {
return bindIP; }
88 uint16_t GetPortbase()
const {
return portbase; }
89 uint8_t GetMulticastTTL()
const {
return multicastTTL; }
90 const std::list<uint32_t> &GetLocalIPList()
const {
return localIPs; }
91 uint8_t* GetCurrentData()
const {
return currentdata; }
92 uint16_t GetCurrentDataLen()
const {
return currentdatalen; }
93 uint32_t GetCurrentDataAddr()
const {
return currentdataaddr; }
94 uint16_t GetCurrentDataPort()
const {
return currentdataport; }
95 bool GetCurrentDataType()
const {
return currentdatatype; }
96 packet_ready_cb GetPacketReadyCB()
const {
return packetreadycb; }
97 void* GetPacketReadyCBData()
const {
return packetreadycbdata; }
101 std::list<uint32_t> localIPs;
102 uint8_t multicastTTL;
103 uint8_t* currentdata;
104 uint16_t currentdatalen;
105 uint32_t currentdataaddr;
106 uint16_t currentdataport;
107 bool currentdatatype;
108 packet_ready_cb packetreadycb;
109 void *packetreadycbdata;
112 class RTPFakeTransmissionInfo :
public RTPTransmissionInfo
115 RTPFakeTransmissionInfo(std::list<uint32_t> iplist,
116 RTPFakeTransmissionParams *transparams) :
117 RTPTransmissionInfo(RTPTransmitter::UserDefinedProto)
118 { localIPlist = iplist; params = transparams; }
120 ~RTPFakeTransmissionInfo() { }
121 std::list<uint32_t> GetLocalIPList()
const {
return localIPlist; }
122 RTPFakeTransmissionParams* GetTransParams() {
return params; }
124 std::list<uint32_t> localIPlist;
125 RTPFakeTransmissionParams *params;
128 class RTPFakeTrans_GetHashIndex_IPv4Dest
131 static int GetIndex(
const RTPIPv4Destination &d) {
return d.GetIP()%RTPFAKETRANS_HASHSIZE; }
134 class RTPFakeTrans_GetHashIndex_uint32_t
137 static int GetIndex(
const uint32_t &k) {
return k%RTPFAKETRANS_HASHSIZE; }
140 #define RTPFAKETRANS_HEADERSIZE (20+8) 142 class RTPFakeTransmitter :
public RTPTransmitter
145 RTPFakeTransmitter(RTPMemoryManager *mgr);
146 ~RTPFakeTransmitter();
148 int Init(
bool treadsafe);
149 int Create(
size_t maxpacksize,
const RTPTransmissionParams *transparams);
151 RTPTransmissionInfo *GetTransmissionInfo();
152 void DeleteTransmissionInfo(RTPTransmissionInfo *inf);
154 int GetLocalHostName(uint8_t *buffer,
size_t *bufferlength);
155 bool ComesFromThisTransmitter(
const RTPAddress *addr);
156 size_t GetHeaderOverhead() {
return RTPFAKETRANS_HEADERSIZE; }
159 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
162 int SendRTPData(
const void *data,
size_t len);
163 int SendRTCPData(
const void *data,
size_t len);
165 int AddDestination(
const RTPAddress &addr);
166 int DeleteDestination(
const RTPAddress &addr);
167 void ClearDestinations();
169 bool SupportsMulticasting();
170 int JoinMulticastGroup(
const RTPAddress &addr);
171 int LeaveMulticastGroup(
const RTPAddress &addr);
172 void LeaveAllMulticastGroups();
175 int AddToIgnoreList(
const RTPAddress &addr);
176 int DeleteFromIgnoreList(
const RTPAddress &addr);
177 void ClearIgnoreList();
178 int AddToAcceptList(
const RTPAddress &addr);
179 int DeleteFromAcceptList(
const RTPAddress &addr);
180 void ClearAcceptList();
181 int SetMaximumPacketSize(
size_t s);
183 bool NewDataAvailable();
184 RTPRawPacket *GetNextPacket();
189 int CreateLocalIPList();
190 bool GetLocalIPList_Interfaces();
191 void GetLocalIPList_DNS();
192 void AddLoopbackAddress();
195 int ProcessAddAcceptIgnoreEntry(uint32_t ip,uint16_t port);
196 int ProcessDeleteAcceptIgnoreEntry(uint32_t ip,uint16_t port);
197 #ifdef RTP_SUPPORT_IPV4MULTICAST 198 bool SetMulticastTTL(uint8_t ttl);
199 #endif // RTP_SUPPORT_IPV4MULTICAST 200 bool ShouldAcceptData(uint32_t srcip,uint16_t srcport);
201 void ClearAcceptIgnoreInfo();
203 RTPFakeTransmissionParams *params;
207 std::list<uint32_t> localIPs;
209 uint8_t multicastTTL;
212 uint8_t *localhostname;
213 size_t localhostnamelength;
215 RTPHashTable<const RTPIPv4Destination,RTPFakeTrans_GetHashIndex_IPv4Dest,RTPFAKETRANS_HASHSIZE> destinations;
216 #ifdef RTP_SUPPORT_IPV4MULTICAST 218 #endif // RTP_SUPPORT_IPV4MULTICAST 219 std::list<RTPRawPacket*> rawpacketlist;
221 bool supportsmulticasting;
227 PortInfo() { all =
false; }
230 std::list<uint16_t> portlist;
233 RTPKeyHashTable<const uint32_t,PortInfo*,RTPFakeTrans_GetHashIndex_uint32_t,RTPFAKETRANS_HASHSIZE> acceptignoreinfo;
235 int CreateAbortDescriptors();
236 void DestroyAbortDescriptors();
237 void AbortWaitInternal();
238 #ifdef RTP_SUPPORT_THREAD 239 jthread::JMutex mainmutex,waitmutex;
241 #endif // RTP_SUPPORT_THREAD 246 #endif // RTPFAKETRANSMITTER_H
ReceiveMode
Three kind of receive modes can be specified.
Definition: rtptransmitter.h:80
Definition: rtpfaketransmitter.h:64