This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3220:OtaHttpClient 中存在错误

Guru**** 2578865 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/699513/cc3220-bug-in-otahttpclient

器件型号:CC3220

您好!

我们刚刚在 OtaHttpClient 函数 HttpClient_RecvSkipHdr()中发现了一个错误。
我假设此函数应跳过 HTTP 标头并返回不带标头的剩余数据大小。 但是、当第一个接收的段仅包含 HTTP 标头且返回值为0时、我们会遇到边沿情况。 这听起来很少见、但在使用 python -m http.server 时、情况往往会发生。

以下是建议的解决方法:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Norman、

    我们将对此进行研究。 感谢您的建议。

    最棒的
    Kevin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Norman、

    在您的方案中(通常情况下),您应该更好地使用"HttpClient_RecvSkipHdr ()",使其指向 contentLen (最后一个参数)。

    如果提供指针、函数将检索预期的内容长度。 然后、应用程序应 使用 HttpClient_Recv 继续轮询帧的其余部分。

    请参阅以下示例以供参考:

    BR、

    Kobi

    uint32_t contentLen、recvLen=0;

    int16_t Len;

    len = HttpClient_RecvSkipHdr (SockId、pRespBuf、RespBufSize、contentLen);

    while (Len >=0 && recvLen < contentLen)

      recvLen += Len;

      Len = HttpClient_Recv (SockId、pRespBuf+recvLen、RespBufSize-recvLen、0、MAX_EAGAIN_retries);

    如果(Len < 0)

    错误处理

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    看起来是一个有效的点,虽然您应该看看调用 HttpClient_RecvSkipHdr ()的 TI-OTA 库,但它是"simplelink_cc32xx_sdk_1_60_00_04\sources\ti\net\ota\sources\CdnClient.c"中的此函数:

    int16_t CdnClient_RecvSkipHdr (int16_t SockId、uint8_t * pRespBuf、int16_t RespBufSize)

    返回(HttpClient_RecvSkipHdr (SockId、pRespBuf、RespBufSize、NULL));


    这会将最后一个参数保留为空...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Norman、

    这是一个真正的问题(在 OTA 库中)。
    如果错误检查将按如下方式进行更改、我相信将解决此问题:

    if (0 > pOtaLib->RecvChunkSize)

    "Len=0"的处理错误、不应视为错误。


    将根据 OTA 内部逻辑读取其余的帧内容。
    我们将在下一个 SDK 中添加修复程序。

    BR、
    Kobi