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.

[参考译文] CC3235SF:解析 HTTP 元数据 TLV

Guru**** 2558250 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1024831/cc3235sf-parsing-http-metadata-tlv

器件型号:CC3235SF

您好!

我阅读 swru55m 文档和9.7 Host HTTP Requests Processing 部分。

据说,数据被转换为 TLV 表示形式,如下所示:  

1字节: 类型

2字节:大小

N 字节:值

当我读取 OTA 或 OOB 示例时, parseUrlEncoded 方法 似乎构造为:

2字节:类型

1字节:大小

N 字节:值

     sl_Memcpy((uint8_t* )argvArray, (uint8_t* )&elementType,
                          ARGV_LEN_OFFSET);
                argvArray += ARGV_LEN_OFFSET;
                *argvArray++ = 1; /* length field */
                *argvArray++ = characteristic;

所以... 近况如何?

此致、

特奥多尔

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

    这看起来像是代码中的错误!!!

    编程人员指南是正确的。

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

    嗯... 是的。 ^^Ω'

    整个 OTA 工程和 OOB 工程都基于此

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

    我们将对此进行仔细检查、并在 此处报告结果。

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

    已验证:类型为1字节、长度为2B。

    BR、

    Kobi

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

    代码中没有错误、 parseUrlEncoded 中的代码不是相关的代码。

    您应该引用 parseHttpRequestMetadata 进行正确的解析。

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

    您好、Kobi、

    如果您仔细查看"parseHttpRequestMetadata"中的代码、

    类型和长度定义为 :   

    uint16_t 元件类型;
    uint16_t len;

    16为2个字节...

    可能 HTTP pMetadata 中的 TLV 正常。 但是 ArgvCallback 的解析和构造似乎与...不同。

    但下面是"sl_NetApp_Request_metadata_type_HTTP_content_LEN"切换案例,它将解析描述为 :

    (*argcCallback)++;
    /* add content type */
    elementType = setElementType(1, *requestIdx,
    CONTENT_LEN_TYPE);
    sl_Memcpy((uint8_t* )argvArray, (uint8_t* )&elementType,
    		  ARGV_LEN_OFFSET);
    argvArray += ARGV_LEN_OFFSET;
    *argvArray++ = len; /* add content length */
    sl_Memcpy((uint8_t* )argvArray, pTlv, len);
    sl_Memcpy((uint8_t* )&value, pTlv, len);

    它被显式写入(sl_memcpy ((uint8_t*) argvArray、(uint8_t*)和 ElementType、
                             argv_LEN_offset);) 在元素类型中存储2个字节!

    阵列的波束结构如下:

    跳过上述2个字节 : argvArray += ARGV_LEN_OFFSET;

    仅用1个字节复制长度 :*argvArray++= len;/*添加内容长度*/

     复制实际值: sl_memcpy((uint8_t*) argvArray、pTlv、len);

    此 argvArray 也用于 parseUrlEncoded...

    即使"setElementType"方法返回16位类型...

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

    您好!

    我不确定您是否看到任何问题、或者您只是想了解代码。

    argv 是用于存储 URL 特征值 的应用程序结构、例如、它将根据用户初始化在以下 URL "google.com?a=3&b=4""中包含"a"和"b"条目(因此用户将首先定义他正在等待特征"a"和"b")。 它也是 TLV、确实定义为类型(2B)和长度(1B)、但它与 NWP 准备的元数据 TLV (定义为程序员指南)无关。

     parseHttpRequestMetadata 适当地使用元数据的类型和长度(请参阅下面或第1889行):

    uint8_t type;
    uint16_t len;

    我同意代码令人困惑、因为它同时使用2个不同的 TLV 结构-具体而言、内容长度取自标题的元数据 TLV 列表、并复制到应用 TLV 列表(在您指向的代码中)。

    BR、

    Kobi  

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

    你好,Kobi;)

    感谢您、我可以看到代码中有两个内部 TLV 结构。

    那么,这两种类型和长度之间没有直接的联系?

    没有发生不良铸造情况的机会?

    此致、

    特奥多尔

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

    我找不到任何铸造问题。

    如果您遇到特定问题、请尝试对其进行调试并向我展示该问题。  

    (可以在 parseHttpRequestMetadata 中设置断点并按照代码执行操作)

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

    如果我发现这一点、我会再回来。

    此致、