qrtplib: removed mutex macros

This commit is contained in:
f4exb 2018-02-28 00:19:19 +01:00
parent 83cf128dc0
commit 493b37c37c
4 changed files with 2626 additions and 2913 deletions

View File

@ -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

View File

@ -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++)

View File

@ -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;
}

View File

@ -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;
}