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