| | |
| | | l_u32HTTPRecvTotalLen = l_pu8HTTPRespBody - (HIDO_UINT8 *)l_acHTTPRecvBuff + l_u32HTTPContentLength; |
| | | l_eHTTPRecvState = HTTP_RECV_STATE_BODY; |
| | | |
| | | // 对于GET_FILE方法,立即回调传递头部信息(DataLen=0表示首次回调) |
| | | if(HTTP_METHOD_GET_FILE == l_eHTTPMethod) |
| | | { |
| | | HIDO_UINT32 u32BodyLen = l_u32HTTPRecvBuffLen - (l_pu8HTTPRespBody - (HIDO_UINT8 *)l_acHTTPRecvBuff); |
| | | if(u32BodyLen > 0) |
| | | { |
| | | // 头部接收时已经包含部分Body数据,立即回调 |
| | | HTTPClient_Response(l_u32HTTPRespCode, l_pu8HTTPRespBody, u32BodyLen); |
| | | // 重置缓冲区,准备接收后续数据 |
| | | l_u32HTTPRecvBuffLen = 0; |
| | | l_u32HTTPRecvTotalLen = l_u32HTTPContentLength - u32BodyLen; |
| | | } |
| | | else |
| | | { |
| | | // 头部刚接收完,Body数据还未到,先回调头部信息 |
| | | HTTPClient_Response(l_u32HTTPRespCode, HIDO_NULL, 0); |
| | | l_u32HTTPRecvBuffLen = 0; |
| | | l_u32HTTPRecvTotalLen = l_u32HTTPContentLength; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 非GET_FILE方法,保持原有逻辑 |
| | | if (l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen) |
| | | { |
| | | // 对于GET_FILE方法,需要先传递body数据 |
| | | if(HTTP_METHOD_GET_FILE == l_eHTTPMethod && l_u32HTTPContentLength > 0) |
| | | { |
| | | HTTPClient_Response(l_u32HTTPRespCode, l_pu8HTTPRespBody, l_u32HTTPContentLength); |
| | | Socket_Close(l_i32HTTPClientSockID); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | else if(HTTP_RECV_STATE_BODY == l_eHTTPRecvState) |
| | | { |
| | | // BODY接收状态 |
| | | if(HTTP_METHOD_GET_FILE == l_eHTTPMethod) |
| | | { |
| | | // GET_FILE方法:分块回调,接收满缓冲区就回调 |
| | | if(l_u32HTTPRecvBuffLen >= HTTP_RECV_BUFF_SIZE - 1024 || |
| | | l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen) |
| | | { |
| | | HTTPClient_Response(l_u32HTTPRespCode, (HIDO_UINT8 *)l_acHTTPRecvBuff, l_u32HTTPRecvBuffLen); |
| | | l_u32HTTPRecvTotalLen -= l_u32HTTPRecvBuffLen; |
| | | l_u32HTTPRecvBuffLen = 0; |
| | | |
| | | // 所有数据接收完成 |
| | | if(l_u32HTTPRecvTotalLen == 0) |
| | | { |
| | | Socket_Close(l_i32HTTPClientSockID); |
| | | } |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 非GET_FILE方法:等待完整接收 |
| | | if (l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen) |
| | | { |
| | | // 对于GET_FILE方法,需要先传递body数据 |
| | | if(HTTP_METHOD_GET_FILE == l_eHTTPMethod && l_u32HTTPContentLength > 0) |
| | | { |
| | | HTTPClient_Response(l_u32HTTPRespCode, l_pu8HTTPRespBody, l_u32HTTPContentLength); |
| | | } |
| | | Socket_Close(l_i32HTTPClientSockID); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | while(HIDO_TRUE); |
| | | |
| | | break; |