kopia lustrzana https://github.com/f4exb/sdrangel
qrtplib: removed mutex macros
rodzic
83cf128dc0
commit
493b37c37c
|
|
@ -42,11 +42,6 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
#define MAINMUTEX_LOCK
|
||||
#define MAINMUTEX_UNLOCK
|
||||
#define WAITMUTEX_LOCK
|
||||
#define WAITMUTEX_UNLOCK
|
||||
|
||||
namespace qrtplib
|
||||
{
|
||||
|
||||
|
|
@ -82,11 +77,8 @@ int RTPExternalTransmitter::Create(size_t maximumpacketsize, const RTPTransmissi
|
|||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_ALREADYCREATED;
|
||||
}
|
||||
|
||||
|
|
@ -94,12 +86,10 @@ int RTPExternalTransmitter::Create(size_t maximumpacketsize, const RTPTransmissi
|
|||
|
||||
if (transparams == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_ILLEGALPARAMETERS;
|
||||
}
|
||||
if (transparams->GetTransmissionProtocol() != RTPTransmitter::ExternalProto)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_ILLEGALPARAMETERS;
|
||||
}
|
||||
|
||||
|
|
@ -107,7 +97,6 @@ int RTPExternalTransmitter::Create(size_t maximumpacketsize, const RTPTransmissi
|
|||
|
||||
if ((status = m_abortDesc.Init()) < 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
m_abortCount = 0;
|
||||
|
|
@ -121,7 +110,6 @@ int RTPExternalTransmitter::Create(size_t maximumpacketsize, const RTPTransmissi
|
|||
|
||||
waitingfordata = false;
|
||||
created = true;
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -130,10 +118,8 @@ void RTPExternalTransmitter::Destroy()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -152,262 +138,223 @@ void RTPExternalTransmitter::Destroy()
|
|||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
m_abortDesc.Destroy();
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_LOCK // to make sure that the WaitForIncomingData function ended
|
||||
WAITMUTEX_UNLOCK
|
||||
}
|
||||
else
|
||||
m_abortDesc.Destroy();
|
||||
// to make sure that the WaitForIncomingData function ended
|
||||
|
||||
}
|
||||
else
|
||||
m_abortDesc.Destroy();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
RTPTransmissionInfo *RTPExternalTransmitter::GetTransmissionInfo()
|
||||
{
|
||||
if (!init)
|
||||
return 0;
|
||||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
RTPTransmissionInfo *tinf = new RTPExternalTransmissionInfo(&packetinjector);
|
||||
MAINMUTEX_UNLOCK
|
||||
return tinf;
|
||||
RTPTransmissionInfo *tinf = new RTPExternalTransmissionInfo(&packetinjector);
|
||||
return tinf;
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::DeleteTransmissionInfo(RTPTransmissionInfo *i)
|
||||
{
|
||||
if (!init)
|
||||
return;
|
||||
if (!init)
|
||||
return;
|
||||
|
||||
delete i;
|
||||
delete i;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::GetLocalHostName(uint8_t *buffer, size_t *bufferlength)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
if (localhostname == 0)
|
||||
{
|
||||
if (localhostname == 0)
|
||||
{
|
||||
// We'll just use 'gethostname' for simplicity
|
||||
|
||||
char name[1024];
|
||||
char name[1024];
|
||||
|
||||
if (gethostname(name, 1023) != 0)
|
||||
strcpy(name, "localhost"); // failsafe
|
||||
else
|
||||
name[1023] = 0; // ensure null-termination
|
||||
if (gethostname(name, 1023) != 0)
|
||||
strcpy(name, "localhost"); // failsafe
|
||||
else
|
||||
name[1023] = 0; // ensure null-termination
|
||||
|
||||
localhostnamelength = strlen(name);
|
||||
localhostname = new uint8_t[localhostnamelength + 1];
|
||||
localhostnamelength = strlen(name);
|
||||
localhostname = new uint8_t[localhostnamelength + 1];
|
||||
|
||||
memcpy(localhostname, name, localhostnamelength);
|
||||
localhostname[localhostnamelength] = 0;
|
||||
}
|
||||
memcpy(localhostname, name, localhostnamelength);
|
||||
localhostname[localhostnamelength] = 0;
|
||||
}
|
||||
|
||||
if ((*bufferlength) < localhostnamelength)
|
||||
{
|
||||
*bufferlength = localhostnamelength; // tell the application the required size of the buffer
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;
|
||||
}
|
||||
if ((*bufferlength) < localhostnamelength)
|
||||
{
|
||||
*bufferlength = localhostnamelength; // tell the application the required size of the buffer
|
||||
return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;
|
||||
}
|
||||
|
||||
memcpy(buffer, localhostname, localhostnamelength);
|
||||
*bufferlength = localhostnamelength;
|
||||
memcpy(buffer, localhostname, localhostnamelength);
|
||||
*bufferlength = localhostnamelength;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool RTPExternalTransmitter::ComesFromThisTransmitter(const RTPAddress *addr)
|
||||
{
|
||||
MAINMUTEX_LOCK
|
||||
bool value = false;
|
||||
if (sender)
|
||||
value = sender->ComesFromThisSender(addr);
|
||||
MAINMUTEX_UNLOCK
|
||||
return value;
|
||||
|
||||
bool value = false;
|
||||
if (sender)
|
||||
value = sender->ComesFromThisSender(addr);
|
||||
return value;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::Poll()
|
||||
{
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::WaitForIncomingData(const RTPTime &delay, bool *dataavailable)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (waitingfordata)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_ALREADYWAITING;
|
||||
}
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (waitingfordata)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_ALREADYWAITING;
|
||||
}
|
||||
waitingfordata = true;
|
||||
|
||||
waitingfordata = true;
|
||||
if (!rawpacketlist.empty())
|
||||
{
|
||||
if (dataavailable != 0)
|
||||
*dataavailable = true;
|
||||
waitingfordata = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!rawpacketlist.empty())
|
||||
{
|
||||
if (dataavailable != 0)
|
||||
*dataavailable = true;
|
||||
waitingfordata = false;
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
int8_t isset = 0;
|
||||
SocketType abortSock = m_abortDesc.GetAbortSocket();
|
||||
int status = RTPSelect(&abortSock, &isset, 1, delay);
|
||||
if (status < 0)
|
||||
{
|
||||
|
||||
WAITMUTEX_LOCK
|
||||
MAINMUTEX_UNLOCK
|
||||
waitingfordata = false;
|
||||
|
||||
int8_t isset = 0;
|
||||
SocketType abortSock = m_abortDesc.GetAbortSocket();
|
||||
int status = RTPSelect(&abortSock, &isset, 1, delay);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
if (!created) // destroy called
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
WAITMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
waitingfordata = false;
|
||||
if (!created) // destroy called
|
||||
{
|
||||
|
||||
// if aborted, read from abort buffer
|
||||
if (isset)
|
||||
{
|
||||
m_abortDesc.ClearAbortSignal();
|
||||
m_abortCount = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dataavailable != 0)
|
||||
{
|
||||
if (rawpacketlist.empty())
|
||||
*dataavailable = false;
|
||||
else
|
||||
*dataavailable = true;
|
||||
}
|
||||
// if aborted, read from abort buffer
|
||||
if (isset)
|
||||
{
|
||||
m_abortDesc.ClearAbortSignal();
|
||||
m_abortCount = 0;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
return 0;
|
||||
if (dataavailable != 0)
|
||||
{
|
||||
if (rawpacketlist.empty())
|
||||
*dataavailable = false;
|
||||
else
|
||||
*dataavailable = true;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::AbortWait()
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (!waitingfordata)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTWAITING;
|
||||
}
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (!waitingfordata)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTWAITING;
|
||||
}
|
||||
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::SendRTPData(const void *data, size_t len)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
if (!sender)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOSENDER;
|
||||
}
|
||||
|
||||
if (!sender)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOSENDER;
|
||||
}
|
||||
if (!sender->SendRTP(data, len))
|
||||
return ERR_RTP_EXTERNALTRANS_SENDERROR;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
if (!sender->SendRTP(data, len))
|
||||
return ERR_RTP_EXTERNALTRANS_SENDERROR;
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::SendRTCPData(const void *data, size_t len)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
if (!sender)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOSENDER;
|
||||
}
|
||||
|
||||
if (!sender)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOSENDER;
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
if (!sender->SendRTCP(data, len))
|
||||
return ERR_RTP_EXTERNALTRANS_SENDERROR;
|
||||
|
||||
if (!sender->SendRTCP(data, len))
|
||||
return ERR_RTP_EXTERNALTRANS_SENDERROR;
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::AddDestination(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NODESTINATIONSSUPPORTED;
|
||||
return ERR_RTP_EXTERNALTRANS_NODESTINATIONSSUPPORTED;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::DeleteDestination(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NODESTINATIONSSUPPORTED;
|
||||
return ERR_RTP_EXTERNALTRANS_NODESTINATIONSSUPPORTED;
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::ClearDestinations()
|
||||
|
|
@ -416,17 +363,17 @@ void RTPExternalTransmitter::ClearDestinations()
|
|||
|
||||
bool RTPExternalTransmitter::SupportsMulticasting()
|
||||
{
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::JoinMulticastGroup(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOMULTICASTSUPPORT;
|
||||
return ERR_RTP_EXTERNALTRANS_NOMULTICASTSUPPORT;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::LeaveMulticastGroup(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOMULTICASTSUPPORT;
|
||||
return ERR_RTP_EXTERNALTRANS_NOMULTICASTSUPPORT;
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::LeaveAllMulticastGroups()
|
||||
|
|
@ -435,32 +382,28 @@ void RTPExternalTransmitter::LeaveAllMulticastGroups()
|
|||
|
||||
int RTPExternalTransmitter::SetReceiveMode(RTPTransmitter::ReceiveMode m)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (m != RTPTransmitter::AcceptAll)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_BADRECEIVEMODE;
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (m != RTPTransmitter::AcceptAll)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_BADRECEIVEMODE;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::AddToIgnoreList(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOIGNORELIST;
|
||||
return ERR_RTP_EXTERNALTRANS_NOIGNORELIST;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::DeleteFromIgnoreList(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOIGNORELIST;
|
||||
return ERR_RTP_EXTERNALTRANS_NOIGNORELIST;
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::ClearIgnoreList()
|
||||
|
|
@ -469,12 +412,12 @@ void RTPExternalTransmitter::ClearIgnoreList()
|
|||
|
||||
int RTPExternalTransmitter::AddToAcceptList(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOACCEPTLIST;
|
||||
return ERR_RTP_EXTERNALTRANS_NOACCEPTLIST;
|
||||
}
|
||||
|
||||
int RTPExternalTransmitter::DeleteFromAcceptList(const RTPAddress &)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOACCEPTLIST;
|
||||
return ERR_RTP_EXTERNALTRANS_NOACCEPTLIST;
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::ClearAcceptList()
|
||||
|
|
@ -483,228 +426,207 @@ void RTPExternalTransmitter::ClearAcceptList()
|
|||
|
||||
int RTPExternalTransmitter::SetMaximumPacketSize(size_t s)
|
||||
{
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
maxpacksize = s;
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
if (!created)
|
||||
{
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
maxpacksize = s;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool RTPExternalTransmitter::NewDataAvailable()
|
||||
{
|
||||
if (!init)
|
||||
return false;
|
||||
if (!init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
bool v;
|
||||
|
||||
bool v;
|
||||
if (!created)
|
||||
v = false;
|
||||
else
|
||||
{
|
||||
if (rawpacketlist.empty())
|
||||
v = false;
|
||||
else
|
||||
v = true;
|
||||
}
|
||||
|
||||
if (!created)
|
||||
v = false;
|
||||
else
|
||||
{
|
||||
if (rawpacketlist.empty())
|
||||
v = false;
|
||||
else
|
||||
v = true;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
return v;
|
||||
}
|
||||
|
||||
RTPRawPacket *RTPExternalTransmitter::GetNextPacket()
|
||||
{
|
||||
if (!init)
|
||||
return 0;
|
||||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
RTPRawPacket *p;
|
||||
|
||||
RTPRawPacket *p;
|
||||
if (!created)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (rawpacketlist.empty())
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
if (rawpacketlist.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
p = *(rawpacketlist.begin());
|
||||
rawpacketlist.pop_front();
|
||||
|
||||
p = *(rawpacketlist.begin());
|
||||
rawpacketlist.pop_front();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return p;
|
||||
return p;
|
||||
}
|
||||
|
||||
// Here the private functions start...
|
||||
|
||||
void RTPExternalTransmitter::FlushPackets()
|
||||
{
|
||||
std::list<RTPRawPacket*>::const_iterator it;
|
||||
std::list<RTPRawPacket*>::const_iterator it;
|
||||
|
||||
for (it = rawpacketlist.begin(); it != rawpacketlist.end(); ++it)
|
||||
delete *it;
|
||||
rawpacketlist.clear();
|
||||
for (it = rawpacketlist.begin(); it != rawpacketlist.end(); ++it)
|
||||
delete *it;
|
||||
rawpacketlist.clear();
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::InjectRTP(const void *data, size_t len, const RTPAddress &a)
|
||||
{
|
||||
if (!init)
|
||||
return;
|
||||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return;
|
||||
}
|
||||
if (!created)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RTPAddress *addr = a.CreateCopy();
|
||||
if (addr == 0)
|
||||
return;
|
||||
RTPAddress *addr = a.CreateCopy();
|
||||
if (addr == 0)
|
||||
return;
|
||||
|
||||
uint8_t *datacopy;
|
||||
uint8_t *datacopy;
|
||||
|
||||
datacopy = new uint8_t[len];
|
||||
if (datacopy == 0)
|
||||
{
|
||||
delete addr;
|
||||
return;
|
||||
}
|
||||
memcpy(datacopy, data, len);
|
||||
datacopy = new uint8_t[len];
|
||||
if (datacopy == 0)
|
||||
{
|
||||
delete addr;
|
||||
return;
|
||||
}
|
||||
memcpy(datacopy, data, len);
|
||||
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPRawPacket *pack;
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPRawPacket *pack;
|
||||
|
||||
pack = new RTPRawPacket(datacopy, len, addr, curtime, true);
|
||||
if (pack == 0)
|
||||
{
|
||||
delete addr;
|
||||
delete[] localhostname;
|
||||
return;
|
||||
}
|
||||
rawpacketlist.push_back(pack);
|
||||
pack = new RTPRawPacket(datacopy, len, addr, curtime, true);
|
||||
if (pack == 0)
|
||||
{
|
||||
delete addr;
|
||||
delete[] localhostname;
|
||||
return;
|
||||
}
|
||||
rawpacketlist.push_back(pack);
|
||||
|
||||
if (m_abortCount == 0)
|
||||
{
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
}
|
||||
if (m_abortCount == 0)
|
||||
{
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::InjectRTCP(const void *data, size_t len, const RTPAddress &a)
|
||||
{
|
||||
if (!init)
|
||||
return;
|
||||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return;
|
||||
}
|
||||
if (!created)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RTPAddress *addr = a.CreateCopy();
|
||||
if (addr == 0)
|
||||
return;
|
||||
RTPAddress *addr = a.CreateCopy();
|
||||
if (addr == 0)
|
||||
return;
|
||||
|
||||
uint8_t *datacopy;
|
||||
uint8_t *datacopy;
|
||||
|
||||
datacopy = new uint8_t[len];
|
||||
if (datacopy == 0)
|
||||
{
|
||||
delete addr;
|
||||
return;
|
||||
}
|
||||
memcpy(datacopy, data, len);
|
||||
datacopy = new uint8_t[len];
|
||||
if (datacopy == 0)
|
||||
{
|
||||
delete addr;
|
||||
return;
|
||||
}
|
||||
memcpy(datacopy, data, len);
|
||||
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPRawPacket *pack;
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPRawPacket *pack;
|
||||
|
||||
pack = new RTPRawPacket(datacopy, len, addr, curtime, false);
|
||||
if (pack == 0)
|
||||
{
|
||||
delete addr;
|
||||
delete[] localhostname;
|
||||
return;
|
||||
}
|
||||
rawpacketlist.push_back(pack);
|
||||
pack = new RTPRawPacket(datacopy, len, addr, curtime, false);
|
||||
if (pack == 0)
|
||||
{
|
||||
delete addr;
|
||||
delete[] localhostname;
|
||||
return;
|
||||
}
|
||||
rawpacketlist.push_back(pack);
|
||||
|
||||
if (m_abortCount == 0)
|
||||
{
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
}
|
||||
if (m_abortCount == 0)
|
||||
{
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::InjectRTPorRTCP(const void *data, size_t len, const RTPAddress &a)
|
||||
{
|
||||
if (!init)
|
||||
return;
|
||||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return;
|
||||
}
|
||||
if (!created)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RTPAddress *addr = a.CreateCopy();
|
||||
if (addr == 0)
|
||||
return;
|
||||
RTPAddress *addr = a.CreateCopy();
|
||||
if (addr == 0)
|
||||
return;
|
||||
|
||||
uint8_t *datacopy;
|
||||
bool rtp = true;
|
||||
uint8_t *datacopy;
|
||||
bool rtp = true;
|
||||
|
||||
if (len >= 2)
|
||||
{
|
||||
const uint8_t *pData = (const uint8_t *) data;
|
||||
if (pData[1] >= 200 && pData[1] <= 204)
|
||||
rtp = false;
|
||||
}
|
||||
if (len >= 2)
|
||||
{
|
||||
const uint8_t *pData = (const uint8_t *) data;
|
||||
if (pData[1] >= 200 && pData[1] <= 204)
|
||||
rtp = false;
|
||||
}
|
||||
|
||||
datacopy = new uint8_t[len];
|
||||
if (datacopy == 0)
|
||||
{
|
||||
delete addr;
|
||||
return;
|
||||
}
|
||||
memcpy(datacopy, data, len);
|
||||
datacopy = new uint8_t[len];
|
||||
if (datacopy == 0)
|
||||
{
|
||||
delete addr;
|
||||
return;
|
||||
}
|
||||
memcpy(datacopy, data, len);
|
||||
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPRawPacket *pack;
|
||||
RTPTime curtime = RTPTime::CurrentTime();
|
||||
RTPRawPacket *pack;
|
||||
|
||||
pack = new RTPRawPacket(datacopy, len, addr, curtime, rtp);
|
||||
if (pack == 0)
|
||||
{
|
||||
delete addr;
|
||||
delete[] localhostname;
|
||||
return;
|
||||
}
|
||||
rawpacketlist.push_back(pack);
|
||||
pack = new RTPRawPacket(datacopy, len, addr, curtime, rtp);
|
||||
if (pack == 0)
|
||||
{
|
||||
delete addr;
|
||||
delete[] localhostname;
|
||||
return;
|
||||
}
|
||||
rawpacketlist.push_back(pack);
|
||||
|
||||
if (m_abortCount == 0)
|
||||
{
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
if (m_abortCount == 0)
|
||||
{
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
Plik diff jest za duży
Load Diff
Ładowanie…
Reference in New Issue