Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "precomp.h"
#include "NacList.h"
#include "PacketSender.h"
PacketSender::PacketSender() : m_SendQueue(PS_INITSIZE, PS_GROWRATE) // shouldn't ever get big
{ InitializeCriticalSection(&m_cs); }
PacketSender::~PacketSender() { DeleteCriticalSection(&m_cs); }
// takes the first packets out of the queue and sends it
// returns true if a packet was taken out of the queue and sent
BOOL PacketSender::SendPacket() { BOOL bRet; PS_QUEUE_ELEMENT pqe; WSABUF wsabuf; RTP_HDR *pRtpHdr; DWORD dwType=PS_AUDIO;
EnterCriticalSection(&m_cs);
bRet = m_SendQueue.PopFront(&pqe); if (bRet) { ASSERT(pqe.data);
pRtpHdr = (RTP_HDR*)(pqe.data - sizeof(RTP_HDR)); *(DWORD *)pRtpHdr = 0; pRtpHdr->ts = pqe.pMP->GetTimestamp(); pRtpHdr->m = pqe.fMark; pRtpHdr->payload = pqe.pMP->GetPayload();
if (pqe.pHeaderInfo && pqe.dwHdrSize && (pqe.dwPacketType==PS_VIDEO)) { CopyMemory(pqe.data, pqe.pHeaderInfo, pqe.dwHdrSize); }
wsabuf.buf = (char *)pRtpHdr; wsabuf.len = pqe.dwSize + sizeof(RTP_HDR);
if (FAILED(pqe.pRTPSend->Send(&wsabuf, 1, NULL, NULL))) { LOG(((pqe.dwPacketType == PS_VIDEO) ? LOGMSG_VIDSEND_AUD_NOT_SEND : LOGMSG_AUDSEND_AUD_NOT_SEND, pqe.dwSize + sizeof (RTP_HDR), pqe.pMP->m_timestamp)); DEBUGMSG (ZONE_DP, ("Check_Send: pRTPSend->Send failed\r\n" )); } else { LOG(((pqe.dwPacketType == PS_VIDEO) ? LOGMSG_VIDSEND_AUD_SEND : LOGMSG_AUDSEND_AUD_SEND, pqe.dwSize + sizeof (RTP_HDR), pqe.pMP->m_timestamp, GetTickCount())); }
if (pqe.pHeaderInfo) { MemFree ((BYTE *)(pqe.pHeaderInfo)); }
}
LeaveCriticalSection(&m_cs);
return bRet; }
|