当前位置: 首页>>代码示例>>C++>>正文


C++ CBuffer::cnt方法代码示例

本文整理汇总了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);
			}	
		}
//.........这里部分代码省略.........
开发者ID:hjhong,项目名称:MyDuiLib,代码行数:101,代码来源:WebService.cpp


注:本文中的CBuffer::cnt方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。