mirror of https://github.com/f4exb/sdrangel.git
qrtplib: removed mutex macros
This commit is contained in:
parent
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,14 +138,12 @@ 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
|
||||
// to make sure that the WaitForIncomingData function ended
|
||||
|
||||
}
|
||||
else
|
||||
m_abortDesc.Destroy();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
RTPTransmissionInfo *RTPExternalTransmitter::GetTransmissionInfo()
|
||||
|
@ -167,9 +151,7 @@ RTPTransmissionInfo *RTPExternalTransmitter::GetTransmissionInfo()
|
|||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
RTPTransmissionInfo *tinf = new RTPExternalTransmissionInfo(&packetinjector);
|
||||
MAINMUTEX_UNLOCK
|
||||
return tinf;
|
||||
}
|
||||
|
||||
|
@ -186,10 +168,8 @@ int RTPExternalTransmitter::GetLocalHostName(uint8_t *buffer, size_t *bufferleng
|
|||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
|
@ -214,24 +194,21 @@ localhostname[localhostnamelength] = 0;
|
|||
if ((*bufferlength) < localhostnamelength)
|
||||
{
|
||||
*bufferlength = localhostnamelength; // tell the application the required size of the buffer
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;
|
||||
}
|
||||
|
||||
memcpy(buffer, localhostname, localhostnamelength);
|
||||
*bufferlength = localhostnamelength;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool RTPExternalTransmitter::ComesFromThisTransmitter(const RTPAddress *addr)
|
||||
{
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool value = false;
|
||||
if (sender)
|
||||
value = sender->ComesFromThisSender(addr);
|
||||
MAINMUTEX_UNLOCK
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -245,16 +222,12 @@ int RTPExternalTransmitter::WaitForIncomingData(const RTPTime &delay, bool *data
|
|||
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_ALREADYWAITING;
|
||||
}
|
||||
|
||||
|
@ -265,31 +238,24 @@ if (!rawpacketlist.empty())
|
|||
if (dataavailable != 0)
|
||||
*dataavailable = true;
|
||||
waitingfordata = false;
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
WAITMUTEX_LOCK
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
if (!created) // destroy called
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -308,8 +274,6 @@ else
|
|||
*dataavailable = true;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -318,22 +282,18 @@ int RTPExternalTransmitter::AbortWait()
|
|||
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;
|
||||
}
|
||||
|
||||
m_abortDesc.SendAbortSignal();
|
||||
m_abortCount++;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -342,27 +302,20 @@ int RTPExternalTransmitter::SendRTPData(const void *data, size_t len)
|
|||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
if (!sender)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOSENDER;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
if (!sender->SendRTP(data, len))
|
||||
return ERR_RTP_EXTERNALTRANS_SENDERROR;
|
||||
|
||||
|
@ -374,25 +327,19 @@ int RTPExternalTransmitter::SendRTCPData(const void *data, size_t len)
|
|||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
if (!sender)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOSENDER;
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
if (!sender->SendRTCP(data, len))
|
||||
return ERR_RTP_EXTERNALTRANS_SENDERROR;
|
||||
|
@ -438,18 +385,14 @@ int RTPExternalTransmitter::SetReceiveMode(RTPTransmitter::ReceiveMode m)
|
|||
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;
|
||||
}
|
||||
|
||||
|
@ -486,14 +429,11 @@ int RTPExternalTransmitter::SetMaximumPacketSize(size_t s)
|
|||
if (!init)
|
||||
return ERR_RTP_EXTERNALTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_EXTERNALTRANS_NOTCREATED;
|
||||
}
|
||||
maxpacksize = s;
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -502,8 +442,6 @@ bool RTPExternalTransmitter::NewDataAvailable()
|
|||
if (!init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (!created)
|
||||
|
@ -516,7 +454,6 @@ else
|
|||
v = true;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -525,25 +462,20 @@ RTPRawPacket *RTPExternalTransmitter::GetNextPacket()
|
|||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
RTPRawPacket *p;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
if (rawpacketlist.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = *(rawpacketlist.begin());
|
||||
rawpacketlist.pop_front();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return p;
|
||||
}
|
||||
|
||||
|
@ -563,10 +495,8 @@ void RTPExternalTransmitter::InjectRTP(const void *data, size_t len, const RTPAd
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -602,7 +532,6 @@ m_abortDesc.SendAbortSignal();
|
|||
m_abortCount++;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::InjectRTCP(const void *data, size_t len, const RTPAddress &a)
|
||||
|
@ -610,10 +539,8 @@ void RTPExternalTransmitter::InjectRTCP(const void *data, size_t len, const RTPA
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -649,7 +576,6 @@ m_abortDesc.SendAbortSignal();
|
|||
m_abortCount++;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
void RTPExternalTransmitter::InjectRTPorRTCP(const void *data, size_t len, const RTPAddress &a)
|
||||
|
@ -657,10 +583,8 @@ void RTPExternalTransmitter::InjectRTPorRTCP(const void *data, size_t len, const
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -704,8 +628,6 @@ m_abortDesc.SendAbortSignal();
|
|||
m_abortCount++;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
} // end namespace
|
||||
|
|
|
@ -49,11 +49,6 @@ using namespace std;
|
|||
|
||||
#define RTPTCPTRANS_MAXPACKSIZE 65535
|
||||
|
||||
#define MAINMUTEX_LOCK
|
||||
#define MAINMUTEX_UNLOCK
|
||||
#define WAITMUTEX_LOCK
|
||||
#define WAITMUTEX_UNLOCK
|
||||
|
||||
namespace qrtplib
|
||||
{
|
||||
|
||||
|
@ -89,11 +84,8 @@ int RTPTCPTransmitter::Create(size_t maximumpacketsize __attribute__((unused)),
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_ALREADYCREATED;
|
||||
}
|
||||
|
||||
|
@ -105,7 +97,6 @@ int RTPTCPTransmitter::Create(size_t maximumpacketsize __attribute__((unused)),
|
|||
{
|
||||
if (transparams->GetTransmissionProtocol() != RTPTransmitter::TCPProto)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_ILLEGALPARAMETERS;
|
||||
}
|
||||
params = static_cast<const RTPTCPTransmissionParams *>(transparams);
|
||||
|
@ -115,7 +106,6 @@ int RTPTCPTransmitter::Create(size_t maximumpacketsize __attribute__((unused)),
|
|||
{
|
||||
if ((status = m_abortDesc.Init()) < 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
m_pAbortDesc = &m_abortDesc;
|
||||
|
@ -125,14 +115,12 @@ int RTPTCPTransmitter::Create(size_t maximumpacketsize __attribute__((unused)),
|
|||
m_pAbortDesc = params->GetCreatedAbortDescriptors();
|
||||
if (!m_pAbortDesc->IsInitialized())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_ABORTDESC_NOTINIT;
|
||||
}
|
||||
}
|
||||
|
||||
m_waitingForData = false;
|
||||
m_created = true;
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -141,10 +129,8 @@ void RTPTCPTransmitter::Destroy()
|
|||
if (!m_init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -156,14 +142,12 @@ void RTPTCPTransmitter::Destroy()
|
|||
{
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
m_abortDesc.Destroy(); // Doesn't do anything if not initialized
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_LOCK// to make sure that the WaitForIncomingData function ended
|
||||
WAITMUTEX_UNLOCK
|
||||
// to make sure that the WaitForIncomingData function ended
|
||||
|
||||
}
|
||||
else
|
||||
m_abortDesc.Destroy(); // Doesn't do anything if not initialized
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
RTPTransmissionInfo *RTPTCPTransmitter::GetTransmissionInfo()
|
||||
|
@ -171,9 +155,7 @@ RTPTransmissionInfo *RTPTCPTransmitter::GetTransmissionInfo()
|
|||
if (!m_init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
RTPTransmissionInfo *tinf = new RTPTCPTransmissionInfo();
|
||||
MAINMUTEX_UNLOCK
|
||||
return tinf;
|
||||
}
|
||||
|
||||
|
@ -190,10 +172,8 @@ int RTPTCPTransmitter::GetLocalHostName(uint8_t *buffer, size_t *bufferlength)
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
|
@ -212,14 +192,12 @@ memcpy(&m_localHostname[0], "localhost", m_localHostname.size());
|
|||
if ((*bufferlength) < m_localHostname.size())
|
||||
{
|
||||
*bufferlength = m_localHostname.size(); // tell the application the required size of the buffer
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;
|
||||
}
|
||||
|
||||
memcpy(buffer, &m_localHostname[0], m_localHostname.size());
|
||||
*bufferlength = m_localHostname.size();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -231,8 +209,6 @@ return false;
|
|||
if (addr == 0)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!m_created)
|
||||
return false;
|
||||
|
||||
|
@ -243,7 +219,6 @@ bool v = false;
|
|||
|
||||
// TODO: for now, we're assuming that we can't just send to the same transmitter
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -252,10 +227,8 @@ int RTPTCPTransmitter::Poll()
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
|
@ -285,7 +258,6 @@ if (status < 0)
|
|||
}
|
||||
++it;
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
for (size_t i = 0; i < errSockets.size(); i++)
|
||||
OnReceiveError(errSockets[i]);
|
||||
|
@ -298,16 +270,12 @@ int RTPTCPTransmitter::WaitForIncomingData(const RTPTime &delay, bool *dataavail
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
if (m_waitingForData)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_ALREADYWAITING;
|
||||
}
|
||||
|
||||
|
@ -332,26 +300,19 @@ int idxAbort = idx;
|
|||
|
||||
m_waitingForData = true;
|
||||
|
||||
WAITMUTEX_LOCK
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
//cout << "Waiting for " << delay.GetDouble() << " seconds for data on " << m_tmpSocks.size() << " sockets" << endl;
|
||||
int status = RTPSelect(&m_tmpSocks[0], &m_tmpFlags[0], m_tmpSocks.size(), delay);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_LOCK
|
||||
m_waitingForData = false;
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
m_waitingForData = false;
|
||||
if (!m_created) // destroy called
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -379,8 +340,6 @@ else
|
|||
*dataavailable = false;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -389,21 +348,17 @@ int RTPTCPTransmitter::AbortWait()
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
if (!m_waitingForData)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOTWAITING;
|
||||
}
|
||||
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -422,17 +377,13 @@ int RTPTCPTransmitter::AddDestination(const RTPAddress &addr)
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
if (addr.GetAddressType() != RTPAddress::TCPAddress)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
|
@ -440,21 +391,20 @@ const RTPTCPAddress &a = static_cast<const RTPTCPAddress &>(addr);
|
|||
SocketType s = a.GetSocket();
|
||||
if (s == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
return ERR_RTP_TCPTRANS_NOSOCKETSPECIFIED;
|
||||
}
|
||||
|
||||
int status = ValidateSocket(s);
|
||||
if (status != 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
std::map<SocketType, SocketData>::iterator it = m_destSockets.find(s);
|
||||
if (it != m_destSockets.end())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_SOCKETALREADYINDESTINATIONS;
|
||||
}
|
||||
m_destSockets[s] = SocketData();
|
||||
|
@ -464,7 +414,6 @@ m_destSockets[s] = SocketData();
|
|||
// new socket is monitored for incoming data
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -473,17 +422,15 @@ int RTPTCPTransmitter::DeleteDestination(const RTPAddress &addr)
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
if (addr.GetAddressType() != RTPAddress::TCPAddress)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
|
@ -491,14 +438,14 @@ const RTPTCPAddress &a = static_cast<const RTPTCPAddress &>(addr);
|
|||
SocketType s = a.GetSocket();
|
||||
if (s == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_NOSOCKETSPECIFIED;
|
||||
}
|
||||
|
||||
std::map<SocketType, SocketData>::iterator it = m_destSockets.find(s);
|
||||
if (it == m_destSockets.end())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_SOCKETNOTFOUNDINDESTINATIONS;
|
||||
}
|
||||
|
||||
|
@ -509,7 +456,6 @@ delete[] pBuf;
|
|||
|
||||
m_destSockets.erase(it);
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -518,10 +464,9 @@ void RTPTCPTransmitter::ClearDestinations()
|
|||
if (!m_init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (m_created)
|
||||
ClearDestSockets();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
bool RTPTCPTransmitter::SupportsMulticasting()
|
||||
|
@ -583,19 +528,18 @@ int RTPTCPTransmitter::SetMaximumPacketSize(size_t s)
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
if (s > RTPTCPTRANS_MAXPACKSIZE)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
m_maxPackSize = s;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -604,8 +548,6 @@ bool RTPTCPTransmitter::NewDataAvailable()
|
|||
if (!m_init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (!m_created)
|
||||
|
@ -618,7 +560,6 @@ else
|
|||
v = true;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -627,25 +568,22 @@ RTPRawPacket *RTPTCPTransmitter::GetNextPacket()
|
|||
if (!m_init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
RTPRawPacket *p;
|
||||
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
if (m_rawpacketlist.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = *(m_rawpacketlist.begin());
|
||||
m_rawpacketlist.pop_front();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return p;
|
||||
}
|
||||
|
||||
|
@ -735,16 +673,14 @@ int RTPTCPTransmitter::SendRTPRTCPData(const void *data, size_t len)
|
|||
if (!m_init)
|
||||
return ERR_RTP_TCPTRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!m_created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_NOTCREATED;
|
||||
}
|
||||
if (len > RTPTCPTRANS_MAXPACKSIZE)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TCPTRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -768,8 +704,6 @@ errSockets.push_back(sock);
|
|||
++it;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
if (errSockets.size() != 0)
|
||||
{
|
||||
for (size_t i = 0; i < errSockets.size(); i++)
|
||||
|
|
|
@ -59,10 +59,6 @@ using namespace std;
|
|||
mreq.imr_interface.s_addr = htonl(mcastifaceIP);\
|
||||
status = setsockopt(socket,IPPROTO_IP,type,(const char *)&mreq,sizeof(struct ip_mreq));\
|
||||
}
|
||||
#define MAINMUTEX_LOCK
|
||||
#define MAINMUTEX_UNLOCK
|
||||
#define WAITMUTEX_LOCK
|
||||
#define WAITMUTEX_UNLOCK
|
||||
|
||||
#define CLOSESOCKETS do { \
|
||||
if (closesocketswhendone) \
|
||||
|
@ -269,11 +265,9 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ALREADYCREATED;
|
||||
}
|
||||
|
||||
|
@ -285,7 +279,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
{
|
||||
if (transparams->GetTransmissionProtocol() != RTPTransmitter::IPv4UDPProto)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ILLEGALPARAMETERS;
|
||||
}
|
||||
params = (const RTPUDPv4TransmissionParams *) transparams;
|
||||
|
@ -299,13 +293,13 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
int status = GetIPv4SocketPort(rtpsock, &m_rtpPort);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
status = GetIPv4SocketPort(rtcpsock, &m_rtcpPort);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
@ -318,7 +312,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
int status = GetAutoSockets(params->GetBindIP(), params->GetAllowOddPortbase(), params->GetRTCPMultiplexing(), &rtpsock, &rtcpsock, &m_rtpPort, &m_rtcpPort);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
@ -327,7 +321,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
// Check if portbase is even (if necessary)
|
||||
if (!params->GetAllowOddPortbase() && params->GetPortbase() % 2 != 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_PORTBASENOTEVEN;
|
||||
}
|
||||
|
||||
|
@ -336,7 +330,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
rtpsock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (rtpsock == RTPSOCKERR)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTCREATESOCKET;
|
||||
}
|
||||
|
||||
|
@ -349,7 +343,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (rtcpsock == RTPSOCKERR)
|
||||
{
|
||||
RTPCLOSE(rtpsock);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTCREATESOCKET;
|
||||
}
|
||||
}
|
||||
|
@ -367,7 +361,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (bind(rtpsock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTBINDRTPSOCKET;
|
||||
}
|
||||
|
||||
|
@ -390,7 +384,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (bind(rtcpsock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTBINDRTCPSOCKET;
|
||||
}
|
||||
|
||||
|
@ -406,14 +400,14 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (setsockopt(rtpsock, SOL_SOCKET, SO_RCVBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTPRECEIVEBUF;
|
||||
}
|
||||
size = params->GetRTPSendBuffer();
|
||||
if (setsockopt(rtpsock, SOL_SOCKET, SO_SNDBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTPTRANSMITBUF;
|
||||
}
|
||||
|
||||
|
@ -423,14 +417,14 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (setsockopt(rtcpsock, SOL_SOCKET, SO_RCVBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTCPRECEIVEBUF;
|
||||
}
|
||||
size = params->GetRTCPSendBuffer();
|
||||
if (setsockopt(rtcpsock, SOL_SOCKET, SO_SNDBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTCPTRANSMITBUF;
|
||||
}
|
||||
}
|
||||
|
@ -446,7 +440,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if ((status = CreateLocalIPList()) < 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
@ -463,7 +457,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (maximumpacketsize > RTPUDPV4TRANS_MAXPACKSIZE)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -472,7 +466,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if ((status = m_abortDesc.Init()) < 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
m_pAbortDesc = &m_abortDesc;
|
||||
|
@ -483,7 +477,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
if (!m_pAbortDesc->IsInitialized())
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_ABORTDESC_NOTINIT;
|
||||
}
|
||||
}
|
||||
|
@ -498,7 +492,7 @@ int RTPUDPv4Transmitter::Create(size_t maximumpacketsize, const RTPTransmissionP
|
|||
|
||||
waitingfordata = false;
|
||||
created = true;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -507,10 +501,9 @@ void RTPUDPv4Transmitter::Destroy()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -535,14 +528,13 @@ void RTPUDPv4Transmitter::Destroy()
|
|||
{
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
m_abortDesc.Destroy(); // Doesn't do anything if not initialized
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_LOCK// to make sure that the WaitForIncomingData function ended
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
// to make sure that the WaitForIncomingData function ended
|
||||
|
||||
}
|
||||
else
|
||||
m_abortDesc.Destroy(); // Doesn't do anything if not initialized
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
RTPTransmissionInfo *RTPUDPv4Transmitter::GetTransmissionInfo()
|
||||
|
@ -550,9 +542,8 @@ RTPTransmissionInfo *RTPUDPv4Transmitter::GetTransmissionInfo()
|
|||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
RTPTransmissionInfo *tinf = new RTPUDPv4TransmissionInfo(localIPs, rtpsock, rtcpsock, m_rtpPort, m_rtcpPort);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return tinf;
|
||||
}
|
||||
|
||||
|
@ -569,10 +560,9 @@ int RTPUDPv4Transmitter::GetLocalHostName(uint8_t *buffer, size_t *bufferlength)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
|
@ -580,7 +570,7 @@ if (localhostname == 0)
|
|||
{
|
||||
if (localIPs.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOLOCALIPS;
|
||||
}
|
||||
|
||||
|
@ -652,7 +642,7 @@ if (!hostnames.empty()) // try to select the most appropriate hostname
|
|||
localhostname = new uint8_t[localhostnamelength + 1];
|
||||
if (localhostname == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
memcpy(localhostname, (*it).c_str(), localhostnamelength);
|
||||
|
@ -677,7 +667,7 @@ if (!found) // use an IP address
|
|||
localhostname = new uint8_t[localhostnamelength + 1];
|
||||
if (localhostname == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
memcpy(localhostname, str, localhostnamelength);
|
||||
|
@ -688,14 +678,13 @@ if (!found) // use an IP address
|
|||
if ((*bufferlength) < localhostnamelength)
|
||||
{
|
||||
*bufferlength = localhostnamelength; // tell the application the required size of the buffer
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;
|
||||
}
|
||||
|
||||
memcpy(buffer, localhostname, localhostnamelength);
|
||||
*bufferlength = localhostnamelength;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -707,8 +696,6 @@ return false;
|
|||
if (addr == 0)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (created && addr->GetAddressType() == RTPAddress::IPv4Address)
|
||||
|
@ -739,7 +726,6 @@ else
|
|||
else
|
||||
v = false;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -750,10 +736,9 @@ return ERR_RTP_UDPV4TRANS_NOTINIT;
|
|||
|
||||
int status;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
status = PollSocket(true); // poll RTP socket
|
||||
|
@ -762,7 +747,7 @@ if (rtpsock != rtcpsock) // no need to poll twice when multiplexing
|
|||
if (status >= 0)
|
||||
status = PollSocket(false); // poll RTCP socket
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -771,16 +756,14 @@ int RTPUDPv4Transmitter::WaitForIncomingData(const RTPTime &delay, bool *dataava
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (waitingfordata)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ALREADYWAITING;
|
||||
}
|
||||
|
||||
|
@ -796,25 +779,19 @@ const int idxAbort = 2;
|
|||
|
||||
waitingfordata = true;
|
||||
|
||||
WAITMUTEX_LOCK
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
int status = RTPSelect(socks, readflags, 3, delay);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
if (!created) // destroy called
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
WAITMUTEX_UNLOCK
|
||||
;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -830,8 +807,6 @@ else
|
|||
*dataavailable = false;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -840,21 +815,19 @@ int RTPUDPv4Transmitter::AbortWait()
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (!waitingfordata)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTWAITING;
|
||||
}
|
||||
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -863,16 +836,14 @@ int RTPUDPv4Transmitter::SendRTPData(const void *data, size_t len)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -883,7 +854,6 @@ sendto(rtpsock, (const char *) data, len, 0, (const struct sockaddr *) destinati
|
|||
destinations.GotoNextElement();
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -892,16 +862,14 @@ int RTPUDPv4Transmitter::SendRTCPData(const void *data, size_t len)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -912,7 +880,6 @@ sendto(rtcpsock, (const char *) data, len, 0, (const struct sockaddr *) destinat
|
|||
destinations.GotoNextElement();
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -921,24 +888,21 @@ int RTPUDPv4Transmitter::AddDestination(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
RTPIPv4Destination dest;
|
||||
if (!RTPIPv4Destination::AddressToDestination(addr, dest))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
int status = destinations.AddElement(dest);
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -947,23 +911,20 @@ int RTPUDPv4Transmitter::DeleteDestination(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
RTPIPv4Destination dest;
|
||||
if (!RTPIPv4Destination::AddressToDestination(addr, dest))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
int status = destinations.DeleteElement(dest);
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -972,10 +933,9 @@ void RTPUDPv4Transmitter::ClearDestinations()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created)
|
||||
destinations.Clear();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
bool RTPUDPv4Transmitter::SupportsMulticasting()
|
||||
|
@ -983,8 +943,6 @@ bool RTPUDPv4Transmitter::SupportsMulticasting()
|
|||
if (!init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (!created)
|
||||
|
@ -992,7 +950,6 @@ v = false;
|
|||
else
|
||||
v = supportsmulticasting;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -1003,18 +960,16 @@ int RTPUDPv4Transmitter::JoinMulticastGroup(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
|
@ -1023,7 +978,7 @@ uint32_t mcastIP = address.GetIP();
|
|||
|
||||
if (!RTPUDPV4TRANS_IS_MCASTADDR(mcastIP))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTAMULTICASTADDRESS;
|
||||
}
|
||||
|
||||
|
@ -1034,7 +989,7 @@ RTPUDPV4TRANS_MCASTMEMBERSHIP(rtpsock, IP_ADD_MEMBERSHIP, mcastIP, status);
|
|||
if (status != 0)
|
||||
{
|
||||
multicastgroups.DeleteElement(mcastIP);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_COULDNTJOINMULTICASTGROUP;
|
||||
}
|
||||
|
||||
|
@ -1045,12 +1000,12 @@ if (status != 0)
|
|||
{
|
||||
RTPUDPV4TRANS_MCASTMEMBERSHIP(rtpsock, IP_DROP_MEMBERSHIP, mcastIP, status);
|
||||
multicastgroups.DeleteElement(mcastIP);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_COULDNTJOINMULTICASTGROUP;
|
||||
}
|
||||
}
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1059,18 +1014,16 @@ int RTPUDPv4Transmitter::LeaveMulticastGroup(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
|
@ -1079,7 +1032,7 @@ uint32_t mcastIP = address.GetIP();
|
|||
|
||||
if (!RTPUDPV4TRANS_IS_MCASTADDR(mcastIP))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTAMULTICASTADDRESS;
|
||||
}
|
||||
|
||||
|
@ -1093,7 +1046,6 @@ RTPUDPV4TRANS_MCASTMEMBERSHIP(rtcpsock, IP_DROP_MEMBERSHIP, mcastIP, status);
|
|||
status = 0;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1102,7 +1054,6 @@ void RTPUDPv4Transmitter::LeaveAllMulticastGroups()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created)
|
||||
{
|
||||
multicastgroups.GotoFirstElement();
|
||||
|
@ -1121,7 +1072,7 @@ multicastgroups.GotoNextElement();
|
|||
}
|
||||
multicastgroups.Clear();
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
#else // no multicast support
|
||||
|
@ -1147,10 +1098,9 @@ int RTPUDPv4Transmitter::SetReceiveMode(RTPTransmitter::ReceiveMode m)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (m != receivemode)
|
||||
|
@ -1158,7 +1108,7 @@ if (m != receivemode)
|
|||
receivemode = m;
|
||||
acceptignoreinfo.Clear();
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1167,30 +1117,27 @@ int RTPUDPv4Transmitter::AddToIgnoreList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::IgnoreSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessAddAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1199,30 +1146,27 @@ int RTPUDPv4Transmitter::DeleteFromIgnoreList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::IgnoreSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1231,10 +1175,9 @@ void RTPUDPv4Transmitter::ClearIgnoreList()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created && receivemode == RTPTransmitter::IgnoreSome)
|
||||
ClearAcceptIgnoreInfo();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
int RTPUDPv4Transmitter::AddToAcceptList(const RTPAddress &addr)
|
||||
|
@ -1242,30 +1185,27 @@ int RTPUDPv4Transmitter::AddToAcceptList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::AcceptSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessAddAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1274,30 +1214,27 @@ int RTPUDPv4Transmitter::DeleteFromAcceptList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::AcceptSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1306,10 +1243,9 @@ void RTPUDPv4Transmitter::ClearAcceptList()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created && receivemode == RTPTransmitter::AcceptSome)
|
||||
ClearAcceptIgnoreInfo();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
int RTPUDPv4Transmitter::SetMaximumPacketSize(size_t s)
|
||||
|
@ -1317,19 +1253,18 @@ int RTPUDPv4Transmitter::SetMaximumPacketSize(size_t s)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (s > RTPUDPV4TRANS_MAXPACKSIZE)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
maxpacksize = s;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1338,8 +1273,6 @@ bool RTPUDPv4Transmitter::NewDataAvailable()
|
|||
if (!init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (!created)
|
||||
|
@ -1352,7 +1285,6 @@ else
|
|||
v = true;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -1361,25 +1293,22 @@ RTPRawPacket *RTPUDPv4Transmitter::GetNextPacket()
|
|||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
RTPRawPacket *p;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
if (rawpacketlist.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = *(rawpacketlist.begin());
|
||||
rawpacketlist.pop_front();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
|
@ -59,10 +59,6 @@ using namespace std;
|
|||
mreq.imr_interface.s_addr = htonl(mcastifaceIP);\
|
||||
status = setsockopt(socket,IPPROTO_IP,type,(const char *)&mreq,sizeof(struct ip_mreq));\
|
||||
}
|
||||
#define MAINMUTEX_LOCK
|
||||
#define MAINMUTEX_UNLOCK
|
||||
#define WAITMUTEX_LOCK
|
||||
#define WAITMUTEX_UNLOCK
|
||||
|
||||
#define CLOSESOCKETS do { \
|
||||
if (closesocketswhendone) \
|
||||
|
@ -77,9 +73,8 @@ namespace qrtplib
|
|||
{
|
||||
|
||||
RTPUDPv4TransmitterNoBind::RTPUDPv4TransmitterNoBind() :
|
||||
init(false), created(false), waitingfordata(false), rtpsock(-1), rtcpsock(-1), mcastifaceIP(0), m_rtpPort(0), m_rtcpPort(0), multicastTTL(0), receivemode(
|
||||
AcceptAll), localhostname(0), localhostnamelength(0),
|
||||
supportsmulticasting(false), maxpacksize(0), closesocketswhendone(false), m_pAbortDesc(0)
|
||||
init(false), created(false), waitingfordata(false), rtpsock(-1), rtcpsock(-1), mcastifaceIP(0), m_rtpPort(0), m_rtcpPort(0), multicastTTL(0), receivemode(AcceptAll), localhostname(
|
||||
0), localhostnamelength(0), supportsmulticasting(false), maxpacksize(0), closesocketswhendone(false), m_pAbortDesc(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -270,11 +265,9 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ALREADYCREATED;
|
||||
}
|
||||
|
||||
|
@ -286,7 +279,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
{
|
||||
if (transparams->GetTransmissionProtocol() != RTPTransmitter::IPv4UDPProto)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ILLEGALPARAMETERS;
|
||||
}
|
||||
params = (const RTPUDPv4TransmissionNoBindParams *) transparams;
|
||||
|
@ -309,7 +302,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
int status = GetAutoSockets(params->GetBindIP(), params->GetAllowOddPortbase(), params->GetRTCPMultiplexing(), &rtpsock, &rtcpsock, &m_rtpPort, &m_rtcpPort);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
@ -318,7 +311,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
// Check if portbase is even (if necessary)
|
||||
if (!params->GetAllowOddPortbase() && params->GetPortbase() % 2 != 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_PORTBASENOTEVEN;
|
||||
}
|
||||
|
||||
|
@ -327,7 +320,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
rtpsock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if (rtpsock == RTPSOCKERR)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTCREATESOCKET;
|
||||
}
|
||||
|
||||
|
@ -340,7 +333,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if (rtcpsock == RTPSOCKERR)
|
||||
{
|
||||
RTPCLOSE(rtpsock);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTCREATESOCKET;
|
||||
}
|
||||
}
|
||||
|
@ -353,14 +346,14 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if (setsockopt(rtpsock, SOL_SOCKET, SO_RCVBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTPRECEIVEBUF;
|
||||
}
|
||||
size = params->GetRTPSendBuffer();
|
||||
if (setsockopt(rtpsock, SOL_SOCKET, SO_SNDBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTPTRANSMITBUF;
|
||||
}
|
||||
|
||||
|
@ -370,14 +363,14 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if (setsockopt(rtcpsock, SOL_SOCKET, SO_RCVBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTCPRECEIVEBUF;
|
||||
}
|
||||
size = params->GetRTCPSendBuffer();
|
||||
if (setsockopt(rtcpsock, SOL_SOCKET, SO_SNDBUF, (const char *) &size, sizeof(int)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTSETRTCPTRANSMITBUF;
|
||||
}
|
||||
}
|
||||
|
@ -393,7 +386,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if ((status = CreateLocalIPList()) < 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
}
|
||||
|
@ -410,7 +403,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if (maximumpacketsize > RTPUDPV4TRANSNOBIND_MAXPACKSIZE)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -419,7 +412,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if ((status = m_abortDesc.Init()) < 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
m_pAbortDesc = &m_abortDesc;
|
||||
|
@ -430,7 +423,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
if (!m_pAbortDesc->IsInitialized())
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_ABORTDESC_NOTINIT;
|
||||
}
|
||||
}
|
||||
|
@ -445,7 +438,7 @@ int RTPUDPv4TransmitterNoBind::Create(size_t maximumpacketsize, const RTPTransmi
|
|||
|
||||
waitingfordata = false;
|
||||
created = true;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -453,7 +446,7 @@ int RTPUDPv4TransmitterNoBind::BindSockets(const RTPTransmissionParams *transpar
|
|||
{
|
||||
if (transparams->GetTransmissionProtocol() != RTPTransmitter::IPv4UDPProto)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ILLEGALPARAMETERS;
|
||||
}
|
||||
|
||||
|
@ -470,7 +463,7 @@ int RTPUDPv4TransmitterNoBind::BindSockets(const RTPTransmissionParams *transpar
|
|||
if (bind(rtpsock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTBINDRTPSOCKET;
|
||||
}
|
||||
|
||||
|
@ -493,7 +486,7 @@ int RTPUDPv4TransmitterNoBind::BindSockets(const RTPTransmissionParams *transpar
|
|||
if (bind(rtcpsock, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) != 0)
|
||||
{
|
||||
CLOSESOCKETS;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_CANTBINDRTCPSOCKET;
|
||||
}
|
||||
|
||||
|
@ -510,10 +503,9 @@ void RTPUDPv4TransmitterNoBind::Destroy()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -538,14 +530,13 @@ void RTPUDPv4TransmitterNoBind::Destroy()
|
|||
{
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
m_abortDesc.Destroy(); // Doesn't do anything if not initialized
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_LOCK// to make sure that the WaitForIncomingData function ended
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
// to make sure that the WaitForIncomingData function ended
|
||||
|
||||
}
|
||||
else
|
||||
m_abortDesc.Destroy(); // Doesn't do anything if not initialized
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
}
|
||||
|
||||
RTPTransmissionInfo *RTPUDPv4TransmitterNoBind::GetTransmissionInfo()
|
||||
|
@ -553,9 +544,8 @@ RTPTransmissionInfo *RTPUDPv4TransmitterNoBind::GetTransmissionInfo()
|
|||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
RTPTransmissionInfo *tinf = new RTPUDPv4TransmissionNoBindInfo(localIPs, rtpsock, rtcpsock, m_rtpPort, m_rtcpPort);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return tinf;
|
||||
}
|
||||
|
||||
|
@ -572,10 +562,9 @@ int RTPUDPv4TransmitterNoBind::GetLocalHostName(uint8_t *buffer, size_t *bufferl
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
|
@ -583,7 +572,7 @@ if (localhostname == 0)
|
|||
{
|
||||
if (localIPs.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOLOCALIPS;
|
||||
}
|
||||
|
||||
|
@ -655,7 +644,7 @@ if (!hostnames.empty()) // try to select the most appropriate hostname
|
|||
localhostname = new uint8_t[localhostnamelength + 1];
|
||||
if (localhostname == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
memcpy(localhostname, (*it).c_str(), localhostnamelength);
|
||||
|
@ -680,7 +669,7 @@ if (!found) // use an IP address
|
|||
localhostname = new uint8_t[localhostnamelength + 1];
|
||||
if (localhostname == 0)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_OUTOFMEM;
|
||||
}
|
||||
memcpy(localhostname, str, localhostnamelength);
|
||||
|
@ -691,14 +680,13 @@ if (!found) // use an IP address
|
|||
if ((*bufferlength) < localhostnamelength)
|
||||
{
|
||||
*bufferlength = localhostnamelength; // tell the application the required size of the buffer
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL;
|
||||
}
|
||||
|
||||
memcpy(buffer, localhostname, localhostnamelength);
|
||||
*bufferlength = localhostnamelength;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -710,8 +698,6 @@ return false;
|
|||
if (addr == 0)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (created && addr->GetAddressType() == RTPAddress::IPv4Address)
|
||||
|
@ -742,7 +728,6 @@ else
|
|||
else
|
||||
v = false;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -753,10 +738,9 @@ return ERR_RTP_UDPV4TRANS_NOTINIT;
|
|||
|
||||
int status;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
status = PollSocket(true); // poll RTP socket
|
||||
|
@ -765,7 +749,7 @@ if (rtpsock != rtcpsock) // no need to poll twice when multiplexing
|
|||
if (status >= 0)
|
||||
status = PollSocket(false); // poll RTCP socket
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -774,16 +758,14 @@ int RTPUDPv4TransmitterNoBind::WaitForIncomingData(const RTPTime &delay, bool *d
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (waitingfordata)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_ALREADYWAITING;
|
||||
}
|
||||
|
||||
|
@ -799,25 +781,19 @@ const int idxAbort = 2;
|
|||
|
||||
waitingfordata = true;
|
||||
|
||||
WAITMUTEX_LOCK
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
int status = RTPSelect(socks, readflags, 3, delay);
|
||||
if (status < 0)
|
||||
{
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
waitingfordata = false;
|
||||
if (!created) // destroy called
|
||||
{
|
||||
MAINMUTEX_UNLOCK;
|
||||
WAITMUTEX_UNLOCK
|
||||
;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -833,8 +809,6 @@ else
|
|||
*dataavailable = false;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
WAITMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -843,21 +817,19 @@ int RTPUDPv4TransmitterNoBind::AbortWait()
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (!waitingfordata)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTWAITING;
|
||||
}
|
||||
|
||||
m_pAbortDesc->SendAbortSignal();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -866,16 +838,14 @@ int RTPUDPv4TransmitterNoBind::SendRTPData(const void *data, size_t len)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -886,7 +856,6 @@ sendto(rtpsock, (const char *) data, len, 0, (const struct sockaddr *) destinati
|
|||
destinations.GotoNextElement();
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -895,16 +864,14 @@ int RTPUDPv4TransmitterNoBind::SendRTCPData(const void *data, size_t len)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (len > maxpacksize)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
|
||||
|
@ -915,7 +882,6 @@ sendto(rtcpsock, (const char *) data, len, 0, (const struct sockaddr *) destinat
|
|||
destinations.GotoNextElement();
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -924,24 +890,21 @@ int RTPUDPv4TransmitterNoBind::AddDestination(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
|
||||
RTPIPv4Destination dest;
|
||||
if (!RTPIPv4Destination::AddressToDestination(addr, dest))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
int status = destinations.AddElement(dest);
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -950,23 +913,20 @@ int RTPUDPv4TransmitterNoBind::DeleteDestination(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
RTPIPv4Destination dest;
|
||||
if (!RTPIPv4Destination::AddressToDestination(addr, dest))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
int status = destinations.DeleteElement(dest);
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -975,10 +935,9 @@ void RTPUDPv4TransmitterNoBind::ClearDestinations()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created)
|
||||
destinations.Clear();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
bool RTPUDPv4TransmitterNoBind::SupportsMulticasting()
|
||||
|
@ -986,8 +945,6 @@ bool RTPUDPv4TransmitterNoBind::SupportsMulticasting()
|
|||
if (!init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (!created)
|
||||
|
@ -995,7 +952,6 @@ v = false;
|
|||
else
|
||||
v = supportsmulticasting;
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -1006,18 +962,16 @@ int RTPUDPv4TransmitterNoBind::JoinMulticastGroup(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
|
@ -1026,7 +980,7 @@ uint32_t mcastIP = address.GetIP();
|
|||
|
||||
if (!RTPUDPV4TRANSNOBIND_IS_MCASTADDR(mcastIP))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTAMULTICASTADDRESS;
|
||||
}
|
||||
|
||||
|
@ -1037,7 +991,7 @@ RTPUDPV4TRANSNOBIND_MCASTMEMBERSHIP(rtpsock, IP_ADD_MEMBERSHIP, mcastIP, status)
|
|||
if (status != 0)
|
||||
{
|
||||
multicastgroups.DeleteElement(mcastIP);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_COULDNTJOINMULTICASTGROUP;
|
||||
}
|
||||
|
||||
|
@ -1048,12 +1002,12 @@ if (status != 0)
|
|||
{
|
||||
RTPUDPV4TRANSNOBIND_MCASTMEMBERSHIP(rtpsock, IP_DROP_MEMBERSHIP, mcastIP, status);
|
||||
multicastgroups.DeleteElement(mcastIP);
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_COULDNTJOINMULTICASTGROUP;
|
||||
}
|
||||
}
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1062,18 +1016,16 @@ int RTPUDPv4TransmitterNoBind::LeaveMulticastGroup(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
|
||||
|
@ -1082,7 +1034,7 @@ uint32_t mcastIP = address.GetIP();
|
|||
|
||||
if (!RTPUDPV4TRANSNOBIND_IS_MCASTADDR(mcastIP))
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTAMULTICASTADDRESS;
|
||||
}
|
||||
|
||||
|
@ -1096,7 +1048,6 @@ RTPUDPV4TRANSNOBIND_MCASTMEMBERSHIP(rtcpsock, IP_DROP_MEMBERSHIP, mcastIP, statu
|
|||
status = 0;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1105,7 +1056,6 @@ void RTPUDPv4TransmitterNoBind::LeaveAllMulticastGroups()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created)
|
||||
{
|
||||
multicastgroups.GotoFirstElement();
|
||||
|
@ -1124,7 +1074,7 @@ multicastgroups.GotoNextElement();
|
|||
}
|
||||
multicastgroups.Clear();
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
#else // no multicast support
|
||||
|
@ -1150,10 +1100,9 @@ int RTPUDPv4TransmitterNoBind::SetReceiveMode(RTPTransmitter::ReceiveMode m)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (m != receivemode)
|
||||
|
@ -1161,7 +1110,7 @@ if (m != receivemode)
|
|||
receivemode = m;
|
||||
acceptignoreinfo.Clear();
|
||||
}
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1170,30 +1119,27 @@ int RTPUDPv4TransmitterNoBind::AddToIgnoreList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::IgnoreSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessAddAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1202,30 +1148,27 @@ int RTPUDPv4TransmitterNoBind::DeleteFromIgnoreList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::IgnoreSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1234,10 +1177,9 @@ void RTPUDPv4TransmitterNoBind::ClearIgnoreList()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created && receivemode == RTPTransmitter::IgnoreSome)
|
||||
ClearAcceptIgnoreInfo();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
int RTPUDPv4TransmitterNoBind::AddToAcceptList(const RTPAddress &addr)
|
||||
|
@ -1245,30 +1187,27 @@ int RTPUDPv4TransmitterNoBind::AddToAcceptList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::AcceptSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessAddAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1277,30 +1216,27 @@ int RTPUDPv4TransmitterNoBind::DeleteFromAcceptList(const RTPAddress &addr)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
int status;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (addr.GetAddressType() != RTPAddress::IPv4Address)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_INVALIDADDRESSTYPE;
|
||||
}
|
||||
if (receivemode != RTPTransmitter::AcceptSome)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_DIFFERENTRECEIVEMODE;
|
||||
}
|
||||
|
||||
const RTPIPv4Address &address = (const RTPIPv4Address &) addr;
|
||||
status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(), address.GetPort());
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1309,10 +1245,9 @@ void RTPUDPv4TransmitterNoBind::ClearAcceptList()
|
|||
if (!init)
|
||||
return;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (created && receivemode == RTPTransmitter::AcceptSome)
|
||||
ClearAcceptIgnoreInfo();
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
}
|
||||
|
||||
int RTPUDPv4TransmitterNoBind::SetMaximumPacketSize(size_t s)
|
||||
|
@ -1320,19 +1255,18 @@ int RTPUDPv4TransmitterNoBind::SetMaximumPacketSize(size_t s)
|
|||
if (!init)
|
||||
return ERR_RTP_UDPV4TRANS_NOTINIT;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_NOTCREATED;
|
||||
}
|
||||
if (s > RTPUDPV4TRANSNOBIND_MAXPACKSIZE)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return ERR_RTP_UDPV4TRANS_SPECIFIEDSIZETOOBIG;
|
||||
}
|
||||
maxpacksize = s;
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1341,8 +1275,6 @@ bool RTPUDPv4TransmitterNoBind::NewDataAvailable()
|
|||
if (!init)
|
||||
return false;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
bool v;
|
||||
|
||||
if (!created)
|
||||
|
@ -1355,7 +1287,6 @@ else
|
|||
v = true;
|
||||
}
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return v;
|
||||
}
|
||||
|
||||
|
@ -1364,25 +1295,22 @@ RTPRawPacket *RTPUDPv4TransmitterNoBind::GetNextPacket()
|
|||
if (!init)
|
||||
return 0;
|
||||
|
||||
MAINMUTEX_LOCK
|
||||
|
||||
RTPRawPacket *p;
|
||||
|
||||
if (!created)
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
if (rawpacketlist.empty())
|
||||
{
|
||||
MAINMUTEX_UNLOCK
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
p = *(rawpacketlist.begin());
|
||||
rawpacketlist.pop_front();
|
||||
|
||||
MAINMUTEX_UNLOCK
|
||||
return p;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue