本文整理汇总了C++中PacketBuffer::getHeader方法的典型用法代码示例。如果您正苦于以下问题:C++ PacketBuffer::getHeader方法的具体用法?C++ PacketBuffer::getHeader怎么用?C++ PacketBuffer::getHeader使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PacketBuffer
的用法示例。
在下文中一共展示了PacketBuffer::getHeader方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ntohl
//
//We do two checks to see that we have enough data to make
//a full packet. One check is to see that we have enough data
//the make a header. The second is to see if there is enough
//to make a packet with a header plus it's data.
//We return NULL if there wasn't
//enough data to make a full packet. If there is enough data
//we return _one_ complete packet, and make sure the buffer
//is ready to extract more packets, and recieve additional
//data.
//
//A full packet is the size of the packet header (all packets
//_must_ have full header, plus the size of any data. There
//doesn't always have to be any data with the packet.
//
PacketBuffer* BufferedSocket::parsForPacket()
{
PacketBuffer* pPacket = NULL;
char* phead = m_pbuffer;
char* ptail = phead+m_nBytesInBuf;
unsigned32 nSize;
if(m_nBytesInBuf<PacketBuffer::getHeaderSize())
return NULL;
nSize = ntohl(*(unsigned32*)phead)+PacketBuffer::getHeaderSize();
if((unsigned32)(ptail-phead) < nSize)
return NULL;
//copy in the header, then copy in packet data, less the header data
pPacket = new PacketBuffer(0,nSize-PacketBuffer::getHeaderSize()); //new packet
memcpy(pPacket->getHeader(),phead,PacketBuffer::getHeaderSize());
pPacket->makeHostReady(true); //convert header from network byte order
if(nSize>PacketBuffer::getHeaderSize()) //if we have data after the header
memcpy(pPacket->getBuffer(),phead+PacketBuffer::getHeaderSize(),pPacket->getBufferSize());
phead += nSize;
m_nBytesInBuf -= nSize;
if(phead>=ptail)
{
//there is no more data in the buffer
m_ptr = m_pbuffer;
m_nBytesInBuf = 0;
}
else
{
//we need to move the unparsed data to the beginning of the buffer
memmove(m_pbuffer,phead,m_nBytesInBuf);
m_ptr = m_pbuffer+m_nBytesInBuf;
}
return pPacket;
}