aliyun / iotkit-embedded

高速镜像: https://code.aliyun.com/linkkit/c-sdk
Apache License 2.0
498 stars 254 forks source link

OTA failed with upgrade notification received before SUBACK #105

Open ccli8 opened 5 years ago

ccli8 commented 5 years ago

Environment

Platform: Ubuntu 18.04 aliyun/iotkit: RELEASED_V2_1_20180320 Test code: sample/ota/ota_mqtt-example.c

Description

Hi,

I am testing aliyun OTA function. On IoT Platform Console, I've launched OTA process and run ota_mqtt-example on my Ubuntu 18.04. According to the log, topic /ota/device/upgrade/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp! is subscribed, but upgrade notification from OTA server is received instantly before the corresponding SUBACK packet. I know upgrade notification callback handler won't be ready until SUBACK is received, so the upgrade notification from OTA server is not handled.

[inf] iotx_device_info_init(40): device_info created successfully!
[dbg] iotx_device_info_set(50): start to set device info!
[dbg] iotx_device_info_set(64): device_info set successfully!
[dbg] guider_print_dev_guider_info(271): ....................................................
[dbg] guider_print_dev_guider_info(272):           ProductKey : a1SaLQJIZzr
[dbg] guider_print_dev_guider_info(273):           DeviceName : tRigXE0ATjmiyJlv6aPp
[dbg] guider_print_dev_guider_info(274):             DeviceID : a1SaLQJIZzr.tRigXE0ATjmiyJlv6aPp
[dbg] guider_print_dev_guider_info(276): ....................................................
[dbg] guider_print_dev_guider_info(277):        PartnerID Buf : ,partner_id=example.demo.partner-id
[dbg] guider_print_dev_guider_info(278):         ModuleID Buf : ,module_id=example.demo.module-id
[dbg] guider_print_dev_guider_info(279):           Guider URL : 
[dbg] guider_print_dev_guider_info(281):       Guider SecMode : 2 (TLS + Direct)
[dbg] guider_print_dev_guider_info(283):     Guider Timestamp : 2524608000000
[dbg] guider_print_dev_guider_info(284): ....................................................
[dbg] guider_print_dev_guider_info(290): ....................................................
[dbg] guider_print_conn_info(248): -----------------------------------------
[dbg] guider_print_conn_info(249):             Host : a1SaLQJIZzr.iot-as-mqtt.cn-shanghai.aliyuncs.com
[dbg] guider_print_conn_info(250):             Port : 1883
[dbg] guider_print_conn_info(253):         ClientID : a1SaLQJIZzr.tRigXE0ATjmiyJlv6aPp|securemode=2,timestamp=2524608000000,signmethod=hmacsha1,gw=0,ext=0,partner_id=example.demo.partner-id,module_id=example.demo.module-id|
[dbg] guider_print_conn_info(255):       TLS PubKey : 0x56024c3784a1 ('-----BEGIN CERTI ...')
[dbg] guider_print_conn_info(258): -----------------------------------------
[inf] iotx_mc_init(1703): MQTT init success!
[inf] _ssl_client_init(176): Loading the CA root certificate ...
cert. version     : 3
serial number     : 04:00:00:00:00:01:15:4B:5A:C3:94
issuer name       : C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
subject name      : C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA
issued  on        : 1998-09-01 12:00:00
expires on        : 2028-01-28 12:00:00
signed using      : RSA with SHA1
RSA key size      : 2048 bits
basic constraints : CA=true
key usage         : Key Cert Sign, CRL Sign
[inf] _ssl_parse_crt(144): crt content:451
[inf] _ssl_client_init(184):  ok (0 skipped)
[inf] _TLSConnectNetwork(346): Connecting to /a1SaLQJIZzr.iot-as-mqtt.cn-shanghai.aliyuncs.com/1883...
[inf] mbedtls_net_connect_timeout(291): setsockopt SO_SNDTIMEO timeout: 10s
[inf] _TLSConnectNetwork(359):  ok
[inf] _TLSConnectNetwork(364):   . Setting up the SSL/TLS structure...
[inf] _TLSConnectNetwork(374):  ok
[inf] _TLSConnectNetwork(409): Performing the SSL/TLS handshake...
[inf] _TLSConnectNetwork(417):  ok
[inf] _TLSConnectNetwork(421):   . Verifying peer X.509 certificate..
[inf] _real_confirm(93): certificate verification result: 0x00
[inf] iotx_mc_connect(2035): mqtt connect success!
[dbg] iotx_mc_report_mid(2259): MID Report: started in MQTT
[dbg] iotx_mc_report_mid(2276): MID Report: json data = '{"id":"a1SaLQJIZzr_tRigXE0ATjmiyJlv6aPp_mid","params":{"_sys_device_mid":"example.demo.module-id","_sys_device_pid":"example.demo.partner-id"}}'
[dbg] iotx_mc_report_mid(2292): MID Report: topic name = '/sys/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp/thing/status/update'
[dbg] iotx_mc_report_mid(2309): MID Report: finished, IOT_MQTT_Publish() = 0
[inf] iotx_mc_subscribe(1388): mqtt subscribe success,topic = /ota/device/request/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp!

