本文整理汇总了C++中CBuffer::cnt方法的典型用法代码示例。如果您正苦于以下问题:C++ CBuffer::cnt方法的具体用法?C++ CBuffer::cnt怎么用?C++ CBuffer::cnt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CBuffer
的用法示例。
在下文中一共展示了CBuffer::cnt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: parseHttpResponse
bool parseHttpResponse(CBuffer& buffer,bool& haserr)
{
assert(!buffer.empty());
if(buffer.empty())
return false;
haserr = false;
if(!bHeaderParsed)
bHeaderParsed = ParseResponseHeader(buffer,bGZip,bChunked,nContentLen,nError);
if(!bHeaderParsed)
return false;
if(200 != nError)
return true;
bool isEnd = false;
if(!bChunked)
{
assert(nContentLen > 0);
isEnd = ((int)buffer.cnt() >= nContentLen);
}
else
{
static char endChunked[] = "\r\n0\r\n\r\n";
static size_t endChunkedLen = strlen(endChunked);
if(buffer.cnt() >= strlen(endChunked))
isEnd = (0 == memcmp(endChunked,(char*)buffer[buffer.rpos() + buffer.cnt() - strlen(endChunked)],strlen(endChunked)));
}
if(isEnd)
{
if(!bChunked)
{
if(bGZip)
{
// char* p_buf = NULL;
// char* p_inbuf = (char*)(buffer[buffer.rpos()]);
// int nResult = ungzip(p_inbuf, buffer.cnt(), &p_buf, 1);
// assert(Z_OK == nResult);
// if(Z_OK == nResult)
// {
// //gzip有10个字节的头部和8个字节的尾部
//
// std::string sBuf(p_buf);
// sBuf.erase(sBuf.rfind('}') + 1);
// buffer.clear();
// //_pBuffer->Write((uint8*)p_buf,strlen(p_buf)-18);
// buffer<<sBuf;
// free(p_buf);
// }
CBuffer outBuffer;
if(0 == ungzip2((char*)(buffer[buffer.rpos()]),buffer.cnt(),1,outBuffer))
{
outBuffer.swap(buffer);
}
else
{
assert(false);
}
}
}
else
{
CBuffer thebuffer;
while(!buffer.empty())
{
const char* pStart = (const char*)buffer[buffer.rpos()];
char* pEnd = NULL;
int datasize = strtol(pStart,&pEnd,16);
if(0 == datasize && pEnd == pStart)
{
haserr = true;
break;
}
if(0 > datasize)
{
haserr = true;
break;
}
if(datasize > (int)buffer.cnt() -2)
{
haserr = true;
break;
}
buffer.rpos(buffer.rpos() + (pEnd - pStart) + 2);
if(datasize > 0)
thebuffer.Write(buffer[buffer.rpos()],datasize);
buffer.rpos(buffer.rpos() + datasize + 2);
if(0 >= datasize)
break;
}
assert(!haserr);
buffer.swap(thebuffer);
}
}
//.........这里部分代码省略.........