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.

[参考译文] CC3220SF-LAUNCHXL:在 AWS TI 代码中为 MQTT 连接启用 ALPN 扩展

Guru**** 2562120 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/951944/cc3220sf-launchxl-enabling-alpn-extension-for-mqtt-connection-in-aws-ti-code

器件型号:CC3220SF-LAUNCHXL
主题中讨论的其他器件:CC3220SF

尽管我已经了解到 TI 不支持针对 MQTT 连接的 ALPN 扩展、但我已尝试针对 CC3220SF 添加如下 ALPN 选项:

#define sockesaws_IOT _ALPn_MQTT  "x-amzn-MQTT-ca"

const char * ppcALPNProtos[]={socketsaws_IOT _ALPn_MQTT};

sTIRetCode = sl_SetSockOpt( pxSocketContext->sSocketDescriptor,sl_SOL_Socket,sl_SO_SECURE_ALPN,ppcALPNProtos,sizeof ( ppcALPNProtos ));

这是通过通读 TI 的一些文档来实现的、以启用 ALPN 套接字选项。 完成此操作后、我通过调试了解到这个套接字选项被成功设置并且套接字连接也被成功建立。 但问题出在 MQTT 连接、这会导致等待 CONNACK 数据包的超时、从而导致故障。

那么、我能否在通过443端口建立 MQTT 连接的过程中获得帮助、以及进行此操作所需的必要更改。

此致、

Kishore。

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

    您好 Kishore、

    如果使用文本 ALPN、则应使用 SL_SO_SECURE_ALPn_General 选项。

    BR、

    Kobi

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

    您好、Kobi、

    正如建议的那样、我添加了这段代码来尝试一下

    #define SL_SO_SECURE_ALPn_General                (44)/*按字符串设置 ALPN 协议名称-只能设置一个协议名称*/

    sTIRetCode = sl_SetSockOpt ( pxSocketContext->sSocketDescriptor、sl_SOL_Socket、sl_SO_SECURE_ALPN_General、"x-amzn-MQTT-ca"、strlen ("x-amzn-MQTT-ca"));

    但 在本例中、sl_SetSockOpt 返回-92、即"协议不可用"。

    此致、

    Kishore。

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

    您好!

    您使用的是什么 SDK 和 SP。

    我刚刚测试了命令(使用您的设置)并成功获得了返回代码。

    如果我理解正确、则错误是在您设置选项时、而不是在连接时。

    BR、

    Kobi

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

    您好!

    我正在使用从 AWS 为 CC3220SF LAUNCHXL 下载的演示代码库。

    是的、设置套接字选项时返回错误代码-92、最终也无法建立 MQTT 连接。

    此致、

    Kishore。

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

    您好、Kobe、

    希望你们做得好。 自我上次查询以来、这段时间很长。 我可以对此进行任何更新吗?

    此致、

    Kishore。

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

    请显示您的整个套接字处理代码(从套接字创建到获取-92)。 如前所述、我 成功添加了 SL_SO_SECURE_ALPn_General、因此需要了解问题的根源。

    您是否正在使用最新的 SDK 和 SP? 如果不是、请更新。

    BR、

    Kobi

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

    您好!

    很抱歉耽误您的跟进。

    我已在 文件 IoT_SECURE_Socketop.c 中的函数 socketOpt 中添加了从 AWS 下载的 MQTT 演示代码中的以下代码、方法是将 aws_clientcredentialMQTT_broker 端口更改为 AWS clientcredential.h 中的443 我刚刚添加了之前未出现在代码中的 case sockpes_so_alPN_protocols。

    #define sockesaws_IOT _ALPn_MQTT  "x-amzn-MQTT-ca"

    switch( lOptionName )

    case sockets_SO_ALPn_protocols:


    const char * ppcALPNProtos[]={socketsaws_IOT _ALPn_MQTT};

    sTIRetCode = sl_SetSockOpt (pxSocketContext->sSocketDescriptor、
    SL_SOL_Socket、
    SL_SO_SECURE_ALPn_General、
    ppcALPNProtos、
    sizeof( ppcALPNProtos ));

    /*如果上述 sl_SetSockOpt 成功、则返回成功给用户。 *
    if (sTIRetCode >= 0)

    lRetCode =套接字_ERROR_NONE;

    其他

    /*请参阅供应商/ti/SimpleLink_CC32xx/v2_10_00_04/source/ti/drivers/net/wifi/errors.h *
    sockets_print ((“错误:%d SockOpt ALPN 失败。\r\n”,sTIRetCode);



    中断;

    我还想知道您使用的是哪个示例和 SDK 吗?

    此致、

    Kishore。

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

    API 允许将一个 ALPN 字符串用作参数。

    sTIRetCode = sl_SetSockOpt (pxSocketContext->sSocketDescriptor、

                             SL_SOL_SocketSL_SO_SECURE_ALPn_GeneralsocketsAWS _IOT _ALPn_MQTT

                              strlen (socketsaws_IOT _alPN_MQTT));

    
    

    BR、

    Kobi