From 567085ead3f6adaabd884f16ab4b17c62e8f0403 Mon Sep 17 00:00:00 2001
From: yincheng.zhong <634916154@qq.com>
Date: 星期日, 21 十二月 2025 22:28:09 +0800
Subject: [PATCH] OTA升级功能调通,准备增加boot的代码

---
 STM32H743/FML/Internet/HTTPClient.c |   57 +++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/STM32H743/FML/Internet/HTTPClient.c b/STM32H743/FML/Internet/HTTPClient.c
index 5dd4da6..6e88666 100644
--- a/STM32H743/FML/Internet/HTTPClient.c
+++ b/STM32H743/FML/Internet/HTTPClient.c
@@ -323,27 +323,64 @@
                         l_u32HTTPRecvTotalLen = l_pu8HTTPRespBody - (HIDO_UINT8 *)l_acHTTPRecvBuff + l_u32HTTPContentLength;
                         l_eHTTPRecvState = HTTP_RECV_STATE_BODY;
 
-                        if (l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen)
+                        // 瀵逛簬GET_FILE鏂规硶锛岀珛鍗冲洖璋冧紶閫掑ご閮ㄤ俊鎭紙DataLen=0琛ㄧず棣栨鍥炶皟锛�
+                        if(HTTP_METHOD_GET_FILE == l_eHTTPMethod)
                         {
-                            // 瀵逛簬GET_FILE鏂规硶锛岄渶瑕佸厛浼犻�抌ody鏁版嵁
-                            if(HTTP_METHOD_GET_FILE == l_eHTTPMethod && l_u32HTTPContentLength > 0)
+                            HIDO_UINT32 u32BodyLen = l_u32HTTPRecvBuffLen - (l_pu8HTTPRespBody - (HIDO_UINT8 *)l_acHTTPRecvBuff);
+                            if(u32BodyLen > 0)
                             {
-                                HTTPClient_Response(l_u32HTTPRespCode, l_pu8HTTPRespBody, l_u32HTTPContentLength);
+                                // 澶撮儴鎺ユ敹鏃跺凡缁忓寘鍚儴鍒咮ody鏁版嵁锛岀珛鍗冲洖璋�
+                                HTTPClient_Response(l_u32HTTPRespCode, l_pu8HTTPRespBody, u32BodyLen);
+                                // 閲嶇疆缂撳啿鍖猴紝鍑嗗鎺ユ敹鍚庣画鏁版嵁
+                                l_u32HTTPRecvBuffLen = 0;
+                                l_u32HTTPRecvTotalLen = l_u32HTTPContentLength - u32BodyLen;
                             }
-                            Socket_Close(l_i32HTTPClientSockID);
+                            else
+                            {
+                                // 澶撮儴鍒氭帴鏀跺畬锛孊ody鏁版嵁杩樻湭鍒帮紝鍏堝洖璋冨ご閮ㄤ俊鎭�
+                                HTTPClient_Response(l_u32HTTPRespCode, HIDO_NULL, 0);
+                                l_u32HTTPRecvBuffLen = 0;
+                                l_u32HTTPRecvTotalLen = l_u32HTTPContentLength;
+                            }
+                        }
+                        else
+                        {
+                            // 闈濭ET_FILE鏂规硶锛屼繚鎸佸師鏈夐�昏緫
+                            if (l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen)
+                            {
+                                Socket_Close(l_i32HTTPClientSockID);
+                            }
                         }
                     }
                 }
-                else
+                else if(HTTP_RECV_STATE_BODY == l_eHTTPRecvState)
                 {
-                    if (l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen)
+                    // BODY鎺ユ敹鐘舵��
+                    if(HTTP_METHOD_GET_FILE == l_eHTTPMethod)
                     {
-                        // 瀵逛簬GET_FILE鏂规硶锛岄渶瑕佸厛浼犻�抌ody鏁版嵁
-                        if(HTTP_METHOD_GET_FILE == l_eHTTPMethod && l_u32HTTPContentLength > 0)
+                        // 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
+                    {
+                        // 闈濭ET_FILE鏂规硶锛氱瓑寰呭畬鏁存帴鏀�
+                        if (l_u32HTTPRecvBuffLen >= l_u32HTTPRecvTotalLen)
                         {
                             HTTPClient_Response(l_u32HTTPRespCode, l_pu8HTTPRespBody, l_u32HTTPContentLength);
+                            Socket_Close(l_i32HTTPClientSockID);
                         }
-                        Socket_Close(l_i32HTTPClientSockID);
                     }
                 }
             }

--
Gitblit v1.10.0