[inf] iotx_mc_subscribe(1388): mqtt subscribe success,topic = /ota/device/upgrade/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp!

[inf] iotx_mc_subscribe(1388): mqtt subscribe success,topic = /sys/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp/thing/config/get_reply!
[inf] iotx_mc_subscribe(1388): mqtt subscribe success,topic = /sys/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp/thing/config/push!
mqtt_client|227 :: wait ota upgrade command....

[dbg] iotx_mc_cycle(1277): PUBLISH
[dbg] iotx_mc_handle_recv_PUBLISH(1091):         Packet Ident : 00000000
[dbg] iotx_mc_handle_recv_PUBLISH(1092):         Topic Length : 52
[dbg] iotx_mc_handle_recv_PUBLISH(1096):           Topic Name : /ota/device/upgrade/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp
[dbg] iotx_mc_handle_recv_PUBLISH(1099):     Payload Len/Room : 415 / 1991
[dbg] iotx_mc_handle_recv_PUBLISH(1100):       Receive Buflen : 2048
[dbg] iotx_mc_handle_recv_PUBLISH(1111): delivering msg ...
[dbg] iotx_mc_deliver_message(887): NO matching any topic, call default handle function
event_handle|128 :: topic message arrived but without any related handle: topic=/ota/device/upgrade/a1SaLQJIZzr/tRigXE0ATjmiyJlv6aPp, topic_msg={"code":"1000","data":{"size":215726,"sign":"44026fa64dc282b028fdab1a648feb83","version":"v0.00.002","url":"https://iotx-ota.oss-cn-shanghai.aliyuncs.com/ota/8791c2e123f98856450f16fcf2715dc9/cjnwqf8cl0002267qxtkqm2ex.gz?Expires=1540980615&OSSAccessKeyId=cS8uRRy54RszYWna&Signature=%2Btl6bwXX1cTeUGsa7udx7a5KjuQ%3D","signMethod":"Md5","md5":"44026fa64dc282b028fdab1a648feb83"},"id":1540978815677,"message":"success"}


[dbg] iotx_mc_cycle(1269): SUBACK
event_handle|088 :: subscribe success, packet-id=3
[dbg] iotx_mc_cycle(1269): SUBACK
event_handle|088 :: subscribe success, packet-id=4
[dbg] iotx_mc_cycle(1269): SUBACK
event_handle|088 :: subscribe success, packet-id=2
[dbg] iotx_mc_cycle(1269): SUBACK
event_handle|088 :: subscribe success, packet-id=1

[dbg] iotx_mc_cycle(1260): PUBACK
event_handle|112 :: publish success, packet-id=5
mqtt_client|227 :: wait ota upgrade command....
mqtt_client|227 :: wait ota upgrade command....
mqtt_client|227 :: wait ota upgrade command....
mqtt_client|227 :: wait ota upgrade command....