yincheng.zhong
2 天以前 567085ead3f6adaabd884f16ab4b17c62e8f0403
STM32H743/FML/Internet/HTTPClient.c
@@ -323,30 +323,67 @@
                        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;