//Http解析协议部分
    uint8 HttpDispose(_HttpInfo* pHttpInfo, ACE_Message_Block* pCurrMessage, IMessageBlockManager* pMessageBlockManager, _Packet_Info* pPacketInfo)
    {
        if((NULL == pHttpInfo)||(NULL == pCurrMessage)||(NULL == pMessageBlockManager)||(NULL == pPacketInfo))
        {
            OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]ptrpoint is full.\n"));
            return PACKET_GET_ERROR;
        }

        char* pData   = pCurrMessage->rd_ptr();     //得到这个数据块的首字节
        uint32 u4Data = (uint32)pCurrMessage->length();     //得到这个数据块的长度

        //将收到的数据粘入缓冲等待做切包处理
        if(pHttpInfo->m_u4DataLength + u4Data > MAX_DECRYPTLENGTH)
        {
            OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]pHttpInfo is full.\n"));
            return PACKET_GET_ERROR;
        }

        //OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]sizeof()=%d.\n", sizeof(pHttpInfo->m_szData)));
        //OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]m_u4DataLength=%d.\n", pHttpInfo->m_u4DataLength));
        //OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]u4Data=%d.\n", u4Data));

        ACE_OS::memcpy(&pHttpInfo->m_szData[pHttpInfo->m_u4DataLength], pData, u4Data);
        pHttpInfo->m_u4DataLength += u4Data;
        //pHttpInfo->m_szData[pHttpInfo->m_u4DataLength] = '\0';

        //寻找Http包头
        char* pHttpHead = ACE_OS::strstr(pHttpInfo->m_szData, HTTP_HEAD_END);

        if(NULL == pHttpHead)
        {
            OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]pHttpHead is NULL.\n"));
            return PACKET_GET_NO_ENOUGTH;
        }

        //OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]http:\n%s", pHttpInfo->m_szData));
        uint32 u4HttpHeadLen = (uint32)(pHttpHead - pHttpInfo->m_szData + 4);
        //OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]u4HttpHeadLen=%d.\n", u4HttpHeadLen));

        //找到了完整的包头
        pPacketInfo->m_pmbHead = pMessageBlockManager->Create(u4HttpHeadLen + 1);

        if(NULL == pPacketInfo->m_pmbHead)
        {
            OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]m_pmbHead is NULL.\n"));
            return PACKET_GET_ERROR;
        }

        memcpy(pPacketInfo->m_pmbHead->wr_ptr(), (char*)pHttpInfo->m_szData, u4HttpHeadLen);
        pPacketInfo->m_pmbHead->wr_ptr(u4HttpHeadLen);

        //设置命令字(HTTP固定命令字)
        pPacketInfo->m_u2PacketCommandID = 0xea01;
        pPacketInfo->m_u4HeadSrcLen      = u4HttpHeadLen + 1;
        pPacketInfo->m_u4HeadCurrLen     = u4HttpHeadLen + 1;

        //查看有没有包体
        uint32 u4HttpBodyLength = 0;
        uint8 u1Ret = GetHttpBodyLen(pHttpInfo->m_szData, pHttpInfo->m_u4DataLength, u4HttpHeadLen, u4HttpBodyLength, pPacketInfo);

        if(u1Ret != PACKET_GET_ENOUGTH)
        {
            OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]u1Ret:%d.\n",u1Ret));
            return u1Ret;
        }

        //OUR_DEBUG((LM_ERROR, "[CPacketParse::HttpDispose]u4HttpBodyLength=%d.\n", u4HttpBodyLength));
        if(u4HttpBodyLength == 0)
        {
            //获得包体
            pPacketInfo->m_pmbBody = NULL;
            pPacketInfo->m_u4BodySrcLen  = 0;
            pPacketInfo->m_u4BodyCurrLen = 0;
        }
        else
        {
            //有包体,创建包体
            pPacketInfo->m_pmbBody = pMessageBlockManager->Create(u4HttpBodyLength + 1);

            if(NULL == pPacketInfo->m_pmbBody)
            {
                OUR_DEBUG((LM_ERROR, "[HttpDispose]m_pmbBody is NULL.\n"));
                return PACKET_GET_ERROR;
            }

            memcpy(pPacketInfo->m_pmbBody->wr_ptr(), (char*)pHttpHead+4, u4HttpBodyLength);
            pPacketInfo->m_pmbBody->wr_ptr(u4HttpBodyLength);

            pPacketInfo->m_u4BodySrcLen  = (uint32)u4HttpBodyLength + 1;
            pPacketInfo->m_u4BodyCurrLen = (uint32)u4HttpBodyLength + 1;
        }

        //处理完的数据从池中移除
        pCurrMessage->rd_ptr(u4Data);

        pHttpInfo->Clear();
        return (uint8)PACKET_GET_ENOUGTH;
    }
static int TestParseHttpRequest( struct HttpEnv *e , char *str )
{
	SOCKET			connect_sock ;
	struct sockaddr_in	connect_addr ;
	
	struct HttpBuffer	*b = NULL ;
	
	int			nret = 0 ;
	
	ResetHttpEnv( e );
	
	connect_sock = socket( AF_INET , SOCK_STREAM , IPPROTO_TCP ) ;
	if( connect_sock == -1 )
	{
		printf( "socket failed , errno[%d]\n" , errno );
		return -1;
	}
	
	memset( & connect_addr , 0x00 , sizeof(struct sockaddr_in) );
	connect_addr.sin_family = AF_INET;
	connect_addr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
	connect_addr.sin_port = htons( (unsigned short)9527 );
	
	nret = connect( connect_sock , (struct sockaddr *) & connect_addr , sizeof(struct sockaddr) ) ;
	if( nret == -1 )
	{
		printf( "connect failed , errno[%d]\n" , errno );
		return -1;
	}
	
	b = GetHttpRequestBuffer(e) ;
	nret = StrcatHttpBuffer( b , str ) ;
	if( nret )
	{
		printf( "StrcatfHttpBuffer failed[%d] , errno[%d]\n" , nret , errno );
		return -1;
	}
	
	nret = RequestHttp( connect_sock , NULL , e ) ;
	CLOSESOCKET( connect_sock );
	if( nret )
	{
		printf( "RequestHttp failed[%d] , errno[%d]\n" , nret , errno );
		return -1;
	}
	else
	{
		if( CountHttpHeaders( e ) > 0 )
		{
			struct HttpHeader *p_header = NULL ;
			
			p_header = TravelHttpHeaderPtr( e , NULL ) ;
			while( p_header )
			{
				printf( "HTTP HREADER [%.*s] [%.*s]\n" , GetHttpHeaderNameLen(p_header) , GetHttpHeaderNamePtr(p_header,NULL) , GetHttpHeaderValueLen(p_header) , GetHttpHeaderValuePtr(p_header,NULL) );
				p_header = TravelHttpHeaderPtr( e , p_header ) ;
			}
		}
		
		if( GetHttpBodyLen( e ) > 0 )
		{
			printf( "HTTP BODY [%.*s]\n" , GetHttpBodyLen(e) , GetHttpBodyPtr(e,NULL) );
		}
	}
	
	return 0;
}