From 3e631cd96ac90a5739269a1c8a3a94d31bbd8d99 Mon Sep 17 00:00:00 2001 From: daishengdong Date: Thu, 7 May 2020 11:11:04 +0800 Subject: [PATCH] update qcloud sdk 1. iot-hub sdk update to 3.2.0 2. iot-explorer update to 3.1.1 --- .../TencentOS_tiny.uvoptx | 70 +- .../TencentOS_tiny.uvprojx | 68 +- .../TencentOS_tiny.uvoptx | 68 +- .../TencentOS_tiny.uvprojx | 70 +- .../3rdparty/CMakeLists.txt | 61 +- .../qcloud-iot-explorer-sdk/3rdparty/Makefile | 6 +- .../3rdparty/device_info.json | 13 + .../数据模板代码生成.md | 19 + .../数据模板开发/数据模板协议.md | 486 ++ .../数据模板应用开发.md | 121 + .../3rdparty/docs/设备固件升级.md | 129 + .../external_libs/mbedtls/library/aes.c | 783 +-- .../external_libs/mbedtls/library/aesni.c | 50 +- .../external_libs/mbedtls/library/arc4.c | 57 +- .../external_libs/mbedtls/library/asn1parse.c | 273 +- .../external_libs/mbedtls/library/asn1write.c | 176 +- .../external_libs/mbedtls/library/base64.c | 136 +- .../external_libs/mbedtls/library/bignum.c | 1132 ++--- .../external_libs/mbedtls/library/blowfish.c | 211 +- .../external_libs/mbedtls/library/camellia.c | 844 ++-- .../external_libs/mbedtls/library/ccm.c | 170 +- .../external_libs/mbedtls/library/certs.c | 342 +- .../external_libs/mbedtls/library/cipher.c | 577 +-- .../mbedtls/library/cipher_wrap.c | 143 +- .../external_libs/mbedtls/library/cmac.c | 448 +- .../external_libs/mbedtls/library/ctr_drbg.c | 261 +- .../external_libs/mbedtls/library/debug.c | 129 +- .../external_libs/mbedtls/library/des.c | 450 +- .../external_libs/mbedtls/library/dhm.c | 305 +- .../external_libs/mbedtls/library/ecdh.c | 138 +- .../external_libs/mbedtls/library/ecdsa.c | 165 +- .../external_libs/mbedtls/library/ecjpake.c | 248 +- .../external_libs/mbedtls/library/ecp.c | 1057 ++-- .../mbedtls/library/ecp_curves.c | 349 +- .../external_libs/mbedtls/library/entropy.c | 219 +- .../mbedtls/library/entropy_poll.c | 100 +- .../external_libs/mbedtls/library/error.c | 415 +- .../external_libs/mbedtls/library/gcm.c | 865 ++-- .../external_libs/mbedtls/library/havege.c | 20 +- .../external_libs/mbedtls/library/hmac_drbg.c | 170 +- .../external_libs/mbedtls/library/md.c | 216 +- .../external_libs/mbedtls/library/md2.c | 111 +- .../external_libs/mbedtls/library/md4.c | 102 +- .../external_libs/mbedtls/library/md5.c | 103 +- .../external_libs/mbedtls/library/md_wrap.c | 50 +- .../mbedtls/library/memory_buffer_alloc.c | 257 +- .../mbedtls/library/net_sockets.c | 247 +- .../external_libs/mbedtls/library/oid.c | 58 +- .../external_libs/mbedtls/library/padlock.c | 39 +- .../external_libs/mbedtls/library/pem.c | 193 +- .../external_libs/mbedtls/library/pk.c | 235 +- .../external_libs/mbedtls/library/pk_wrap.c | 210 +- .../external_libs/mbedtls/library/pkcs11.c | 121 +- .../external_libs/mbedtls/library/pkcs12.c | 178 +- .../external_libs/mbedtls/library/pkcs5.c | 256 +- .../external_libs/mbedtls/library/pkparse.c | 833 ++-- .../external_libs/mbedtls/library/pkwrite.c | 210 +- .../external_libs/mbedtls/library/platform.c | 73 +- .../external_libs/mbedtls/library/ripemd160.c | 112 +- .../external_libs/mbedtls/library/rsa.c | 974 ++-- .../external_libs/mbedtls/library/sha1.c | 80 +- .../external_libs/mbedtls/library/sha256.c | 205 +- .../external_libs/mbedtls/library/sha512.c | 228 +- .../external_libs/mbedtls/library/ssl_cache.c | 98 +- .../mbedtls/library/ssl_ciphersuites.c | 2041 ++++---- .../external_libs/mbedtls/library/ssl_cli.c | 2046 ++++---- .../mbedtls/library/ssl_cookie.c | 107 +- .../external_libs/mbedtls/library/ssl_srv.c | 2286 ++++----- .../mbedtls/library/ssl_ticket.c | 218 +- .../external_libs/mbedtls/library/ssl_tls.c | 4347 ++++++++--------- .../external_libs/mbedtls/library/threading.c | 32 +- .../external_libs/mbedtls/library/timing.c | 133 +- .../external_libs/mbedtls/library/version.c | 2 +- .../mbedtls/library/version_features.c | 17 +- .../external_libs/mbedtls/library/x509.c | 609 ++- .../mbedtls/library/x509_create.c | 130 +- .../external_libs/mbedtls/library/x509_crl.c | 391 +- .../external_libs/mbedtls/library/x509_crt.c | 1364 +++--- .../external_libs/mbedtls/library/x509_csr.c | 178 +- .../mbedtls/library/x509write_crt.c | 188 +- .../mbedtls/library/x509write_csr.c | 110 +- .../external_libs/mbedtls/library/xtea.c | 120 +- .../3rdparty/include/config.h | 11 +- .../exports/qcloud_iot_export_data_template.h | 28 +- .../exports/qcloud_iot_export_gateway.h | 8 + .../3rdparty/include/lite-utils.h | 2 + .../3rdparty/include/qcloud_iot_export.h | 16 +- .../3rdparty/make.settings | 10 + .../at_device/esp8266/at_device_esp8266.c | 659 ++- .../os/freertos/HAL_AT_UART_freertos.c | 40 +- .../os/freertos/HAL_Device_freertos.c | 122 +- .../platform/os/freertos/HAL_OS_freertos.c | 66 +- .../platform/os/freertos/HAL_TCP_lwip.c | 63 +- .../platform/os/freertos/HAL_Timer_freertos.c | 76 +- .../platform/os/freertos/HAL_UDP_lwip.c | 34 +- .../platform/os/linux/HAL_AT_UART_linux.c | 274 +- .../platform/os/linux/HAL_Device_linux.c | 817 ++-- .../platform/os/linux/HAL_Log_linux.c | 24 +- .../3rdparty/platform/os/linux/HAL_OS_linux.c | 121 +- .../platform/os/linux/HAL_TCP_linux.c | 55 +- .../platform/os/linux/HAL_Timer_linux.c | 51 +- .../platform/os/linux/HAL_UDP_linux.c | 26 +- .../platform/os/nonos/HAL_AT_UART_nonos.c | 40 +- .../platform/os/nonos/HAL_Device_nonos.c | 124 +- .../3rdparty/platform/os/nonos/HAL_OS_nonos.c | 6 +- .../platform/os/nonos/HAL_Timer_nonos.c | 64 +- .../os/rtthread/HAL_Device_rtthread.c | 122 +- .../platform/os/rtthread/HAL_OS_rtthread.c | 50 +- .../platform/os/rtthread/HAL_TCP_rtthread.c | 191 +- .../os/rtthread/HAL_TLS_mbedtls_rtthread.c | 110 +- .../platform/os/rtthread/HAL_Timer_rtthread.c | 72 +- .../platform/os/windows/HAL_AT_UART_win.c | 8 +- .../platform/os/windows/HAL_Device_win.c | 726 +-- .../platform/os/windows/HAL_Log_win.c | 24 +- .../3rdparty/platform/os/windows/HAL_OS_win.c | 72 +- .../platform/os/windows/HAL_TCP_win.c | 119 +- .../platform/os/windows/HAL_Timer_win.c | 69 +- .../platform/os/windows/HAL_UDP_win.c | 28 +- .../platform/tls/mbedtls/HAL_DTLS_mbedtls.c | 196 +- .../platform/tls/mbedtls/HAL_TLS_mbedtls.c | 91 +- .../3rdparty/samples/CMakeLists.txt | 22 +- .../3rdparty/samples/Makefile | 26 +- .../samples/data_template/action_config.c | 22 +- .../samples/data_template/data_config.c | 6 +- .../data_template/data_template_sample.c | 595 ++- .../samples/data_template/events_config.c | 46 +- .../3rdparty/samples/gateway/gateway_sample.c | 412 ++ .../3rdparty/samples/gateway/sub_dev001.c | 685 +++ .../3rdparty/samples/mqtt/mqtt_sample.c | 318 ++ .../3rdparty/samples/ota/ota_mqtt_sample.c | 645 +-- .../samples/raw_data/raw_data_sample.c | 360 ++ .../scenarized/light_data_template_sample.c | 859 ++-- .../3rdparty/sdk_src/CMakeLists.txt | 9 +- .../sdk_src/internal_inc/mqtt_client.h | 2 +- .../3rdparty/sdk_src/internal_inc/utils_md5.h | 2 +- .../sdk_src/network/at_socket/at_client.c | 1151 ++--- .../sdk_src/network/at_socket/at_socket_inf.c | 520 +- .../sdk_src/network/at_socket/at_utils.c | 452 +- .../network/at_socket/network_at_tcp.c | 183 +- .../sdk_src/network/network_interface.c | 30 +- .../sdk_src/network/socket/network_socket.c | 52 +- .../sdk_src/network/tls/network_tls.c | 38 +- .../sdk_src/protocol/http/utils_httpc.c | 198 +- .../sdk_src/protocol/mqtt/mqtt_client.c | 278 +- .../protocol/mqtt/mqtt_client_common.c | 302 +- .../protocol/mqtt/mqtt_client_connect.c | 76 +- .../sdk_src/protocol/mqtt/mqtt_client_net.c | 10 +- .../protocol/mqtt/mqtt_client_publish.c | 86 +- .../protocol/mqtt/mqtt_client_subscribe.c | 32 +- .../protocol/mqtt/mqtt_client_unsubscribe.c | 27 +- .../sdk_src/protocol/mqtt/mqtt_client_yield.c | 63 +- .../data_template/data_template_aciton.c | 396 +- .../data_template/data_template_client.c | 1014 ++-- .../data_template_client_common.c | 5 +- .../data_template/data_template_client_json.c | 217 +- .../data_template_client_manager.c | 257 +- .../data_template/data_template_event.c | 602 +-- .../sdk_src/services/gateway/gateway_api.c | 303 ++ .../sdk_src/services/gateway/gateway_common.c | 351 ++ .../sdk_src/services/ota/ota_client.c | 131 +- .../3rdparty/sdk_src/services/ota/ota_fetch.c | 45 +- .../3rdparty/sdk_src/services/ota/ota_lib.c | 142 +- .../3rdparty/sdk_src/services/ota/ota_mqtt.c | 20 +- .../sdk_src/services/system/system_mqtt.c | 66 +- .../3rdparty/sdk_src/utils/json_parser.c | 52 +- .../3rdparty/sdk_src/utils/json_token.c | 118 +- .../3rdparty/sdk_src/utils/qcloud_iot_ca.c | 18 +- .../sdk_src/utils/qcloud_iot_device.c | 52 +- .../3rdparty/sdk_src/utils/qcloud_iot_log.c | 50 +- .../3rdparty/sdk_src/utils/string_utils.c | 26 +- .../3rdparty/sdk_src/utils/utils_aes.c | 800 ++- .../3rdparty/sdk_src/utils/utils_base64.c | 161 +- .../3rdparty/sdk_src/utils/utils_getopt.c | 114 +- .../3rdparty/sdk_src/utils/utils_hmac.c | 12 +- .../3rdparty/sdk_src/utils/utils_list.c | 1 - .../3rdparty/sdk_src/utils/utils_ringbuff.c | 105 +- .../3rdparty/sdk_src/utils/utils_timer.c | 21 +- .../build_scripts/parse_make_settings.mk | 5 + .../3rdparty/tools/cmake_scripts/config.h.in | 3 + .../3rdparty/tools/codegen.py | 5 +- .../qcloud-iot-explorer-sdk/version | 1 + .../3rdparty/cmake_build.sh | 35 - .../3rdparty/include/config.h | 1 - .../include/exports/qcloud_iot_export_coap.h | 178 - .../include/exports/qcloud_iot_export_error.h | 137 - .../3rdparty/include/lite-utils.h | 97 - .../3rdparty/include/utils_getopt.h | 7 - .../at_device/esp8266/at_device_esp8266.c | 575 --- .../os/freertos/HAL_AT_UART_freertos.c | 88 - .../os/freertos/HAL_Device_freertos.c | 162 - .../platform/os/linux/HAL_AT_UART_linux.c | 238 - .../platform/os/linux/HAL_Device_linux.c | 491 -- .../platform/os/nonos/HAL_AT_UART_nonos.c | 85 - .../platform/os/nonos/HAL_Device_nonos.c | 163 - .../os/rtthread/HAL_Device_rtthread.c | 162 - .../platform/os/rtthread/HAL_TCP_rtthread.c | 256 - .../platform/os/rtthread/HAL_Timer_rtthread.c | 96 - .../platform/os/windows/HAL_AT_UART_win.c | 64 - .../platform/os/windows/HAL_Device_win.c | 491 -- .../3rdparty/platform/os/windows/HAL_OS_win.c | 140 - .../platform/os/windows/HAL_Timer_win.c | 75 - .../3rdparty/samples/coap/coap_sample.c | 199 - .../samples/dynreg_dev/dynreg_dev_sample.c | 108 - .../3rdparty/samples/gateway/gateway_sample.c | 278 -- .../3rdparty/samples/mqtt/mqtt_sample.c | 359 -- .../samples/mqtt/multi_thread_mqtt_sample.c | 518 -- .../3rdparty/samples/ota/ota_mqtt_sample.c | 509 -- .../scenarized/aircond_shadow_sample.c | 300 -- .../samples/scenarized/door_coap_sample.c | 203 - .../samples/scenarized/door_mqtt_sample.c | 246 - .../3rdparty/samples/shadow/shadow_sample.c | 171 - .../sdk_src/internal_inc/at_socket_inf.h | 105 - .../3rdparty/sdk_src/internal_inc/at_utils.h | 49 - .../sdk_src/internal_inc/coap_client.h | 473 -- .../sdk_src/internal_inc/gateway_common.h | 86 - .../sdk_src/internal_inc/network_interface.h | 130 - .../sdk_src/internal_inc/qcloud_iot_common.h | 53 - .../sdk_src/internal_inc/utils_param_check.h | 85 - .../sdk_src/network/at_socket/at_client.c | 967 ---- .../sdk_src/network/at_socket/at_socket_inf.c | 415 -- .../sdk_src/network/at_socket/at_utils.c | 372 -- .../network/at_socket/network_at_tcp.c | 162 - .../sdk_src/network/network_interface.c | 108 - .../sdk_src/protocol/coap/coap_client.c | 361 -- .../sdk_src/protocol/coap/coap_client_auth.c | 145 - .../protocol/coap/coap_client_common.c | 288 -- .../protocol/coap/coap_client_message.c | 441 -- .../sdk_src/protocol/mqtt/mqtt_client.c | 473 -- .../3rdparty/sdk_src/services/dynreg/dynreg.c | 501 -- .../sdk_src/services/gateway/gateway_api.c | 299 -- .../sdk_src/services/gateway/gateway_common.c | 343 -- .../3rdparty/sdk_src/services/log/log_mqtt.c | 244 - .../3rdparty/sdk_src/services/ota/ota_coap.c | 200 - .../sdk_src/services/shadow/shadow_client.c | 879 ---- .../services/shadow/shadow_client_json.c | 350 -- .../3rdparty/sdk_src/utils/json_token.c | 219 - .../sdk_src/utils/qcloud_iot_device.c | 78 - .../3rdparty/sdk_src/utils/utils_aes.c | 1569 ------ .../3rdparty/sdk_src/utils/utils_base64.c | 203 - .../3rdparty/sdk_src/utils/utils_getopt.c | 102 - .../3rdparty/sdk_src/utils/utils_ringbuff.c | 106 - .../3rdparty/tools/example_config.json | 230 - .../qcloud-iot-hub-sdk/3rdparty/.clang-format | 9 + .../3rdparty/.gitignore | 0 .../3rdparty/CMakeLists.txt | 23 +- .../3rdparty/CMakeSettings.json | 0 .../3rdparty/LICENSE | 0 .../3rdparty/Makefile | 0 .../3rdparty/README.md | 4 + .../3rdparty/certs/README.md | 0 .../3rdparty/cmake_build.sh | 58 + .../3rdparty/device_info.json | 0 .../docs/C-SDK_API及可变参数说明.md | 22 +- ..._Build编译环境及配置选项说明.md | 4 +- .../C-SDK_MTMC多线程多设备支持.md | 24 + .../C-SDK_Porting跨平台移植概述.md | 20 +- .../docs/Device_Auth设备接入认证.md | 0 .../docs/FreeRTOS+lwIP平台移植说明.md | 0 .../IoT_Hub通信平台快速入门.md | 3 + .../door_aircond_sample_设备互通.md | 0 .../IoT_Hub/dynreg_dev_sample_动态注册.md | 0 .../IoT_Hub/gateway_sample_网关功能.md | 19 +- .../docs/IoT_Hub/mqtt_sample_快速入门.md | 5 + .../docs/IoT_Hub/ota_sample_固件升级.md | 112 + .../IoT_Hub/shadow_sample_设备影子.md | 0 .../docs/MCU+腾讯云定制AT模组.md | 0 .../MCU+通用TCP_AT模组移植(FreeRTOS).md | 0 .../MCU+通用TCP_AT模组移植(nonOS).md | 0 .../external_libs/mbedtls/CMakeLists.txt | 0 .../3rdparty/external_libs/mbedtls/Makefile | 0 .../external_libs/mbedtls/configs/README.txt | 0 .../mbedtls/configs/config-ccm-psk-tls1_2.h | 0 .../mbedtls/configs/config-mini-tls1_1.h | 0 .../mbedtls/configs/config-no-entropy.h | 0 .../mbedtls/configs/config-picocoin.h | 0 .../mbedtls/configs/config-suite-b.h | 0 .../mbedtls/configs/config-thread.h | 0 .../mbedtls/include/mbedtls/aes.h | 0 .../mbedtls/include/mbedtls/aesni.h | 0 .../mbedtls/include/mbedtls/arc4.h | 0 .../mbedtls/include/mbedtls/asn1.h | 0 .../mbedtls/include/mbedtls/asn1write.h | 0 .../mbedtls/include/mbedtls/base64.h | 0 .../mbedtls/include/mbedtls/bignum.h | 0 .../mbedtls/include/mbedtls/blowfish.h | 0 .../mbedtls/include/mbedtls/bn_mul.h | 0 .../mbedtls/include/mbedtls/camellia.h | 0 .../mbedtls/include/mbedtls/ccm.h | 0 .../mbedtls/include/mbedtls/certs.h | 0 .../mbedtls/include/mbedtls/check_config.h | 0 .../mbedtls/include/mbedtls/cipher.h | 0 .../mbedtls/include/mbedtls/cipher_internal.h | 0 .../mbedtls/include/mbedtls/cmac.h | 0 .../mbedtls/include/mbedtls/compat-1.3.h | 0 .../mbedtls/include/mbedtls/config.h | 0 .../mbedtls/include/mbedtls/ctr_drbg.h | 0 .../mbedtls/include/mbedtls/debug.h | 0 .../mbedtls/include/mbedtls/des.h | 0 .../mbedtls/include/mbedtls/dhm.h | 0 .../mbedtls/include/mbedtls/ecdh.h | 0 .../mbedtls/include/mbedtls/ecdsa.h | 0 .../mbedtls/include/mbedtls/ecjpake.h | 0 .../mbedtls/include/mbedtls/ecp.h | 0 .../mbedtls/include/mbedtls/entropy.h | 0 .../mbedtls/include/mbedtls/entropy_poll.h | 0 .../mbedtls/include/mbedtls/error.h | 0 .../mbedtls/include/mbedtls/gcm.h | 0 .../mbedtls/include/mbedtls/havege.h | 0 .../mbedtls/include/mbedtls/hmac_drbg.h | 0 .../mbedtls/include/mbedtls/md.h | 0 .../mbedtls/include/mbedtls/md2.h | 0 .../mbedtls/include/mbedtls/md4.h | 0 .../mbedtls/include/mbedtls/md5.h | 0 .../mbedtls/include/mbedtls/md_internal.h | 0 .../include/mbedtls/memory_buffer_alloc.h | 0 .../mbedtls/include/mbedtls/net.h | 0 .../mbedtls/include/mbedtls/net_sockets.h | 0 .../mbedtls/include/mbedtls/oid.h | 0 .../mbedtls/include/mbedtls/padlock.h | 0 .../mbedtls/include/mbedtls/pem.h | 0 .../mbedtls/include/mbedtls/pk.h | 0 .../mbedtls/include/mbedtls/pk_internal.h | 0 .../mbedtls/include/mbedtls/pkcs11.h | 0 .../mbedtls/include/mbedtls/pkcs12.h | 0 .../mbedtls/include/mbedtls/pkcs5.h | 0 .../mbedtls/include/mbedtls/platform.h | 0 .../mbedtls/include/mbedtls/platform_time.h | 0 .../mbedtls/include/mbedtls/ripemd160.h | 0 .../mbedtls/include/mbedtls/rsa.h | 0 .../mbedtls/include/mbedtls/sha1.h | 0 .../mbedtls/include/mbedtls/sha256.h | 0 .../mbedtls/include/mbedtls/sha512.h | 0 .../mbedtls/include/mbedtls/ssl.h | 0 .../mbedtls/include/mbedtls/ssl_cache.h | 0 .../include/mbedtls/ssl_ciphersuites.h | 0 .../mbedtls/include/mbedtls/ssl_cookie.h | 0 .../mbedtls/include/mbedtls/ssl_internal.h | 0 .../mbedtls/include/mbedtls/ssl_ticket.h | 0 .../mbedtls/include/mbedtls/threading.h | 0 .../mbedtls/include/mbedtls/timing.h | 0 .../mbedtls/include/mbedtls/version.h | 0 .../mbedtls/include/mbedtls/x509.h | 0 .../mbedtls/include/mbedtls/x509_crl.h | 0 .../mbedtls/include/mbedtls/x509_crt.h | 0 .../mbedtls/include/mbedtls/x509_csr.h | 0 .../mbedtls/include/mbedtls/xtea.h | 0 .../external_libs/mbedtls/library/Makefile | 0 .../external_libs/mbedtls/library/aes.c | 0 .../external_libs/mbedtls/library/aesni.c | 0 .../external_libs/mbedtls/library/arc4.c | 0 .../external_libs/mbedtls/library/asn1parse.c | 0 .../external_libs/mbedtls/library/asn1write.c | 0 .../external_libs/mbedtls/library/base64.c | 0 .../external_libs/mbedtls/library/bignum.c | 0 .../external_libs/mbedtls/library/blowfish.c | 0 .../external_libs/mbedtls/library/camellia.c | 0 .../external_libs/mbedtls/library/ccm.c | 0 .../external_libs/mbedtls/library/certs.c | 0 .../external_libs/mbedtls/library/cipher.c | 0 .../mbedtls/library/cipher_wrap.c | 0 .../external_libs/mbedtls/library/cmac.c | 0 .../external_libs/mbedtls/library/ctr_drbg.c | 0 .../external_libs/mbedtls/library/debug.c | 0 .../external_libs/mbedtls/library/des.c | 0 .../external_libs/mbedtls/library/dhm.c | 0 .../external_libs/mbedtls/library/ecdh.c | 0 .../external_libs/mbedtls/library/ecdsa.c | 0 .../external_libs/mbedtls/library/ecjpake.c | 0 .../external_libs/mbedtls/library/ecp.c | 0 .../mbedtls/library/ecp_curves.c | 0 .../external_libs/mbedtls/library/entropy.c | 0 .../mbedtls/library/entropy_poll.c | 0 .../external_libs/mbedtls/library/error.c | 0 .../external_libs/mbedtls/library/gcm.c | 0 .../external_libs/mbedtls/library/havege.c | 0 .../external_libs/mbedtls/library/hmac_drbg.c | 0 .../external_libs/mbedtls/library/md.c | 0 .../external_libs/mbedtls/library/md2.c | 0 .../external_libs/mbedtls/library/md4.c | 0 .../external_libs/mbedtls/library/md5.c | 0 .../external_libs/mbedtls/library/md_wrap.c | 0 .../mbedtls/library/memory_buffer_alloc.c | 0 .../mbedtls/library/net_sockets.c | 0 .../external_libs/mbedtls/library/oid.c | 0 .../external_libs/mbedtls/library/padlock.c | 0 .../external_libs/mbedtls/library/pem.c | 0 .../external_libs/mbedtls/library/pk.c | 0 .../external_libs/mbedtls/library/pk_wrap.c | 0 .../external_libs/mbedtls/library/pkcs11.c | 0 .../external_libs/mbedtls/library/pkcs12.c | 0 .../external_libs/mbedtls/library/pkcs5.c | 0 .../external_libs/mbedtls/library/pkparse.c | 0 .../external_libs/mbedtls/library/pkwrite.c | 0 .../external_libs/mbedtls/library/platform.c | 0 .../external_libs/mbedtls/library/ripemd160.c | 0 .../external_libs/mbedtls/library/rsa.c | 0 .../external_libs/mbedtls/library/sha1.c | 0 .../external_libs/mbedtls/library/sha256.c | 0 .../external_libs/mbedtls/library/sha512.c | 0 .../external_libs/mbedtls/library/ssl_cache.c | 0 .../mbedtls/library/ssl_ciphersuites.c | 0 .../external_libs/mbedtls/library/ssl_cli.c | 0 .../mbedtls/library/ssl_cookie.c | 0 .../external_libs/mbedtls/library/ssl_srv.c | 0 .../mbedtls/library/ssl_ticket.c | 0 .../external_libs/mbedtls/library/ssl_tls.c | 0 .../external_libs/mbedtls/library/threading.c | 0 .../external_libs/mbedtls/library/timing.c | 0 .../external_libs/mbedtls/library/version.c | 0 .../mbedtls/library/version_features.c | 0 .../external_libs/mbedtls/library/x509.c | 0 .../mbedtls/library/x509_create.c | 0 .../external_libs/mbedtls/library/x509_crl.c | 0 .../external_libs/mbedtls/library/x509_crt.c | 0 .../external_libs/mbedtls/library/x509_csr.c | 0 .../mbedtls/library/x509write_crt.c | 0 .../mbedtls/library/x509write_csr.c | 0 .../external_libs/mbedtls/library/xtea.c | 0 .../3rdparty/include/config.h | 17 + .../include/exports/qcloud_iot_export_coap.h | 187 + .../exports/qcloud_iot_export_dynreg.h | 9 +- .../include/exports/qcloud_iot_export_error.h | 116 + .../exports/qcloud_iot_export_gateway.h | 168 + .../include/exports/qcloud_iot_export_log.h | 106 +- .../include/exports/qcloud_iot_export_mqtt.h | 152 +- .../include/exports/qcloud_iot_export_ota.h | 78 +- .../exports/qcloud_iot_export_shadow.h | 159 +- .../exports/qcloud_iot_export_system.h | 3 +- .../3rdparty/include/lite-list.h | 154 +- .../3rdparty/include/lite-utils.h | 86 + .../3rdparty/include/platform.h | 17 +- .../3rdparty/include/qcloud_iot_export.h | 62 +- .../include/qcloud_iot_export_variables.h | 39 +- .../3rdparty/include/qcloud_iot_import.h | 137 +- .../3rdparty/include/utils_getopt.h | 22 + .../3rdparty/make.settings | 26 +- .../3rdparty/platform/CMakeLists.txt | 0 .../at_device/esp8266/at_device_esp8266.c | 558 +++ .../at_device/esp8266/at_device_esp8266.h | 14 +- .../os/freertos/HAL_AT_UART_freertos.c | 77 + .../os/freertos/HAL_Device_freertos.c | 165 + .../platform/os/freertos/HAL_OS_freertos.c | 150 +- .../platform/os/freertos}/HAL_TCP_lwip.c | 117 +- .../platform/os/freertos/HAL_Timer_freertos.c | 85 +- .../platform/os/freertos}/HAL_UDP_lwip.c | 85 +- .../platform/os/linux/HAL_AT_UART_linux.c | 237 + .../platform/os/linux/HAL_Device_linux.c | 481 ++ .../platform/os/linux/HAL_Log_linux.c | 42 +- .../3rdparty/platform/os/linux/HAL_OS_linux.c | 183 +- .../platform/os/linux/HAL_TCP_linux.c | 117 +- .../platform/os/linux/HAL_Timer_linux.c | 56 +- .../platform/os/linux/HAL_UDP_linux.c | 80 +- .../platform/os/nonos/HAL_AT_UART_nonos.c | 73 + .../platform/os/nonos/HAL_Device_nonos.c | 166 + .../3rdparty/platform/os/nonos/HAL_OS_nonos.c | 16 +- .../platform/os/nonos/HAL_Timer_nonos.c | 69 +- .../os/rtthread/HAL_Device_rtthread.c | 165 + .../platform/os/rtthread/HAL_OS_rtthread.c | 79 +- .../platform/os/rtthread/HAL_TCP_rtthread.c | 245 + .../os/rtthread/HAL_TLS_mbedtls_rtthread.c | 191 +- .../platform/os/rtthread/HAL_Timer_rtthread.c | 91 + .../platform/os/rtthread/tc_tls_config.h | 4 +- .../platform/os/windows/HAL_AT_UART_win.c | 55 + .../platform/os/windows/HAL_Device_win.c | 481 ++ .../platform/os/windows/HAL_Log_win.c | 42 +- .../3rdparty/platform/os/windows/HAL_OS_win.c | 175 + .../platform/os/windows/HAL_TCP_win.c | 164 +- .../platform/os/windows/HAL_Timer_win.c | 81 + .../platform/os/windows/HAL_UDP_win.c | 78 +- .../platform/tls/mbedtls/HAL_DTLS_mbedtls.c | 279 +- .../platform/tls/mbedtls/HAL_TLS_mbedtls.c | 171 +- .../3rdparty/samples/CMakeLists.txt | 14 +- .../3rdparty/samples/Makefile | 20 +- .../3rdparty/samples/coap/coap_sample.c | 195 + .../samples/dynreg_dev/dynreg_dev_sample.c | 105 + .../3rdparty/samples/gateway/gateway_sample.c | 337 ++ .../3rdparty/samples/mqtt/mqtt_sample.c | 356 ++ .../samples/mqtt/multi_thread_mqtt_sample.c | 488 ++ .../multi_client/multi_client_mqtt_sample.c | 430 ++ .../multi_client/multi_client_shadow_sample.c | 304 ++ .../3rdparty/samples/ota/ota_coap_sample.c | 223 +- .../3rdparty/samples/ota/ota_mqtt_sample.c | 558 +++ .../scenarized/aircond_shadow_sample.c | 292 ++ .../scenarized/aircond_shadow_sample_v2.c | 306 +- .../samples/scenarized/door_coap_sample.c | 194 + .../samples/scenarized/door_mqtt_sample.c | 237 + .../3rdparty/samples/shadow/shadow_sample.c | 186 + .../3rdparty/sdk_src/CMakeLists.txt | 0 .../3rdparty/sdk_src/internal_inc/at_client.h | 102 +- .../sdk_src/internal_inc/at_socket_inf.h | 87 + .../sdk_src/internal_inc/at_uart_hal.h | 47 +- .../3rdparty/sdk_src/internal_inc/at_utils.h | 46 + .../sdk_src/internal_inc/coap_client.h | 471 ++ .../sdk_src/internal_inc/coap_client_net.h | 6 +- .../sdk_src/internal_inc/gateway_common.h | 97 + .../sdk_src/internal_inc/json_parser.h | 115 +- .../sdk_src/internal_inc/log_upload.h | 24 +- .../sdk_src/internal_inc/mqtt_client.h | 321 +- .../sdk_src/internal_inc/mqtt_client_net.h | 4 +- .../sdk_src/internal_inc/network_interface.h | 127 + .../sdk_src/internal_inc/ota_client.h | 28 +- .../3rdparty/sdk_src/internal_inc/ota_fetch.h | 3 +- .../3rdparty/sdk_src/internal_inc/ota_lib.h | 12 +- .../sdk_src/internal_inc/qcloud_iot_ca.h | 4 +- .../sdk_src/internal_inc/qcloud_iot_common.h | 47 + .../sdk_src/internal_inc/qcloud_iot_device.h | 8 +- .../sdk_src/internal_inc/shadow_client.h | 59 +- .../internal_inc/shadow_client_common.h | 8 +- .../sdk_src/internal_inc/shadow_client_json.h | 53 +- .../3rdparty/sdk_src/internal_inc/utils_aes.h | 122 +- .../sdk_src/internal_inc/utils_base64.h | 14 +- .../sdk_src/internal_inc/utils_hmac.h | 3 +- .../sdk_src/internal_inc/utils_httpc.h | 52 +- .../sdk_src/internal_inc/utils_list.h | 19 +- .../3rdparty/sdk_src/internal_inc/utils_md5.h | 21 +- .../sdk_src/internal_inc/utils_param_check.h | 85 + .../sdk_src/internal_inc/utils_ringbuff.h | 44 +- .../sdk_src/internal_inc/utils_sha1.h | 12 +- .../sdk_src/internal_inc/utils_timer.h | 9 +- .../sdk_src/network/at_socket/at_client.c | 872 ++++ .../sdk_src/network/at_socket/at_socket_inf.c | 413 ++ .../sdk_src/network/at_socket/at_utils.c | 345 ++ .../network/at_socket/network_at_tcp.c | 153 + .../sdk_src/network/network_interface.c | 111 + .../sdk_src/network/socket/network_socket.c | 54 +- .../sdk_src/network/tls/network_tls.c | 42 +- .../sdk_src/protocol/coap/coap_client.c | 360 ++ .../sdk_src/protocol/coap/coap_client_auth.c | 147 + .../protocol/coap/coap_client_common.c | 284 ++ .../protocol/coap/coap_client_deserialize.c | 203 +- .../protocol/coap/coap_client_message.c | 418 ++ .../sdk_src/protocol/coap/coap_client_net.c | 6 +- .../protocol/coap/coap_client_serialize.c | 153 +- .../sdk_src/protocol/http/utils_httpc.c | 366 +- .../sdk_src/protocol/mqtt/mqtt_client.c | 583 +++ .../protocol/mqtt/mqtt_client_common.c | 630 ++- .../protocol/mqtt/mqtt_client_connect.c | 242 +- .../sdk_src/protocol/mqtt/mqtt_client_net.c | 14 +- .../protocol/mqtt/mqtt_client_publish.c | 229 +- .../protocol/mqtt/mqtt_client_subscribe.c | 132 +- .../protocol/mqtt/mqtt_client_unsubscribe.c | 96 +- .../sdk_src/protocol/mqtt/mqtt_client_yield.c | 134 +- .../3rdparty/sdk_src/services/dynreg/dynreg.c | 496 ++ .../sdk_src/services/gateway/gateway_api.c | 318 ++ .../sdk_src/services/gateway/gateway_common.c | 353 ++ .../3rdparty/sdk_src/services/log/log_mqtt.c | 240 + .../sdk_src/services/log/log_upload.c | 429 +- .../sdk_src/services/ota/ota_client.c | 251 +- .../3rdparty/sdk_src/services/ota/ota_coap.c | 201 + .../3rdparty/sdk_src/services/ota/ota_fetch.c | 78 +- .../3rdparty/sdk_src/services/ota/ota_lib.c | 190 +- .../3rdparty/sdk_src/services/ota/ota_mqtt.c | 111 +- .../sdk_src/services/shadow/shadow_client.c | 897 ++++ .../services/shadow/shadow_client_common.c | 16 +- .../services/shadow/shadow_client_json.c | 324 ++ .../services/shadow/shadow_client_manager.c | 322 +- .../sdk_src/services/system/system_mqtt.c | 129 +- .../3rdparty/sdk_src/utils/json_parser.c | 175 +- .../3rdparty/sdk_src/utils/json_token.c | 208 + .../3rdparty/sdk_src/utils/qcloud_iot_ca.c | 72 +- .../sdk_src/utils/qcloud_iot_device.c | 56 + .../3rdparty/sdk_src/utils/qcloud_iot_log.c | 72 +- .../3rdparty/sdk_src/utils/string_utils.c | 97 +- .../3rdparty/sdk_src/utils/utils_aes.c | 1326 +++++ .../3rdparty/sdk_src/utils/utils_base64.c | 178 + .../3rdparty/sdk_src/utils/utils_getopt.c | 95 + .../3rdparty/sdk_src/utils/utils_hmac.c | 81 +- .../3rdparty/sdk_src/utils/utils_list.c | 42 +- .../3rdparty/sdk_src/utils/utils_md5.c | 199 +- .../3rdparty/sdk_src/utils/utils_ringbuff.c | 90 + .../3rdparty/sdk_src/utils/utils_sha1.c | 123 +- .../3rdparty/sdk_src/utils/utils_timer.c | 23 +- .../build_scripts/internal_make_funcs.mk | 0 .../build_scripts/parse_make_settings.mk | 2 +- .../tools/build_scripts/rules-tests.mk | 0 .../3rdparty/tools/build_scripts/rules.mk | 0 .../tools/build_scripts/stats_static_lib.sh | 0 .../tools/build_scripts/update_gtest.sh | 0 .../tools/build_scripts/update_mbedtls.sh | 0 .../3rdparty/tools/cmake_scripts/config.h.in | 1 + .../3rdparty/tools/cmake_scripts/convert.sh | 0 .../3rdparty/tools/codegen.py | 0 .../3rdparty/tools/example_config.json | 230 + .../3rdparty/tools/run-clang-tidy | 296 ++ .../3rdparty/tools/update_from_old_SDK.sh | 0 .../HAL_AT_UART_tencentos_tiny.c | 0 .../HAL_Device_tencentos_tiny.c | 0 .../TencentOS_tiny/HAL_OS_tencentos_tiny.c | 0 .../port/TencentOS_tiny}/HAL_TCP_lwip.c | 0 .../port/TencentOS_tiny/HAL_TCP_module.c | 0 .../TencentOS_tiny/HAL_Timer_tencentos_tiny.c | 0 .../port/TencentOS_tiny}/HAL_UDP_lwip.c | 0 .../port/TencentOS_tiny/HAL_UDP_module.c | 0 .../connectivity/qcloud-iot-hub-sdk/version | 1 + 594 files changed, 47287 insertions(+), 44165 deletions(-) create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板代码生成.md create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板协议.md create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板应用开发.md create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/设备固件升级.md rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-explorer-sdk}/3rdparty/include/exports/qcloud_iot_export_gateway.h (95%) create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/gateway_sample.c create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/sub_dev001.c create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/mqtt/mqtt_sample.c create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/raw_data/raw_data_sample.c create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c create mode 100644 components/connectivity/qcloud-iot-explorer-sdk/version delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/cmake_build.sh delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/config.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_coap.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_error.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-utils.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/utils_getopt.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Device_freertos.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_AT_UART_linux.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Device_linux.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Device_nonos.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_AT_UART_win.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Device_win.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_OS_win.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Timer_win.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/coap/coap_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/gateway/gateway_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/mqtt_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_mqtt_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_coap_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_mqtt_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/shadow/shadow_sample.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_socket_inf.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_utils.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/gateway_common.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/network_interface.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_param_check.h delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_client.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_socket_inf.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_utils.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/network_at_tcp.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/network_interface.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_auth.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_common.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_message.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/dynreg/dynreg.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_api.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_common.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_mqtt.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_coap.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_json.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_token.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_device.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_aes.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_base64.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_getopt.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_ringbuff.c delete mode 100644 components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/example_config.json create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/.clang-format rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/.gitignore (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/CMakeLists.txt (95%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/CMakeSettings.json (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/LICENSE (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/Makefile (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/README.md (94%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/certs/README.md (100%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/cmake_build.sh rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/device_info.json (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/C-SDK_API及可变参数说明.md (91%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md (97%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_MTMC多线程多设备支持.md rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/C-SDK_Porting跨平台移植概述.md (89%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/Device_Auth设备接入认证.md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/FreeRTOS+lwIP平台移植说明.md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md (97%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md (90%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md (93%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/ota_sample_固件升级.md rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/MCU+腾讯云定制AT模组.md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/MCU+通用TCP_AT模组移植(FreeRTOS).md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/docs/MCU+通用TCP_AT模组移植(nonOS).md (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/CMakeLists.txt (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/Makefile (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/README.txt (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/config-ccm-psk-tls1_2.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/config-mini-tls1_1.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/config-no-entropy.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/config-picocoin.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/config-suite-b.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/configs/config-thread.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/aes.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/aesni.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/arc4.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/asn1.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/asn1write.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/base64.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/bignum.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/blowfish.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/bn_mul.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/camellia.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ccm.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/certs.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/check_config.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/cipher.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/cipher_internal.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/cmac.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/compat-1.3.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/config.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ctr_drbg.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/debug.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/des.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/dhm.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ecdh.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ecdsa.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ecjpake.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ecp.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/entropy.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/entropy_poll.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/error.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/gcm.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/havege.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/hmac_drbg.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/md.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/md2.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/md4.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/md5.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/md_internal.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/memory_buffer_alloc.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/net.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/net_sockets.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/oid.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/padlock.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/pem.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/pk.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/pk_internal.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs11.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs12.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs5.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/platform.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/platform_time.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ripemd160.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/rsa.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/sha1.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/sha256.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/sha512.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ssl.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cache.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ciphersuites.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cookie.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_internal.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ticket.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/threading.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/timing.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/version.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/x509.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crl.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crt.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/x509_csr.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/include/mbedtls/xtea.h (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/Makefile (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/aes.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/aesni.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/arc4.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/asn1parse.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/asn1write.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/base64.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/bignum.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/blowfish.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/camellia.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ccm.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/certs.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/cipher.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/cipher_wrap.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/cmac.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ctr_drbg.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/debug.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/des.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/dhm.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ecdh.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ecdsa.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ecjpake.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ecp.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ecp_curves.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/entropy.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/entropy_poll.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/error.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/gcm.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/havege.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/hmac_drbg.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/md.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/md2.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/md4.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/md5.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/md_wrap.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/net_sockets.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/oid.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/padlock.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pem.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pk.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pk_wrap.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pkcs11.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pkcs12.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pkcs5.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pkparse.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/pkwrite.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/platform.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ripemd160.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/rsa.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/sha1.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/sha256.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/sha512.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_cache.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_cli.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_cookie.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_srv.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_ticket.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/ssl_tls.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/threading.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/timing.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/version.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/version_features.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509_create.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509_crl.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509_crt.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509_csr.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509write_crt.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/x509write_csr.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/external_libs/mbedtls/library/xtea.c (100%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/config.h create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_coap.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/exports/qcloud_iot_export_dynreg.h (84%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_error.h create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/exports/qcloud_iot_export_log.h (66%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/exports/qcloud_iot_export_mqtt.h (56%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/exports/qcloud_iot_export_ota.h (79%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/exports/qcloud_iot_export_shadow.h (70%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/exports/qcloud_iot_export_system.h (89%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/lite-list.h (73%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-utils.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/platform.h (81%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/qcloud_iot_export.h (60%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/qcloud_iot_export_variables.h (66%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/include/qcloud_iot_import.h (86%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/utils_getopt.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/make.settings (75%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/CMakeLists.txt (100%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/at_device/esp8266/at_device_esp8266.h (71%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/freertos/HAL_OS_freertos.c (59%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny => qcloud-iot-hub-sdk/3rdparty/platform/os/freertos}/HAL_TCP_lwip.c (75%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/freertos/HAL_Timer_freertos.c (54%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny => qcloud-iot-hub-sdk/3rdparty/platform/os/freertos}/HAL_UDP_lwip.c (70%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/linux/HAL_Log_linux.c (79%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/linux/HAL_OS_linux.c (52%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/linux/HAL_TCP_linux.c (79%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/linux/HAL_Timer_linux.c (67%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/linux/HAL_UDP_linux.c (69%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/nonos/HAL_OS_nonos.c (89%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/nonos/HAL_Timer_nonos.c (55%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c (69%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c (76%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/rtthread/tc_tls_config.h (99%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Device_win.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/windows/HAL_Log_win.c (79%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_OS_win.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/windows/HAL_TCP_win.c (62%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/os/windows/HAL_UDP_win.c (68%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c (60%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c (74%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/samples/CMakeLists.txt (85%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/samples/Makefile (87%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/coap/coap_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/gateway/gateway_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/mqtt_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_mqtt_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_shadow_sample.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/samples/ota/ota_coap_sample.c (51%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_mqtt_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c (56%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_coap_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_mqtt_sample.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/shadow/shadow_sample.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/CMakeLists.txt (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/at_client.h (62%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_socket_inf.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/at_uart_hal.h (67%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_utils.h create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/coap_client_net.h (90%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/gateway_common.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/json_parser.h (52%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/log_upload.h (86%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/mqtt_client.h (53%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/mqtt_client_net.h (88%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/network_interface.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/ota_client.h (69%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/ota_fetch.h (92%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/ota_lib.h (90%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h (90%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h (78%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/shadow_client.h (63%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/shadow_client_common.h (87%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/shadow_client_json.h (81%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_aes.h (70%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_base64.h (68%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_hmac.h (91%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_httpc.h (58%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_list.h (87%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_md5.h (82%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_param_check.h rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_ringbuff.h (54%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_sha1.h (85%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/internal_inc/utils_timer.h (94%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_client.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/network_interface.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/network/socket/network_socket.c (71%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/network/tls/network_tls.c (72%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_auth.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_common.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c (73%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_message.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/coap/coap_client_net.c (89%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c (74%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/http/utils_httpc.c (78%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c (71%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c (64%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c (78%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c (59%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c (61%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c (66%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c (82%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/dynreg/dynreg.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_mqtt.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/log/log_upload.c (66%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/ota/ota_client.c (74%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_coap.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/ota/ota_fetch.c (66%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/ota/ota_lib.c (57%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/ota/ota_mqtt.c (60%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/shadow/shadow_client_common.c (88%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_json.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/shadow/shadow_client_manager.c (62%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/services/system/system_mqtt.c (59%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/json_parser.c (59%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_token.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/qcloud_iot_ca.c (90%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/qcloud_iot_log.c (67%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/string_utils.c (57%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_aes.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_base64.c create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_getopt.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/utils_hmac.c (50%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/utils_list.c (90%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/utils_md5.c (52%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/utils_sha1.c (67%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/sdk_src/utils/utils_timer.c (75%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/internal_make_funcs.mk (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/parse_make_settings.mk (98%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/rules-tests.mk (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/rules.mk (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/stats_static_lib.sh (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/update_gtest.sh (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/build_scripts/update_mbedtls.sh (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/cmake_scripts/config.h.in (93%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/cmake_scripts/convert.sh (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/codegen.py (100%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/example_config.json create mode 100644 components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/run-clang-tidy rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/3rdparty/tools/update_from_old_SDK.sh (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/port/TencentOS_tiny/HAL_AT_UART_tencentos_tiny.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/port/TencentOS_tiny/HAL_Device_tencentos_tiny.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/port/TencentOS_tiny/HAL_OS_tencentos_tiny.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos => qcloud-iot-hub-sdk/port/TencentOS_tiny}/HAL_TCP_lwip.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/port/TencentOS_tiny/HAL_TCP_module.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/port/TencentOS_tiny/HAL_Timer_tencentos_tiny.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos => qcloud-iot-hub-sdk/port/TencentOS_tiny}/HAL_UDP_lwip.c (100%) rename components/connectivity/{qcloud-iot-hub-sdk-3.1.2 => qcloud-iot-hub-sdk}/port/TencentOS_tiny/HAL_UDP_module.c (100%) create mode 100644 components/connectivity/qcloud-iot-hub-sdk/version diff --git a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvoptx b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvoptx index 34e64344..7628a83f 100644 --- a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvoptx +++ b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvoptx @@ -161,9 +161,9 @@ 0 0 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c - \\TencentOS_tiny\../../../../components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c\290 + \\TencentOS_tiny\../../../../components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c\290 1 @@ -2385,7 +2385,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c HAL_AT_UART_tencentos_tiny.c 0 0 @@ -2397,7 +2397,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c HAL_Device_tencentos_tiny.c 0 0 @@ -2409,7 +2409,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c HAL_OS_tencentos_tiny.c 0 0 @@ -2421,7 +2421,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_TCP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_TCP_module.c HAL_TCP_module.c 0 0 @@ -2433,7 +2433,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c HAL_Timer_tencentos_tiny.c 0 0 @@ -2445,7 +2445,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_UDP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_UDP_module.c HAL_UDP_module.c 0 0 @@ -2465,7 +2465,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client.c coap_client.c 0 0 @@ -2477,7 +2477,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_auth.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_auth.c coap_client_auth.c 0 0 @@ -2489,7 +2489,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_common.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_common.c coap_client_common.c 0 0 @@ -2501,7 +2501,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_deserialize.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_deserialize.c coap_client_deserialize.c 0 0 @@ -2513,7 +2513,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_message.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_message.c coap_client_message.c 0 0 @@ -2525,7 +2525,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_net.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_net.c coap_client_net.c 0 0 @@ -2537,7 +2537,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_serialize.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_serialize.c coap_client_serialize.c 0 0 @@ -2557,7 +2557,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_parser.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_parser.c json_parser.c 0 0 @@ -2569,7 +2569,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_token.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_token.c json_token.c 0 0 @@ -2581,7 +2581,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_ca.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_ca.c qcloud_iot_ca.c 0 0 @@ -2593,7 +2593,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_device.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_device.c qcloud_iot_device.c 0 0 @@ -2605,7 +2605,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_log.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_log.c qcloud_iot_log.c 0 0 @@ -2617,7 +2617,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\string_utils.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\string_utils.c string_utils.c 0 0 @@ -2629,7 +2629,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_aes.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_aes.c utils_aes.c 0 0 @@ -2641,7 +2641,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_base64.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_base64.c utils_base64.c 0 0 @@ -2653,7 +2653,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_getopt.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_getopt.c utils_getopt.c 0 0 @@ -2665,7 +2665,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_hmac.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_hmac.c utils_hmac.c 0 0 @@ -2677,7 +2677,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_list.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_list.c utils_list.c 0 0 @@ -2689,7 +2689,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_md5.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_md5.c utils_md5.c 0 0 @@ -2701,7 +2701,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_ringbuff.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_ringbuff.c utils_ringbuff.c 0 0 @@ -2713,7 +2713,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_sha1.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_sha1.c utils_sha1.c 0 0 @@ -2725,7 +2725,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_timer.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_timer.c utils_timer.c 0 0 @@ -2745,7 +2745,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\network_interface.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\network_interface.c network_interface.c 0 0 @@ -2757,7 +2757,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\tls\network_tls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\tls\network_tls.c network_tls.c 0 0 @@ -2769,7 +2769,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\socket\network_socket.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\socket\network_socket.c network_socket.c 0 0 @@ -2781,7 +2781,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c HAL_DTLS_mbedtls.c 0 0 @@ -2793,7 +2793,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c HAL_TLS_mbedtls.c 0 0 diff --git a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvprojx b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvprojx index c19c4872..f411d3c2 100644 --- a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvprojx +++ b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_coap/TencentOS_tiny.uvprojx @@ -338,7 +338,7 @@ USE_HAL_DRIVER,STM32L431xx,MBEDTLS_CONFIG_FILE=<qcloud/dtls_psk_config.h>,COAP_COMM_ENABLED - ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\hal\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\devices\esp8266;..\..\..\..\devices\rhf76_lora;..\..\..\..\devices\esp8266_tencent_firmware;..\..\..\..\devices\bc35_28_95;..\..\BSP\Hardware\DHT11;..\..\BSP\Hardware\OLED;..\..\BSP\Hardware\BH1750;..\..\TOS-CONFIG;..\..\..\..\examples\helloworld;..\..\..\..\components\security\mbedtls\3rdparty\include;..\..\..\..\components\security\mbedtls\wrapper\include;..\..\..\..\net\at\include;..\..\..\..\net\sal_module_wrapper;..\..\..\..\net\lora_module_wrapper;..\..\..\..\net\tencent_firmware_module_wrapper;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\include;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\include\exports;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\internal_inc + ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\hal\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\devices\esp8266;..\..\..\..\devices\rhf76_lora;..\..\..\..\devices\esp8266_tencent_firmware;..\..\..\..\devices\bc35_28_95;..\..\BSP\Hardware\DHT11;..\..\BSP\Hardware\OLED;..\..\BSP\Hardware\BH1750;..\..\TOS-CONFIG;..\..\..\..\examples\helloworld;..\..\..\..\components\security\mbedtls\3rdparty\include;..\..\..\..\components\security\mbedtls\wrapper\include;..\..\..\..\net\at\include;..\..\..\..\net\sal_module_wrapper;..\..\..\..\net\lora_module_wrapper;..\..\..\..\net\tencent_firmware_module_wrapper;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\include;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\include\exports;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\internal_inc @@ -1280,32 +1280,32 @@ HAL_AT_UART_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c HAL_Device_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c HAL_OS_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c HAL_TCP_module.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_TCP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_TCP_module.c HAL_Timer_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c HAL_UDP_module.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_UDP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_UDP_module.c @@ -1315,37 +1315,37 @@ coap_client.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client.c coap_client_auth.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_auth.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_auth.c coap_client_common.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_common.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_common.c coap_client_deserialize.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_deserialize.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_deserialize.c coap_client_message.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_message.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_message.c coap_client_net.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_net.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_net.c coap_client_serialize.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\coap\coap_client_serialize.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\coap\coap_client_serialize.c @@ -1355,77 +1355,77 @@ json_parser.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_parser.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_parser.c json_token.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_token.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_token.c qcloud_iot_ca.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_ca.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_ca.c qcloud_iot_device.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_device.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_device.c qcloud_iot_log.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_log.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_log.c string_utils.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\string_utils.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\string_utils.c utils_aes.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_aes.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_aes.c utils_base64.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_base64.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_base64.c utils_getopt.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_getopt.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_getopt.c utils_hmac.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_hmac.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_hmac.c utils_list.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_list.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_list.c utils_md5.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_md5.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_md5.c utils_ringbuff.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_ringbuff.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_ringbuff.c utils_sha1.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_sha1.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_sha1.c utils_timer.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_timer.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_timer.c @@ -1435,27 +1435,27 @@ network_interface.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\network_interface.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\network_interface.c network_tls.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\tls\network_tls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\tls\network_tls.c network_socket.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\socket\network_socket.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\socket\network_socket.c HAL_DTLS_mbedtls.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c HAL_TLS_mbedtls.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c diff --git a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvoptx b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvoptx index 20d615d2..f5e64fd2 100644 --- a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvoptx +++ b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvoptx @@ -2385,7 +2385,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c HAL_AT_UART_tencentos_tiny.c 0 0 @@ -2397,7 +2397,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c HAL_Device_tencentos_tiny.c 0 0 @@ -2409,7 +2409,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c HAL_OS_tencentos_tiny.c 0 0 @@ -2421,7 +2421,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_TCP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_TCP_module.c HAL_TCP_module.c 0 0 @@ -2433,7 +2433,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c HAL_Timer_tencentos_tiny.c 0 0 @@ -2445,7 +2445,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_UDP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_UDP_module.c HAL_UDP_module.c 0 0 @@ -2465,7 +2465,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client.c mqtt_client.c 0 0 @@ -2477,7 +2477,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_common.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_common.c mqtt_client_common.c 0 0 @@ -2489,7 +2489,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_connect.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_connect.c mqtt_client_connect.c 0 0 @@ -2501,7 +2501,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_net.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_net.c mqtt_client_net.c 0 0 @@ -2513,7 +2513,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_publish.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_publish.c mqtt_client_publish.c 0 0 @@ -2525,7 +2525,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_subscribe.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_subscribe.c mqtt_client_subscribe.c 0 0 @@ -2537,7 +2537,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_unsubscribe.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_unsubscribe.c mqtt_client_unsubscribe.c 0 0 @@ -2549,7 +2549,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_yield.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_yield.c mqtt_client_yield.c 0 0 @@ -2569,7 +2569,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_parser.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_parser.c json_parser.c 0 0 @@ -2581,7 +2581,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_token.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_token.c json_token.c 0 0 @@ -2593,7 +2593,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_ca.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_ca.c qcloud_iot_ca.c 0 0 @@ -2605,7 +2605,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_device.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_device.c qcloud_iot_device.c 0 0 @@ -2617,7 +2617,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_log.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_log.c qcloud_iot_log.c 0 0 @@ -2629,7 +2629,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\string_utils.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\string_utils.c string_utils.c 0 0 @@ -2641,7 +2641,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_aes.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_aes.c utils_aes.c 0 0 @@ -2653,7 +2653,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_base64.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_base64.c utils_base64.c 0 0 @@ -2665,7 +2665,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_getopt.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_getopt.c utils_getopt.c 0 0 @@ -2677,7 +2677,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_hmac.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_hmac.c utils_hmac.c 0 0 @@ -2689,7 +2689,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_list.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_list.c utils_list.c 0 0 @@ -2701,7 +2701,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_md5.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_md5.c utils_md5.c 0 0 @@ -2713,7 +2713,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_ringbuff.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_ringbuff.c utils_ringbuff.c 0 0 @@ -2725,7 +2725,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_sha1.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_sha1.c utils_sha1.c 0 0 @@ -2737,7 +2737,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_timer.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_timer.c utils_timer.c 0 0 @@ -2757,7 +2757,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\network_interface.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\network_interface.c network_interface.c 0 0 @@ -2769,7 +2769,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\tls\network_tls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\tls\network_tls.c network_tls.c 0 0 @@ -2781,7 +2781,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\socket\network_socket.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\socket\network_socket.c network_socket.c 0 0 @@ -2793,7 +2793,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c HAL_DTLS_mbedtls.c 0 0 @@ -2805,7 +2805,7 @@ 0 0 0 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c HAL_TLS_mbedtls.c 0 0 diff --git a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvprojx b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvprojx index 913da6cd..4efea351 100644 --- a/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvprojx +++ b/board/TencentOS_tiny_EVB_MX_Plus/KEIL/qcloud_iot_hub_sdk_mqtt/TencentOS_tiny.uvprojx @@ -338,7 +338,7 @@ USE_HAL_DRIVER,STM32L431xx,MBEDTLS_CONFIG_FILE=<qcloud/tls_psk_config.h> - ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\hal\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\devices\esp8266;..\..\..\..\devices\rhf76_lora;..\..\..\..\devices\esp8266_tencent_firmware;..\..\..\..\devices\bc35_28_95;..\..\BSP\Hardware\DHT11;..\..\BSP\Hardware\OLED;..\..\BSP\Hardware\BH1750;..\..\TOS-CONFIG;..\..\..\..\examples\helloworld;..\..\..\..\components\security\mbedtls\3rdparty\include;..\..\..\..\components\security\mbedtls\wrapper\include;..\..\..\..\net\at\include;..\..\..\..\net\sal_module_wrapper;..\..\..\..\net\lora_module_wrapper;..\..\..\..\net\tencent_firmware_module_wrapper;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\include;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\include\exports;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\internal_inc + ..\..\BSP\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Inc;..\..\..\..\platform\vendor_bsp\st\STM32L4xx_HAL_Driver\Legacy;..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L4xx\Include;..\..\..\..\platform\vendor_bsp\st\CMSIS\Include;..\..\..\..\kernel\core\include;..\..\..\..\platform\arch\arm\cortex-m4\keil;..\..\..\..\kernel\pm\include;..\..\..\..\kernel\hal\include;..\..\..\..\arch\arm\arm-v7m\common\include;..\..\..\..\arch\arm\arm-v7m\cortex-m4\armcc;..\..\..\..\osal\cmsis_os;..\..\..\..\devices\esp8266;..\..\..\..\devices\rhf76_lora;..\..\..\..\devices\esp8266_tencent_firmware;..\..\..\..\devices\bc35_28_95;..\..\BSP\Hardware\DHT11;..\..\BSP\Hardware\OLED;..\..\BSP\Hardware\BH1750;..\..\TOS-CONFIG;..\..\..\..\examples\helloworld;..\..\..\..\components\security\mbedtls\3rdparty\include;..\..\..\..\components\security\mbedtls\wrapper\include;..\..\..\..\net\at\include;..\..\..\..\net\sal_module_wrapper;..\..\..\..\net\lora_module_wrapper;..\..\..\..\net\tencent_firmware_module_wrapper;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\include;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\include\exports;..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\internal_inc @@ -1280,32 +1280,32 @@ HAL_AT_UART_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_AT_UART_tencentos_tiny.c HAL_Device_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Device_tencentos_tiny.c HAL_OS_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_OS_tencentos_tiny.c HAL_TCP_module.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_TCP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_TCP_module.c HAL_Timer_tencentos_tiny.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_Timer_tencentos_tiny.c HAL_UDP_module.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\port\TencentOS_tiny\HAL_UDP_module.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\port\TencentOS_tiny\HAL_UDP_module.c @@ -1315,42 +1315,42 @@ mqtt_client.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client.c mqtt_client_common.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_common.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_common.c mqtt_client_connect.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_connect.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_connect.c mqtt_client_net.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_net.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_net.c mqtt_client_publish.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_publish.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_publish.c mqtt_client_subscribe.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_subscribe.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_subscribe.c mqtt_client_unsubscribe.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_unsubscribe.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_unsubscribe.c mqtt_client_yield.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\protocol\mqtt\mqtt_client_yield.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\protocol\mqtt\mqtt_client_yield.c @@ -1360,77 +1360,77 @@ json_parser.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_parser.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_parser.c json_token.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\json_token.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\json_token.c qcloud_iot_ca.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_ca.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_ca.c qcloud_iot_device.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_device.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_device.c qcloud_iot_log.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\qcloud_iot_log.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\qcloud_iot_log.c string_utils.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\string_utils.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\string_utils.c utils_aes.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_aes.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_aes.c utils_base64.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_base64.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_base64.c utils_getopt.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_getopt.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_getopt.c utils_hmac.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_hmac.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_hmac.c utils_list.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_list.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_list.c utils_md5.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_md5.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_md5.c utils_ringbuff.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_ringbuff.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_ringbuff.c utils_sha1.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_sha1.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_sha1.c utils_timer.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\utils\utils_timer.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\utils\utils_timer.c @@ -1440,27 +1440,27 @@ network_interface.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\network_interface.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\network_interface.c network_tls.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\tls\network_tls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\tls\network_tls.c network_socket.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\sdk_src\network\socket\network_socket.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\sdk_src\network\socket\network_socket.c HAL_DTLS_mbedtls.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_DTLS_mbedtls.c HAL_TLS_mbedtls.c 1 - ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk-3.1.2\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c + ..\..\..\..\components\connectivity\qcloud-iot-hub-sdk\3rdparty\platform\tls\mbedtls\HAL_TLS_mbedtls.c diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/CMakeLists.txt b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/CMakeLists.txt index 186f5f30..f72115ae 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/CMakeLists.txt +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/CMakeLists.txt @@ -18,8 +18,14 @@ set(PLATFORM "linux") #set(COMPILE_TOOLS "MSVC") #set(PLATFORM "windows") +# 是否使能网关功能 +set(FEATURE_GATEWAY_ENABLED OFF) + +# 是否使能多线程 +set(FEATURE_MULTITHREAD_ENABLED OFF) + # 是否打开数据模板事件上报功能 -set(FEATURE_EVENT_POST_ENABLED ON) +set(FEATURE_EVENT_POST_ENABLED OFF) # 是否打开数据模板行为功能 set(FEATURE_ACTION_ENABLED ON) @@ -36,6 +42,9 @@ set(FEATURE_AUTH_WITH_NOTLS OFF) # 是否打开代码中获取设备信息功能,OFF时将从device_info.json中读取设备信息 set(FEATURE_DEBUG_DEV_INFO_USED OFF) +# 是否使用HTTPS下载固件 +set(FEATURE_OTA_USE_HTTPS ON) + # 使用SDK AT组件实现通用TCP模组网络读写需要配置 --->begin # 是否打开AT模组TCP功能 set(FEATURE_AT_TCP_ENABLED OFF) @@ -57,40 +66,36 @@ set(FEATURE_AT_DEBUG OFF) ######################CONFIG END###################################### # 设置CMAKE使用编译工具及编译选项 -if (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "gcc") - set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) + + +if ((NOT COMPILE_TOOLS STREQUAL "gcc") AND (NOT COMPILE_TOOLS STREQUAL "MSVC")) + #用户自定义 + set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) # 编译工具 + message(WARNING "User defined platform or compile tools!") +endif() + +if(CMAKE_COMPILER_IS_GNUCC) if(${BUILD_TYPE} STREQUAL "release") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -std=gnu99 -Os -pthread") # 编译选项 elseif(${BUILD_TYPE} STREQUAL "debug") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -std=gnu99 -Os -pthread") # 编译选项 endif() -elseif (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "arm-none-linux-gnueabi-gcc") - set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) - if(${BUILD_TYPE} STREQUAL "release") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 - elseif(${BUILD_TYPE} STREQUAL "debug") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 - endif() -elseif (PLATFORM STREQUAL "windows" AND COMPILE_TOOLS STREQUAL "MSVC") - # 去除相应的警告 +endif() + +if(CMAKE_COMPILER_IS_CLANG) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_USE_32BIT_TIME_T) if(CMAKE_C_FLAGS MATCHES "/W[0-4]") string(REGEX REPLACE "/W[0-4]" "/W2" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") else() set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2") endif() -else () - #用户自定义 - set(CMAKE_C_COMPILER ${COMPILE_TOOLS}) # 编译工具 - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os") # 编译选项 - message(WARNING "User defined platform or compile tools!") endif() # 解析配置 if(${BUILD_TYPE} STREQUAL "release") option(IOT_DEBUG "Enable IOT_DEBUG" OFF) elseif(${BUILD_TYPE} STREQUAL "debug") - option(IOT_DEBUG "Enable IOT_DEBUG" ON) + option(IOT_DEBUG "Enable IOT_DEBUG" OFF) else() message(FATAL_ERROR "INVAILD BUILD_TYPE:${BUILD_TYPE}!") endif() @@ -107,15 +112,29 @@ else() endif() if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") - option(OTA_MQTT_CHANNEL "Enable TA_MQTT_CHANNEL" ON) + option(OTA_MQTT_CHANNEL "Enable OTA_MQTT_CHANNEL" ON) endif() +option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED}) option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" ${FEATURE_AUTH_WITH_NOTLS}) option(EVENT_POST_ENABLED "Enable EVENT_POST" ${FEATURE_EVENT_POST_ENABLED}) option(ACTION_ENABLED "Enable ACTION" ${FEATURE_ACTION_ENABLED}) option(AT_TCP_ENABLED "Enable AT_TCP" ${FEATURE_AT_TCP_ENABLED}) option(DEBUG_DEV_INFO_USED "Enable DEBUG_DEV_INFO_USED" ${FEATURE_DEBUG_DEV_INFO_USED}) + +if(${FEATURE_AUTH_WITH_NOTLS} STREQUAL "ON" ) + option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" OFF) +else() + option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" ${FEATURE_OTA_USE_HTTPS}) +endif() + +if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON") + option(MULTITHREAD_ENABLED "Enable MULTITHREAD" ON) +else() + option(MULTITHREAD_ENABLED "Enable MULTITHREAD" ${FEATURE_MULTITHREAD_ENABLED}) +endif() + if(AT_TCP_ENABLED STREQUAL "ON") option(AT_UART_RECV_IRQ "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_UART_RECV_IRQ}) option(AT_OS_USED "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_OS_USED}) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/Makefile b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/Makefile index 7afc9602..d9db38b7 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/Makefile +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/Makefile @@ -70,6 +70,10 @@ $(call CompLib_Map, AT_TCP_ENABLED, \ $(SRC_DIR)/network/at_socket \ ) +$(call CompLib_Map, GATEWAY_ENABLED, \ + $(SRC_DIR)/services/gateway \ +) + IOTSDK_SRC_FILES := \ $(foreach v, \ @@ -144,7 +148,7 @@ $(call CompInc_Map, AT_TCP_ENABLED, \ $(PLATFORM_DIR)/at_device/$(PLATFORM_AT_DEV) \ ) -CFLAGS += -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os ${IOTSDK_INCLUDE_FILES} -pthread -DFORCE_SSL_VERIFY +CFLAGS += -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os ${IOTSDK_INCLUDE_FILES} -std=gnu99 -pthread -DFORCE_SSL_VERIFY #CFLAGS += -DMQTT_RMDUP_MSG_ENABLED diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/device_info.json b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/device_info.json index 1f895c2a..6c9150af 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/device_info.json +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/device_info.json @@ -12,5 +12,18 @@ "cert_deviceinfo":{ "devCertFile":"YOUR_DEVICE_CERT_FILE_NAME", "devPrivateKeyFile":"YOUR_DEVICE_PRIVATE_KEY_FILE_NAME" + }, + + "subDev":{ + "subdev_num":6, + "subdev_list": + [ + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev001"}, + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev002"}, + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev003"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test001"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test002"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test003"} + ] } } \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板代码生成.md b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板代码生成.md new file mode 100644 index 00000000..f19a1dbe --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板代码生成.md @@ -0,0 +1,19 @@ +## 简介 +本文介绍基于物联开发平台 IoT Explorer 创建的数据模板如何生成模板代码。 + +## 数据模板创建 +参阅[产品定义](https://cloud.tencent.com/document/product/1081/34739?!preview&!editLang=zh#.E6.95.B0.E6.8D.AE.E6.A8.A1.E6.9D.BF)创建数据模板 + +## 数据模板描述文件导出 +数据模板描述文件是一个 JSON 格式的文件,描述了产品定义的属性、事件及其他信息,在平台导出此json文件,如下图示: +![](https://main.qcloudimg.com/raw/0951d7c3f540ca716442e08651a0efa5.jpg) + +## 数据模板模板代码生成 +将下载的json文件拷贝到tools目录,执行./codegen.py -c xx/config.json -d ../targetdir/ 命令,则会根据json文件在target目录生成所定义产品的数据模板及事件的配置文件,将这个生成的配置文件拷贝到data_template_sample.c的同级目录,data_template_sample.c示例了通用的数据模板处理框架,可以基于此框架添加业务逻辑。智能灯示例light_data_template_sample.c即是基于此框架的场景示例。 + +``` +./codegen.py -c light.json -d ../samples/data_template/ +加载 light.json 文件成功 +文件 ../samples/data_template/data_config.c 生成成功 +文件 ../samples/data_template/events_config.c 生成成功 +``` \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板协议.md b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板协议.md new file mode 100644 index 00000000..2691a6a6 --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板协议.md @@ -0,0 +1,486 @@ +## 简介 + +用户创建完产品后即可定义数据模板,设备开发阶段会基于数据模板生成 MCU SDK 代码,设备调试阶段的在线调试会接收设备的上报数据并可在控制台下发控制指令到设备进行调试。本文档介绍数据模板协议。 + +## 数据模板协议 + +### 概述 +物联网开发平台定义了一套通用的方法,实现设备的统一描述、统一控制,进而提供数据的流转和计算服务,实现不同设备的互联互通、数据的流转和融合,助力应用落地。 + +产品定义了数据模板以后,设备可以按照数据模板中的定义上报属性、事件,并可对设备下发远程控制指令,即对可写的设备属性进行修改。数据模板的管理详见 [产品定义](https://cloud.tencent.com/document/product/1081/34739)。数据模板协议包括了以下几部分。 + +- 设备属性上报:设备端将定义的属性根据设备端的业务逻辑向云端上报。 +- 设备远程控制:从云端向设备端下发控制指令,即设置设备可写属性。 +- 获取设备最新上报信息:获取设备最新的上报数据。 +- 设备事件上报:设备可根据定义的数据模板中的事件,当事件被触发,则根据设备事件上报的协议上报告警、故障等事件信息。 +- 设备行为:云端可以通过 RPC 的方式来要求设备执行某个动作行为,适用于应用需要实时获取设备的执行结果的场景。 + +### 设备属性上报 + +1. 当设备需要向云端上报数据时,开发平台为设备设定了默认的 Topic: + - 上行请求 Topic: `$thing/up/property/{ProductID}/{DeviceName}` + - 上行响应 Topic: `$thing/down/property/{ProductID}/{DeviceName}` +2. 请求 + - 设备端请求报文示例: +``` +{ + "method":"report", + "clientToken":"123", + "timestamp":1212121221, + "params":{ + "power_switch":1, + "color":1, + "brightness":32 + } +} +``` + - 参数说明: + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringreport 表示设备属性上报。
clientTokenString用于上下行消息配对标识
timestampInteger属性上报的时间
paramsJSONJSON 结构内为设备上报的属性值
+3. 响应 + - 云端返回设备端报文示例: +``` +{ + "method":"report_reply", + "clientToken":"123", + "code":0, + "status":"some message wher error" +} +``` + - 响应参数说明: + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringreport_reply 表示云端接收设备上报后的响应报文
clientTokenString用于上下行消息配对标识
codeInteger0表示云端成功收到设备上报的属性
statusString当code非0的时候, 提示错误信息
+ + +### 设备远程控制 + +1. 云端下发控制指令使用的 Topic: + - 下发 Topic: `$thing/down/property/{ProductID}/{DeviceName}` + - 响应 Topic: `$thing/up/property/{ProductID}/{DeviceName}` +2. 请求 + - 远程控制请求消息格式: +``` +{ + "method": "control", + "clientToken": "123", + "params": { + "power_switch": 1, + "color": 1, + "brightness": 66 + } +} +``` + - 请求参数说明: + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringcontrol 表示云端向设备发起控制请求
clientTokenString用于上下行消息配对标识
paramsJSONJSON 结构内为设备上报的属性值
+3. 响应 + - 设备响应远程控制请求消息格式: +``` +{ + "method":"control_reply", + "clientToken":"123", + "code":0, + "status":"some message wher error" +} +``` + - 请求参数说明: + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
control_replyString表示设备向云端下发的控制指令的请求响应
codeInteger0表示设备成功接收到云端下发的控制指令
statusString当 code 非0的时候, 提示错误信息
+ + + +### 获取设备最新上报信息 + +1. 设备从云端接收最新消息使用的 Topic: + - 请求 Topic: `$thing/up/property/{ProductID}/{DeviceName}` + - 响应 Topic: `$thing/down/property/{ProductID}/{DeviceName}` +2. 请求 + - 请求消息格式: +``` +{ + "method": "get_status", + "clientToken": "123", + "type" : "report", + "showmeta": 0 +} +``` + - 请求参数说明: + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
get_statusStringget_status 表示获取设备最新上报的信息
clientTokenString消息 ID,回复的消息将会返回该数据,用于请求响应消息的对比。
typeString表示获取什么类型的信息。report 表示设备上报的信息
showmetaInteger标识回复消息是否带 metadata,缺省为0表示不返回 metadata
+3. 响应 + - 响应消息格式: +``` +{ + "method": "get_status_reply", + "code": 0, + "clientToken": "123", + "type": "report", + "data": { + "report": { + "power_switch": 1, + "color": 1, + "brightness": 66 + } + } +} +``` + - 响应参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
get_status_replyString表示获取设备最新上报信息的 reply 消息
codeInteger0标识云端成功收到设备上报的属性
clientTokenString消息 ID,回复的消息将会返回该数据,用于请求响应消息的对比。
typeString表示获取什么类型的信息。report 表示设备上报的信息
dataJSON返回具体设备上报的最新数据内容
+ + + +### 设备事件上报 + +1. 当设备需要向云端上报事件时,开发平台为设备设定了默认的 Topic: + - 上行请求 Topic: `$thing/up/event/<产品>/<设备>` + - 上行响应 Topic: `$thing/down/event/<产品>/<设备>` +2. 请求 + - 设备端请求报文示例: +``` +{ + "method":"event_post", + "clientToken":"123", + "version":"1.0", + "eventId":"PowerAlarm", + "type":"fatal", + "timestamp":1212121221, + "params":{ + "Voltage":2.8, + "Percent":20 + } +} +``` + - 请求参数说明: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringevent_post 表示事件上报。
clientTokenString消息 ID,回复的消息将会返回该数据, 用于请求响应消息的对比。
versionString协议版本,默认为1.0。
eventIdString事件的 ID,在数据模板事件中定义。
paramsString事件的参数,在数据模板事件中定义。
timestampInteger事件上报的时间,不填写该字段表示就使用事件上报本身的时间。
+3. 响应 + - 响应消息格式: +``` +{ + "method": "event_reply", + "clientToken": "123", + "version": "1.0", + "code": 0, + "status": "some message wher error", + "data": {} +} +``` + - 响应参数: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringevent_reply 表示是云端返回设备端的响应。
clientTokenString消息 ID,回复的消息将会返回该数据, 用于请求响应消息的对比。
versionString协议版本,默认为1.0。
codeInteger事件上报结果,0表示成功。
statusString事件上报结果描述。
dataJSON事件上报返回的内容。
+ + +### 设备行为调用 + +1. 当应用通过云端向设备发起某个行为调用时,开发平台为设备行为的处理设定了默认的 Topic: + - 应用调用设备行为 Topic: `$thing/down/action/<产品>/<设备>` + - 设备响应行为执行结果 Topic: `$thing/up/action/<产品>/<设备>` +2. 请求 + - 应用端发起设备行为调用报文示例: +``` +{ + "method": "action", + "clientToken": "20a4ccfd-d308-11e9-86c6-5254008a4f10", + "actionId": "openDoor", + "timestamp": 1212121221, + "params": { + "userid": "323343" + } +} +``` + - 请求参数说明: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringaction 表示是调用设备的某个行为
clientTokenString消息 ID,回复的消息将会返回该数据, 用于请求响应消息的对比。
actionIdStringactionId 是数据模板中的行为标识符,由开发者自行根据设备的应用场景定义
timestampInteger行为调用的当前时间
paramsString行为的调用参数,在数据模板的行为中定义。
+3. 响应 + - 响应消息格式: +``` +{ + "method": "action_reply", + "clientToken": "20a4ccfd-d308-11e9-86c6-5254008a4f10", + "code": 0, + "status": "some message wher error", + "response": { + "Code": 0 + } +} +``` + - 响应参数: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
参数类型说明
methodStringaction_reply 表示是设备端执行完指定的行为向云端回复的响应
clientTokenString消息 ID,回复的消息将会返回该数据, 用于请求响应消息的对比。
codeInteger行为执行结果,0表示成功。
statusString行为执行失败后的错误信息描述。
responseJSON设备行为中定义的返回参数,设备行为执行成功后,向云端返回执行结果
diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板应用开发.md b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板应用开发.md new file mode 100644 index 00000000..16afdb32 --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/数据模板开发/数据模板应用开发.md @@ -0,0 +1,121 @@ +## 数据模板业务逻辑开发 +数据模板示例data_template_sample.c已实现数据、事件收发及响应的通用处理框架。可以基于此示例开发业务逻辑,上下行业务逻辑添加的入口函数分别为 deal_up_stream_user_logic 、deal_down_stream_user_logic。可以参考智能灯的场景示例 light_data_template_sample.c 添加业务处理逻辑。 + +### 下行业务逻辑实现 +- 服务端下行的数据,SDK已按数据模板协议完成了json数据的解析。ProductDataDefine是第三步中根据在平台定义的产品数据模板生成的模板结构体,由定义的各属性构成成员变量。入参pData所指向的属性数据,从服务端下行数据中,SDK已经按数据模板协议完成了属性数据的解析,用户在下行逻辑处理的函数里边可以直接使用解析好的数据添加业务逻辑即可。 +- 用户根据数据模板数据pData进行相应的业务逻辑处理。 +``` +/*用户需要实现的下行数据的业务逻辑,pData除字符串变量已实现用户定义的所有其他变量值解析赋值,待用户实现业务逻辑*/ +static void deal_down_stream_user_logic(void *client, ProductDataDefine * pData) +{ + Log_d("someting about your own product logic wait to be done"); +} +``` + +- 示例用法: + +``` +/*智能灯属性数据模板*/ +typedef struct _ProductDataDefine { + TYPE_DEF_TEMPLATE_BOOL m_light_switch; + TYPE_DEF_TEMPLATE_ENUM m_color; + TYPE_DEF_TEMPLATE_INT m_brightness; + TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN+1]; +} ProductDataDefine; + +/*示例灯光控制处理逻辑*/ +static void deal_down_stream_user_logic(void *client,ProductDataDefine *light) +{ + int i; + const char * ansi_color = NULL; + const char * ansi_color_name = NULL; + char brightness_bar[] = "||||||||||||||||||||"; + int brightness_bar_len = strlen(brightness_bar); + + /*灯光颜色*/ + switch(light->m_color) { + case eCOLOR_RED: + ansi_color = ANSI_COLOR_RED; + ansi_color_name = " RED "; + break; + case eCOLOR_GREEN: + ansi_color = ANSI_COLOR_GREEN; + ansi_color_name = "GREEN"; + break; + case eCOLOR_BLUE: + ansi_color = ANSI_COLOR_BLUE; + ansi_color_name = " BLUE"; + break; + default: + ansi_color = ANSI_COLOR_YELLOW; + ansi_color_name = "UNKNOWN"; + break; + } + + + /* 灯光亮度显示条 */ + brightness_bar_len = (light->m_brightness >= 100)?brightness_bar_len:(int)((light->m_brightness * brightness_bar_len)/100); + for (i = brightness_bar_len; i < strlen(brightness_bar); i++) { + brightness_bar[i] = '-'; + } + + if(light->m_light_switch){ + /* 灯光开启式,按照控制参数展示 */ + HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET,\ + ansi_color,ansi_color_name,brightness_bar,light->m_name); + }else{ + /* 灯光关闭展示 */ + HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET,\ + ansi_color_name,brightness_bar,light->m_name); + } + +#ifdef EVENT_POST_ENABLED + if(eCHANGED == sg_DataTemplate[0].state){ + if(light->m_light_switch){ + memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy(sg_message,"light on"); + sg_status = 1; + }else{ + memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy(sg_message,"light off"); + sg_status = 0; + } + IOT_Event_setFlag(client, FLAG_EVENT0);/*灯的开关状态发生变化时置位事件,在eventPostCheck中会将置位的事件上报*/ + } +#endif +} +``` + +### 上行业务逻辑实现 + +- 设备端根据业务场景需要,对设备端数据属性采取一定策略进行监测处理,用户可以在***deal_up_stream_user_logic***中将需要上报的属性更新给入参pReportDataList属性上报列表及需要上报的属性个数,数据模板的示例处理框架,在***IOT_Template_JSON_ConstructReportArray***中会将属性数据列表处理为数据模板的协议格式,***IOT_Template_Report***将数据发送给服务端。 + +``` +/*用户根据业务修改属性值,然后设置属性状态为eCHANGED*/ +static void _refresh_local_property(void) +{ + //add your local property refresh logic +} + + +/*用户需要实现的上行数据的业务逻辑,此处仅供示例*/ +static int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) +{ + int i, j; + + /*监测是否需要更新本地数据*/ + _refresh_local_property(); + + /*将变化的属性更新到上报列表*/ + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if(eCHANGED == sg_DataTemplate[i].state) { + pReportDataList[j++] = &(sg_DataTemplate[i].data_property); + sg_DataTemplate[i].state = eNOCHANGE; + } + } + *pCount = j; + + return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; +} + +``` \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/设备固件升级.md b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/设备固件升级.md new file mode 100644 index 00000000..b42fa5a7 --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/docs/设备固件升级.md @@ -0,0 +1,129 @@ +## 操作场景 +设备固件升级又称 OTA,是物联网通信服务的重要组成部分。当物联设备有新功能或者需要修复漏洞时,设备可以通过 OTA 服务快速的进行固件升级。 + + +## 实现原理 +固件升级的过程中,需要设备订阅下面两个 Topic 来实现与云端的通信,如下图所示: +![OTA topic](https://main.qcloudimg.com/raw/0046e2a294c541e109fc0b6829d180cc.jpg) +示例: +```php +$ota/report/${productID}/${deviceName} +用于发布(上行)消息,设备上报版本号及下载、升级进度到云端 +$ota/update/${productID}/${deviceName} +用于订阅(下行)消息,设备接收云端的升级消息 +``` + + +## 操作流程 +设备的升级流程如下所示: +![OTA 时序图](https://main.qcloudimg.com/raw/a2f10ab90959a23b1675201b1e2311e0.jpg) +1. 设备上报当前版本号。设备端通过 MQTT 协议发布一条消息到 Topic `$ota/report/${productID/${deviceName}`,进行版本号的上报,消息为 json 格式,内容如下: +```json +{ + "type": "report_version", + "report":{ + "version": "0.1" + } +} +// type:消息类型 +// version:上报的版本号 +``` +2. 然后您可以在控制台上传固件。 +3. 在控制台将指定的设备升级到指定的版本。 +4. 触发固件升级操作后,设备端会通过订阅的 Topic `$ota/update/${productID}/${deviceName}` 收到固件升级的消息,内容如下: +``` json +{ + "file_size": 708482, + "md5sum": "36eb5951179db14a631463a37a9322a2", + "type": "update_firmware", + "url": "https://ota-1255858890.cos.ap-guangzhou.myqcloud.com", + "version": "0.2" +} +// type:消息类型为update_firmware +// version:升级版本 +// url:下载固件的url +// md5asum:固件的MD5值 +// file_size:固件大小,单位为字节 +``` +5. 设备在收到固件升级的消息后,根据 URL 下载固件,下载的过程中设备 SDK 会通过 Topic `$ota/report/${productID}/${deviceName}`不断的上报下载进度,上报的内容如下: +```json +{ + "type": "report_progress", + "report":{ + "progress":{ + "state":"downloading", + "percent":"10", + "result_code":"0", + "result_msg":"" + }, + "version": "0.2" + } +} +// type:消息类型 +// state:状态为正在下载中 +// percent:当前下载进度,百分比 +``` +6. 当设备下载完固件,设备需要通过 Topic `$ota/report/${productID}/${deviceName}`上报一条开始升级的消息,内容如下: +```json +{ + "type": "report_progress", + "report":{ + "progress":{ + "state":"burning", + "result_code":"0", + "result_msg":"" + }, + "version": "0.2" + } +} +// type:消息类型 +// state:状态为烧制中 +``` +7. 设备固件升级完成后,再向 Topic `$ota/report/${productID}/${deviceName}`上报升级成功消息,内容如下: +```json +{ + "type": "report_progress", + "report":{ + "progress":{ + "state":"done", + "result_code":"0", + "result_msg":"" + }, + "version": "0.2" + } +} +// type:消息类型 +// state:状态为已完成 +``` + +>!在下载固件或升级固件的过程中,如果失败,则通过 Topic `$ota/report/${productID}/${deviceName}`上报升级失败消息,内容如下: + +```json +{ + "type": "report_progress", + "report":{ + "progress":{ + "state":"fail", + "result_code":"-1", + "result_msg":"time_out" + }, + "version": "0.2" + } +} +// state:状态为失败 +// result_code:错误码,-1:下载超时;-2:文件不存在;-3:签名过期;-4:MD5不匹配;-5:更新固件失败 +// result_msg:错误消息 +``` + +## OTA断点续传 +物联网设备有部分场景处于弱网环境,在这个场景下连接会不稳定,固件下载会中断的情况出现。如果每次都从0偏移开始下载固件,则弱网环境有可能一直无法完成全部固件下载,因此固件的断点续传功能特别必要。 + +断点续传就是从文件上次中断的地方开始重新下载或上传,要实现断点续传的功能,需要设备端记录固件下载的中断位置,同时记录下载固件的md5、文件大小、版本信息。 + +平台针对OTA中断的场景,设备侧report设备的版本,如果上报的版本号与要升级的目标版本号不一致,则平台会再次下发固件升级消息,设备获取到升级的目标固件的信息与本地记录的中断的固件信息比较,确定为同一固件后,基于断点继续下载。 + +SDK提供的OTA sample示例了断点续传的断点记录及续传实现,示例是基于json文件实现记录描述,对于没有文件系统的修改这部分实现即可。 + +带断点续传的OTA升级流程如下,弱网环境下第3步到第6步有可能会多次执行,没有执行第7步,执行第3步,设备端都会收到第4步的消息。 + +![OTA 断点续传时序图](https://main.qcloudimg.com/raw/5d17e84352b59ea448fb95824ea53e6d.jpg) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aes.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aes.c index a186dee9..a251cce2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aes.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aes.c @@ -55,8 +55,10 @@ #if !defined(MBEDTLS_AES_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -91,8 +93,7 @@ static int aes_padlock_ace = -1; /* * Forward S-box */ -static const unsigned char FSb[256] = -{ +static const unsigned char FSb[256] = { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, @@ -218,8 +219,7 @@ static const uint32_t FT3[256] = { FT }; /* * Reverse S-box */ -static const unsigned char RSb[256] = -{ +static const unsigned char RSb[256] = { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, @@ -345,8 +345,7 @@ static const uint32_t RT3[256] = { RT }; /* * Round constants */ -static const uint32_t RCON[10] = -{ +static const uint32_t RCON[10] = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x0000001B, 0x00000036 @@ -395,8 +394,7 @@ static void aes_gen_tables( void ) /* * compute pow and log tables over GF(2^8) */ - for( i = 0, x = 1; i < 256; i++ ) - { + for ( i = 0, x = 1; i < 256; i++ ) { pow[i] = x; log[x] = i; x = ( x ^ XTIME( x ) ) & 0xFF; @@ -405,8 +403,7 @@ static void aes_gen_tables( void ) /* * calculate the round constants */ - for( i = 0, x = 1; i < 10; i++ ) - { + for ( i = 0, x = 1; i < 10; i++ ) { RCON[i] = (uint32_t) x; x = XTIME( x ) & 0xFF; } @@ -417,14 +414,17 @@ static void aes_gen_tables( void ) FSb[0x00] = 0x63; RSb[0x63] = 0x00; - for( i = 1; i < 256; i++ ) - { + for ( i = 1; i < 256; i++ ) { x = pow[255 - log[i]]; - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + y = x; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; x ^= y ^ 0x63; FSb[i] = (unsigned char) x; @@ -434,8 +434,7 @@ static void aes_gen_tables( void ) /* * generate the forward and reverse tables */ - for( i = 0; i < 256; i++ ) - { + for ( i = 0; i < 256; i++ ) { x = FSb[i]; y = XTIME( x ) & 0xFF; z = ( y ^ x ) & 0xFF; @@ -471,7 +470,7 @@ void mbedtls_aes_init( mbedtls_aes_context *ctx ) void mbedtls_aes_free( mbedtls_aes_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_aes_context ) ); @@ -482,59 +481,61 @@ void mbedtls_aes_free( mbedtls_aes_context *ctx ) */ #if !defined(MBEDTLS_AES_SETKEY_ENC_ALT) int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { unsigned int i; uint32_t *RK; #if !defined(MBEDTLS_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { + if ( aes_init_done == 0 ) { aes_gen_tables(); aes_init_done = 1; } #endif - switch( keybits ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + switch ( keybits ) { + case 128: + ctx->nr = 10; + break; + case 192: + ctx->nr = 12; + break; + case 256: + ctx->nr = 14; + break; + default : + return ( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); } #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) + if ( aes_padlock_ace == -1 ) aes_padlock_ace = mbedtls_padlock_has_support( MBEDTLS_PADLOCK_ACE ); - if( aes_padlock_ace ) + if ( aes_padlock_ace ) ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16( ctx->buf ); else #endif - ctx->rk = RK = ctx->buf; + ctx->rk = RK = ctx->buf; #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) - return( mbedtls_aesni_setkey_enc( (unsigned char *) ctx->rk, key, keybits ) ); + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) + return ( mbedtls_aesni_setkey_enc( (unsigned char *) ctx->rk, key, keybits ) ); #endif - for( i = 0; i < ( keybits >> 5 ); i++ ) - { + for ( i = 0; i < ( keybits >> 5 ); i++ ) { GET_UINT32_LE( RK[i], key, i << 2 ); } - switch( ctx->nr ) - { + switch ( ctx->nr ) { case 10: - for( i = 0; i < 10; i++, RK += 4 ) - { + for ( i = 0; i < 10; i++, RK += 4 ) { RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); RK[5] = RK[1] ^ RK[4]; RK[6] = RK[2] ^ RK[5]; @@ -544,13 +545,12 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, case 12: - for( i = 0; i < 8; i++, RK += 6 ) - { + for ( i = 0; i < 8; i++, RK += 6 ) { RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); RK[7] = RK[1] ^ RK[6]; RK[8] = RK[2] ^ RK[7]; @@ -562,23 +562,22 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, case 14: - for( i = 0; i < 7; i++, RK += 8 ) - { + for ( i = 0; i < 7; i++, RK += 8 ) { RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); RK[9] = RK[1] ^ RK[8]; RK[10] = RK[2] ^ RK[9]; RK[11] = RK[3] ^ RK[10]; RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); RK[13] = RK[5] ^ RK[12]; RK[14] = RK[6] ^ RK[13]; @@ -587,7 +586,7 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, break; } - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_AES_SETKEY_ENC_ALT */ @@ -596,7 +595,7 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, */ #if !defined(MBEDTLS_AES_SETKEY_DEC_ALT) int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int i, j, ret; mbedtls_aes_context cty; @@ -606,26 +605,25 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, mbedtls_aes_init( &cty ); #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) + if ( aes_padlock_ace == -1 ) aes_padlock_ace = mbedtls_padlock_has_support( MBEDTLS_PADLOCK_ACE ); - if( aes_padlock_ace ) + if ( aes_padlock_ace ) ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16( ctx->buf ); else #endif - ctx->rk = RK = ctx->buf; + ctx->rk = RK = ctx->buf; /* Also checks keybits */ - if( ( ret = mbedtls_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) + if ( ( ret = mbedtls_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) goto exit; ctx->nr = cty.nr; #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) - { + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) { mbedtls_aesni_inverse_key( (unsigned char *) ctx->rk, - (const unsigned char *) cty.rk, ctx->nr ); + (const unsigned char *) cty.rk, ctx->nr ); goto exit; } #endif @@ -637,10 +635,8 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, *RK++ = *SK++; *RK++ = *SK++; - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { + for ( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) { + for ( j = 0; j < 4; j++, SK++ ) { *RK++ = RT0[ FSb[ ( *SK ) & 0xFF ] ] ^ RT1[ FSb[ ( *SK >> 8 ) & 0xFF ] ] ^ RT2[ FSb[ ( *SK >> 16 ) & 0xFF ] ] ^ @@ -656,7 +652,7 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, exit: mbedtls_aes_free( &cty ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_AES_SETKEY_DEC_ALT */ @@ -719,13 +715,16 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -733,28 +732,28 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); @@ -776,13 +775,16 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -790,28 +792,28 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); @@ -824,20 +826,19 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, * AES-ECB block encryption/decryption */ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) - return( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) ); + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) + return ( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) ); #endif #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86) - if( aes_padlock_ace ) - { - if( mbedtls_padlock_xcryptecb( ctx, mode, input, output ) == 0 ) - return( 0 ); + if ( aes_padlock_ace ) { + if ( mbedtls_padlock_xcryptecb( ctx, mode, input, output ) == 0 ) + return ( 0 ); // If padlock data misaligned, we just fall back to // unaccelerated mode @@ -845,12 +846,12 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, } #endif - if( mode == MBEDTLS_AES_ENCRYPT ) + if ( mode == MBEDTLS_AES_ENCRYPT ) mbedtls_aes_encrypt( ctx, input, output ); else mbedtls_aes_decrypt( ctx, input, output ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -858,23 +859,22 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, * AES-CBC buffer encryption/decryption */ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; - if( length % 16 ) - return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + if ( length % 16 ) + return ( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86) - if( aes_padlock_ace ) - { - if( mbedtls_padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) - return( 0 ); + if ( aes_padlock_ace ) { + if ( mbedtls_padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) + return ( 0 ); // If padlock data misaligned, we just fall back to // unaccelerated mode @@ -882,14 +882,12 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, } #endif - if( mode == MBEDTLS_AES_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_AES_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 16 ); mbedtls_aes_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 16 ); @@ -898,12 +896,9 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, output += 16; length -= 16; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_aes_crypt_ecb( ctx, mode, output, output ); @@ -915,7 +910,7 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -924,21 +919,19 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, * AES-CFB128 buffer encryption/decryption */ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int c; size_t n = *iv_off; - if( mode == MBEDTLS_AES_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) + if ( mode == MBEDTLS_AES_DECRYPT ) { + while ( length-- ) { + if ( n == 0 ) mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); c = *input++; @@ -947,12 +940,9 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, n = ( n + 1 ) & 0x0F; } - } - else - { - while( length-- ) - { - if( n == 0 ) + } else { + while ( length-- ) { + if ( n == 0 ) mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); @@ -963,39 +953,38 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, *iv_off = n; - return( 0 ); + return ( 0 ); } /* * AES-CFB8 buffer encryption/decryption */ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { unsigned char c; unsigned char ov[17]; - while( length-- ) - { + while ( length-- ) { memcpy( ov, iv, 16 ); mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); - if( mode == MBEDTLS_AES_DECRYPT ) + if ( mode == MBEDTLS_AES_DECRYPT ) ov[16] = *input; c = *output++ = (unsigned char)( iv[0] ^ *input++ ); - if( mode == MBEDTLS_AES_ENCRYPT ) + if ( mode == MBEDTLS_AES_ENCRYPT ) ov[16] = c; memcpy( iv, ov + 1, 16 ); } - return( 0 ); + return ( 0 ); } #endif /*MBEDTLS_CIPHER_MODE_CFB */ @@ -1004,23 +993,22 @@ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, * AES-CTR buffer encryption/decryption */ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ) { int c, i; size_t n = *nc_off; - while( length-- ) - { - if( n == 0 ) { + while ( length-- ) { + if ( n == 0 ) { mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, nonce_counter, stream_block ); - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) + for ( i = 16; i > 0; i-- ) + if ( ++nonce_counter[i - 1] != 0 ) break; } c = *input++; @@ -1031,7 +1019,7 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, *nc_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -1043,45 +1031,65 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, * * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } +static const unsigned char aes_test_ecb_dec[3][16] = { + { + 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, + 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 + }, + { + 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, + 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 + }, + { + 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, + 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE + } }; -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } +static const unsigned char aes_test_ecb_enc[3][16] = { + { + 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, + 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F + }, + { + 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, + 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 + }, + { + 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, + 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 + } }; #if defined(MBEDTLS_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } +static const unsigned char aes_test_cbc_dec[3][16] = { + { + 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, + 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 + }, + { + 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, + 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B + }, + { + 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, + 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 + } }; -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } +static const unsigned char aes_test_cbc_enc[3][16] = { + { + 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, + 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D + }, + { + 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, + 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 + }, + { + 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, + 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 + } }; #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -1091,27 +1099,30 @@ static const unsigned char aes_test_cbc_enc[3][16] = * * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf */ -static const unsigned char aes_test_cfb128_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }, - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B }, - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } +static const unsigned char aes_test_cfb128_key[3][32] = { + { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + }, + { + 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, + 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, + 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B + }, + { + 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, + 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, + 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, + 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 + } }; -static const unsigned char aes_test_cfb128_iv[16] = -{ +static const unsigned char aes_test_cfb128_iv[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; -static const unsigned char aes_test_cfb128_pt[64] = -{ +static const unsigned char aes_test_cfb128_pt[64] = { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, @@ -1122,32 +1133,37 @@ static const unsigned char aes_test_cfb128_pt[64] = 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 }; -static const unsigned char aes_test_cfb128_ct[3][64] = -{ - { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, - 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, - 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, - 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, - 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, - 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, - 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, - 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 }, - { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, - 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, - 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, - 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, - 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, - 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, - 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, - 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF }, - { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, - 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, - 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, - 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, - 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, - 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, - 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, - 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 } +static const unsigned char aes_test_cfb128_ct[3][64] = { + { + 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, + 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, + 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, + 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, + 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, + 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, + 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, + 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 + }, + { + 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, + 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, + 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, + 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, + 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, + 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, + 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, + 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF + }, + { + 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, + 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, + 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, + 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, + 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, + 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, + 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, + 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 + } }; #endif /* MBEDTLS_CIPHER_MODE_CFB */ @@ -1158,60 +1174,80 @@ static const unsigned char aes_test_cfb128_ct[3][64] = * http://www.faqs.org/rfcs/rfc3686.html */ -static const unsigned char aes_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } +static const unsigned char aes_test_ctr_key[3][16] = { + { + 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, + 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E + }, + { + 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, + 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 + }, + { + 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, + 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC + } }; -static const unsigned char aes_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } +static const unsigned char aes_test_ctr_nonce_counter[3][16] = { + { + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, + 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, + 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 + } }; -static const unsigned char aes_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, +static const unsigned char aes_test_ctr_pt[3][48] = { + { + 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, + 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 + }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F + }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23 + } }; -static const unsigned char aes_test_ctr_ct[3][48] = -{ - { 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, - 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 }, - { 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, - 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, - 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, - 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 }, - { 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, - 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, - 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, - 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, - 0x25, 0xB2, 0x07, 0x2F } +static const unsigned char aes_test_ctr_ct[3][48] = { + { + 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, + 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 + }, + { + 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, + 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, + 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, + 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 + }, + { + 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, + 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, + 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, + 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, + 0x25, 0xB2, 0x07, 0x2F + } }; static const int aes_test_ctr_len[3] = - { 16, 32, 36 }; +{ 16, 32, 36 }; #endif /* MBEDTLS_CIPHER_MODE_CTR */ /* @@ -1244,43 +1280,37 @@ int mbedtls_aes_self_test( int verbose ) /* * ECB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-ECB-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); memset( buf, 0, 16 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { mbedtls_aes_setkey_dec( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) + for ( j = 0; j < 10000; j++ ) mbedtls_aes_crypt_ecb( &ctx, v, buf, buf ); - if( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { mbedtls_aes_setkey_enc( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) + for ( j = 0; j < 10000; j++ ) mbedtls_aes_crypt_ecb( &ctx, v, buf, buf ); - if( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1288,52 +1318,46 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CBC) /* * CBC mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-CBC-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); - memset( iv , 0, 16 ); + memset( iv, 0, 16 ); memset( prv, 0, 16 ); memset( buf, 0, 16 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { mbedtls_aes_setkey_dec( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) + for ( j = 0; j < 10000; j++ ) mbedtls_aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - if( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { mbedtls_aes_setkey_enc( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) - { + for ( j = 0; j < 10000; j++ ) { unsigned char tmp[16]; mbedtls_aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); @@ -1343,9 +1367,8 @@ int mbedtls_aes_self_test( int verbose ) memcpy( buf, tmp, 16 ); } - if( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1353,11 +1376,11 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -1365,14 +1388,13 @@ int mbedtls_aes_self_test( int verbose ) /* * CFB128 mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-CFB128-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, aes_test_cfb128_iv, 16 ); memcpy( key, aes_test_cfb128_key[u], 16 + u * 8 ); @@ -1380,28 +1402,23 @@ int mbedtls_aes_self_test( int verbose ) offset = 0; mbedtls_aes_setkey_enc( &ctx, key, 128 + u * 64 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { memcpy( buf, aes_test_cfb128_ct[u], 64 ); mbedtls_aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - if( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { memcpy( buf, aes_test_cfb128_pt, 64 ); mbedtls_aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - if( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1409,11 +1426,11 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CFB */ @@ -1421,14 +1438,13 @@ int mbedtls_aes_self_test( int verbose ) /* * CTR mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-CTR-128 (%s): ", - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); memcpy( key, aes_test_ctr_key[u], 16 ); @@ -1436,34 +1452,29 @@ int mbedtls_aes_self_test( int verbose ) offset = 0; mbedtls_aes_setkey_enc( &ctx, key, 128 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { len = aes_test_ctr_len[u]; memcpy( buf, aes_test_ctr_ct[u], len ); mbedtls_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { len = aes_test_ctr_len[u]; memcpy( buf, aes_test_ctr_pt[u], len ); mbedtls_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1471,11 +1482,11 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -1484,7 +1495,7 @@ int mbedtls_aes_self_test( int verbose ) exit: mbedtls_aes_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aesni.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aesni.c index 1ca3c3ef..e3ac91cc 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aesni.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/aesni.c @@ -50,8 +50,7 @@ int mbedtls_aesni_has_support( unsigned int what ) static int done = 0; static unsigned int c = 0; - if( ! done ) - { + if ( ! done ) { asm( "movl $1, %%eax \n\t" "cpuid \n\t" : "=c" (c) @@ -60,7 +59,7 @@ int mbedtls_aesni_has_support( unsigned int what ) done = 1; } - return( ( c & what ) != 0 ); + return ( ( c & what ) != 0 ); } /* @@ -93,9 +92,9 @@ int mbedtls_aesni_has_support( unsigned int what ) * AES-NI AES-ECB block en(de)cryption */ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { asm( "movdqu (%3), %%xmm0 \n\t" // load input "movdqu (%1), %%xmm1 \n\t" // load round key 0 @@ -131,7 +130,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, : "memory", "cc", "xmm0", "xmm1" ); - return( 0 ); + return ( 0 ); } /* @@ -139,15 +138,14 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, * Based on [CLMUL-WP] algorithms 1 (with equation 27) and 5. */ void mbedtls_aesni_gcm_mult( unsigned char c[16], - const unsigned char a[16], - const unsigned char b[16] ) + const unsigned char a[16], + const unsigned char b[16] ) { unsigned char aa[16], bb[16], cc[16]; size_t i; /* The inputs are in big-endian order, so byte-reverse them */ - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { aa[i] = a[15 - i]; bb[i] = b[15 - i]; } @@ -240,7 +238,7 @@ void mbedtls_aesni_gcm_mult( unsigned char c[16], : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5" ); /* Now byte-reverse the outputs */ - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) c[i] = cc[15 - i]; return; @@ -250,14 +248,14 @@ void mbedtls_aesni_gcm_mult( unsigned char c[16], * Compute decryption round keys from encryption round keys */ void mbedtls_aesni_inverse_key( unsigned char *invkey, - const unsigned char *fwdkey, int nr ) + const unsigned char *fwdkey, int nr ) { unsigned char *ik = invkey; const unsigned char *fk = fwdkey + 16 * nr; memcpy( ik, fk, 16 ); - for( fk -= 16, ik += 16; fk > fwdkey; fk -= 16, ik += 16 ) + for ( fk -= 16, ik += 16; fk > fwdkey; fk -= 16, ik += 16 ) asm( "movdqu (%0), %%xmm0 \n\t" AESIMC xmm0_xmm0 "\n\t" "movdqu %%xmm0, (%1) \n\t" @@ -445,18 +443,24 @@ static void aesni_setkey_enc_256( unsigned char *rk, * Key expansion, wrapper */ int mbedtls_aesni_setkey_enc( unsigned char *rk, - const unsigned char *key, - size_t bits ) + const unsigned char *key, + size_t bits ) { - switch( bits ) - { - case 128: aesni_setkey_enc_128( rk, key ); break; - case 192: aesni_setkey_enc_192( rk, key ); break; - case 256: aesni_setkey_enc_256( rk, key ); break; - default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + switch ( bits ) { + case 128: + aesni_setkey_enc_128( rk, key ); + break; + case 192: + aesni_setkey_enc_192( rk, key ); + break; + case 256: + aesni_setkey_enc_256( rk, key ); + break; + default : + return ( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVE_X86_64 */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/arc4.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/arc4.c index 05b33d3f..de0fc52a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/arc4.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/arc4.c @@ -48,8 +48,10 @@ #if !defined(MBEDTLS_ARC4_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } void mbedtls_arc4_init( mbedtls_arc4_context *ctx ) @@ -59,7 +61,7 @@ void mbedtls_arc4_init( mbedtls_arc4_context *ctx ) void mbedtls_arc4_free( mbedtls_arc4_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_arc4_context ) ); @@ -69,7 +71,7 @@ void mbedtls_arc4_free( mbedtls_arc4_context *ctx ) * ARC4 key schedule */ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, - unsigned int keylen ) + unsigned int keylen ) { int i, j, a; unsigned int k; @@ -79,14 +81,13 @@ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, ctx->y = 0; m = ctx->m; - for( i = 0; i < 256; i++ ) + for ( i = 0; i < 256; i++ ) m[i] = (unsigned char) i; j = k = 0; - for( i = 0; i < 256; i++, k++ ) - { - if( k >= keylen ) k = 0; + for ( i = 0; i < 256; i++, k++ ) { + if ( k >= keylen ) k = 0; a = m[i]; j = ( j + a + key[k] ) & 0xFF; @@ -99,7 +100,7 @@ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, * ARC4 cipher function */ int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ) + unsigned char *output ) { int x, y, a, b; size_t i; @@ -109,22 +110,23 @@ int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned y = ctx->y; m = ctx->m; - for( i = 0; i < length; i++ ) - { - x = ( x + 1 ) & 0xFF; a = m[x]; - y = ( y + a ) & 0xFF; b = m[y]; + for ( i = 0; i < length; i++ ) { + x = ( x + 1 ) & 0xFF; + a = m[x]; + y = ( y + a ) & 0xFF; + b = m[y]; m[x] = (unsigned char) b; m[y] = (unsigned char) a; output[i] = (unsigned char) - ( input[i] ^ m[(unsigned char)( a + b )] ); + ( input[i] ^ m[(unsigned char)( a + b )] ); } ctx->x = x; ctx->y = y; - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_ARC4_ALT */ @@ -135,22 +137,19 @@ int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned * * http://groups.google.com/group/comp.security.misc/msg/10a300c9d21afca0 */ -static const unsigned char arc4_test_key[3][8] = -{ +static const unsigned char arc4_test_key[3][8] = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; -static const unsigned char arc4_test_pt[3][8] = -{ +static const unsigned char arc4_test_pt[3][8] = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; -static const unsigned char arc4_test_ct[3][8] = -{ +static const unsigned char arc4_test_ct[3][8] = { { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 }, { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 }, { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A } @@ -168,9 +167,8 @@ int mbedtls_arc4_self_test( int verbose ) mbedtls_arc4_init( &ctx ); - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 3; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " ARC4 test #%d: ", i + 1 ); memcpy( ibuf, arc4_test_pt[i], 8 ); @@ -178,26 +176,25 @@ int mbedtls_arc4_self_test( int verbose ) mbedtls_arc4_setup( &ctx, arc4_test_key[i], 8 ); mbedtls_arc4_crypt( &ctx, 8, ibuf, obuf ); - if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_arc4_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1parse.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1parse.c index 4dd65c03..72a5717a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1parse.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1parse.c @@ -44,193 +44,192 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* * ASN.1 DER decoding routines */ int mbedtls_asn1_get_len( unsigned char **p, - const unsigned char *end, - size_t *len ) + const unsigned char *end, + size_t *len ) { - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( ( **p & 0x80 ) == 0 ) + if ( ( **p & 0x80 ) == 0 ) *len = *(*p)++; - else - { - switch( **p & 0x7F ) - { - case 1: - if( ( end - *p ) < 2 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + else { + switch ( **p & 0x7F ) { + case 1: + if ( ( end - *p ) < 2 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - *len = (*p)[1]; - (*p) += 2; - break; + *len = (*p)[1]; + (*p) += 2; + break; - case 2: - if( ( end - *p ) < 3 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + case 2: + if ( ( end - *p ) < 3 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - *len = ( (size_t)(*p)[1] << 8 ) | (*p)[2]; - (*p) += 3; - break; + *len = ( (size_t)(*p)[1] << 8 ) | (*p)[2]; + (*p) += 3; + break; - case 3: - if( ( end - *p ) < 4 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + case 3: + if ( ( end - *p ) < 4 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - *len = ( (size_t)(*p)[1] << 16 ) | - ( (size_t)(*p)[2] << 8 ) | (*p)[3]; - (*p) += 4; - break; + *len = ( (size_t)(*p)[1] << 16 ) | + ( (size_t)(*p)[2] << 8 ) | (*p)[3]; + (*p) += 4; + break; - case 4: - if( ( end - *p ) < 5 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + case 4: + if ( ( end - *p ) < 5 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - *len = ( (size_t)(*p)[1] << 24 ) | ( (size_t)(*p)[2] << 16 ) | - ( (size_t)(*p)[3] << 8 ) | (*p)[4]; - (*p) += 5; - break; + *len = ( (size_t)(*p)[1] << 24 ) | ( (size_t)(*p)[2] << 16 ) | + ( (size_t)(*p)[3] << 8 ) | (*p)[4]; + (*p) += 5; + break; - default: - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + default: + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); } } - if( *len > (size_t) ( end - *p ) ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( *len > (size_t) ( end - *p ) ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_tag( unsigned char **p, - const unsigned char *end, - size_t *len, int tag ) + const unsigned char *end, + size_t *len, int tag ) { - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( **p != tag ) - return( MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( **p != tag ) + return ( MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); (*p)++; - return( mbedtls_asn1_get_len( p, end, len ) ); + return ( mbedtls_asn1_get_len( p, end, len ) ); } int mbedtls_asn1_get_bool( unsigned char **p, - const unsigned char *end, - int *val ) + const unsigned char *end, + int *val ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_BOOLEAN ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_BOOLEAN ) ) != 0 ) + return ( ret ); - if( len != 1 ) - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( len != 1 ) + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); *val = ( **p != 0 ) ? 1 : 0; (*p)++; - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_int( unsigned char **p, - const unsigned char *end, - int *val ) + const unsigned char *end, + int *val ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) + return ( ret ); - if( len == 0 || len > sizeof( int ) || ( **p & 0x80 ) != 0 ) - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( len == 0 || len > sizeof( int ) || ( **p & 0x80 ) != 0 ) + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); *val = 0; - while( len-- > 0 ) - { + while ( len-- > 0 ) { *val = ( *val << 8 ) | **p; (*p)++; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_BIGNUM_C) int mbedtls_asn1_get_mpi( unsigned char **p, - const unsigned char *end, - mbedtls_mpi *X ) + const unsigned char *end, + mbedtls_mpi *X ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) + return ( ret ); ret = mbedtls_mpi_read_binary( X, *p, len ); *p += len; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_BIGNUM_C */ int mbedtls_asn1_get_bitstring( unsigned char **p, const unsigned char *end, - mbedtls_asn1_bitstring *bs) + mbedtls_asn1_bitstring *bs) { int ret; /* Certificate type is a single byte bitstring */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &bs->len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &bs->len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) + return ( ret ); /* Check length, subtract one for actual bit string length */ - if( bs->len < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( bs->len < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); bs->len -= 1; /* Get number of unused bits, ensure unused bits <= 7 */ bs->unused_bits = **p; - if( bs->unused_bits > 7 ) - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( bs->unused_bits > 7 ) + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); (*p)++; /* Get actual bitstring */ bs->p = *p; *p += bs->len; - if( *p != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* * Get a bit string without unused bits */ int mbedtls_asn1_get_bitstring_null( unsigned char **p, const unsigned char *end, - size_t *len ) + size_t *len ) { int ret; - if( ( ret = mbedtls_asn1_get_tag( p, end, len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) + return ( ret ); - if( (*len)-- < 2 || *(*p)++ != 0 ) - return( MBEDTLS_ERR_ASN1_INVALID_DATA ); + if ( (*len)-- < 2 || *(*p)++ != 0 ) + return ( MBEDTLS_ERR_ASN1_INVALID_DATA ); - return( 0 ); + return ( 0 ); } @@ -239,41 +238,39 @@ int mbedtls_asn1_get_bitstring_null( unsigned char **p, const unsigned char *end * Parses and splits an ASN.1 "SEQUENCE OF " */ int mbedtls_asn1_get_sequence_of( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_sequence *cur, - int tag) + const unsigned char *end, + mbedtls_asn1_sequence *cur, + int tag) { int ret; size_t len; mbedtls_asn1_buf *buf; /* Get main sequence tag */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) - { + while ( *p < end ) { buf = &(cur->buf); buf->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &buf->len, tag ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &buf->len, tag ) ) != 0 ) + return ( ret ); buf->p = *p; *p += buf->len; /* Allocate and assign next pointer */ - if( *p < end ) - { + if ( *p < end ) { cur->next = (mbedtls_asn1_sequence*)mbedtls_calloc( 1, - sizeof( mbedtls_asn1_sequence ) ); + sizeof( mbedtls_asn1_sequence ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_ASN1_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_ASN1_ALLOC_FAILED ); cur = cur->next; } @@ -282,77 +279,76 @@ int mbedtls_asn1_get_sequence_of( unsigned char **p, /* Set final sequence entry's next pointer to NULL */ cur->next = NULL; - if( *p != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_alg( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ) + const unsigned char *end, + mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); alg->tag = **p; end = *p + len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &alg->len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &alg->len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( ret ); alg->p = *p; *p += alg->len; - if( *p == end ) - { + if ( *p == end ) { mbedtls_zeroize( params, sizeof(mbedtls_asn1_buf) ); - return( 0 ); + return ( 0 ); } params->tag = **p; (*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, ¶ms->len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, ¶ms->len ) ) != 0 ) + return ( ret ); params->p = *p; *p += params->len; - if( *p != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_alg_null( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_buf *alg ) + const unsigned char *end, + mbedtls_asn1_buf *alg ) { int ret; mbedtls_asn1_buf params; memset( ¶ms, 0, sizeof(mbedtls_asn1_buf) ); - if( ( ret = mbedtls_asn1_get_alg( p, end, alg, ¶ms ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_alg( p, end, alg, ¶ms ) ) != 0 ) + return ( ret ); - if( ( params.tag != MBEDTLS_ASN1_NULL && params.tag != 0 ) || params.len != 0 ) - return( MBEDTLS_ERR_ASN1_INVALID_DATA ); + if ( ( params.tag != MBEDTLS_ASN1_NULL && params.tag != 0 ) || params.len != 0 ) + return ( MBEDTLS_ERR_ASN1_INVALID_DATA ); - return( 0 ); + return ( 0 ); } void mbedtls_asn1_free_named_data( mbedtls_asn1_named_data *cur ) { - if( cur == NULL ) + if ( cur == NULL ) return; mbedtls_free( cur->oid.p ); @@ -365,8 +361,7 @@ void mbedtls_asn1_free_named_data_list( mbedtls_asn1_named_data **head ) { mbedtls_asn1_named_data *cur; - while( ( cur = *head ) != NULL ) - { + while ( ( cur = *head ) != NULL ) { *head = cur->next; mbedtls_asn1_free_named_data( cur ); mbedtls_free( cur ); @@ -374,20 +369,18 @@ void mbedtls_asn1_free_named_data_list( mbedtls_asn1_named_data **head ) } mbedtls_asn1_named_data *mbedtls_asn1_find_named_data( mbedtls_asn1_named_data *list, - const char *oid, size_t len ) + const char *oid, size_t len ) { - while( list != NULL ) - { - if( list->oid.len == len && - memcmp( list->oid.p, oid, len ) == 0 ) - { + while ( list != NULL ) { + if ( list->oid.len == len && + memcmp( list->oid.p, oid, len ) == 0 ) { break; } list = list->next; } - return( list ); + return ( list ); } #endif /* MBEDTLS_ASN1_PARSE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1write.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1write.c index 69b61b20..3647465f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1write.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/asn1write.c @@ -41,87 +41,82 @@ int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len ) { - if( len < 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len < 0x80 ) { + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = (unsigned char) len; - return( 1 ); + return ( 1 ); } - if( len <= 0xFF ) - { - if( *p - start < 2 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFF ) { + if ( *p - start < 2 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = (unsigned char) len; *--(*p) = 0x81; - return( 2 ); + return ( 2 ); } - if( len <= 0xFFFF ) - { - if( *p - start < 3 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFFFF ) { + if ( *p - start < 3 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = ( len ) & 0xFF; *--(*p) = ( len >> 8 ) & 0xFF; *--(*p) = 0x82; - return( 3 ); + return ( 3 ); } - if( len <= 0xFFFFFF ) - { - if( *p - start < 4 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFFFFFF ) { + if ( *p - start < 4 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = ( len ) & 0xFF; *--(*p) = ( len >> 8 ) & 0xFF; *--(*p) = ( len >> 16 ) & 0xFF; *--(*p) = 0x83; - return( 4 ); + return ( 4 ); } - if( len <= 0xFFFFFFFF ) - { - if( *p - start < 5 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFFFFFFFF ) { + if ( *p - start < 5 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = ( len ) & 0xFF; *--(*p) = ( len >> 8 ) & 0xFF; *--(*p) = ( len >> 16 ) & 0xFF; *--(*p) = ( len >> 24 ) & 0xFF; *--(*p) = 0x84; - return( 5 ); + return ( 5 ); } - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); } int mbedtls_asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ) { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = tag; - return( 1 ); + return ( 1 ); } int mbedtls_asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) + const unsigned char *buf, size_t size ) { size_t len = 0; - if( *p < start || (size_t)( *p - start ) < size ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < size ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len = size; (*p) -= len; memcpy( *p, buf, len ); - return( (int) len ); + return ( (int) len ); } #if defined(MBEDTLS_BIGNUM_C) @@ -134,8 +129,8 @@ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedt // len = mbedtls_mpi_size( X ); - if( *p < start || (size_t)( *p - start ) < len ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < len ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); (*p) -= len; MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( X, *p, len ) ); @@ -143,10 +138,9 @@ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedt // DER format assumes 2s complement for numbers, so the leftmost bit // should be 0 for positive numbers and 1 for negative numbers. // - if( X->s ==1 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( X->s == 1 && **p & 0x80 ) { + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = 0x00; len += 1; @@ -158,7 +152,7 @@ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedt ret = (int) len; cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_BIGNUM_C */ @@ -172,31 +166,31 @@ int mbedtls_asn1_write_null( unsigned char **p, unsigned char *start ) MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, 0) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_NULL ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ) + const char *oid, size_t oid_len ) { int ret; size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) oid, oid_len ) ); - MBEDTLS_ASN1_CHK_ADD( len , mbedtls_asn1_write_len( p, start, len ) ); - MBEDTLS_ASN1_CHK_ADD( len , mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OID ) ); + (const unsigned char *) oid, oid_len ) ); + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OID ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - size_t par_len ) + const char *oid, size_t oid_len, + size_t par_len ) { int ret; size_t len = 0; - if( par_len == 0 ) + if ( par_len == 0 ) MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_null( p, start ) ); else len += par_len; @@ -205,9 +199,9 @@ int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *s MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ) @@ -215,8 +209,8 @@ int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolea int ret; size_t len = 0; - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = (boolean) ? 255 : 0; len++; @@ -224,7 +218,7 @@ int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolea MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_BOOLEAN ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) @@ -236,16 +230,15 @@ int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) // DER format assumes 2s complement for numbers, so the leftmost bit // should be 0 for positive numbers and 1 for negative numbers. // - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len += 1; *--(*p) = val; - if( val > 0 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( val > 0 && **p & 0x80 ) { + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = 0x00; len += 1; @@ -254,41 +247,41 @@ int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_INTEGER ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_printable_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) + const char *text, size_t text_len ) { int ret; size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); + (const unsigned char *) text, text_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_PRINTABLE_STRING ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_ia5_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) + const char *text, size_t text_len ) { int ret; size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); + (const unsigned char *) text, text_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_IA5_STRING ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t bits ) + const unsigned char *buf, size_t bits ) { int ret; size_t len = 0, size; @@ -297,8 +290,8 @@ int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, // Calculate byte length // - if( *p < start || (size_t)( *p - start ) < size + 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < size + 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len = size + 1; (*p) -= size; @@ -311,11 +304,11 @@ int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_BIT_STRING ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) + const unsigned char *buf, size_t size ) { int ret; size_t len = 0; @@ -325,66 +318,61 @@ int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OCTET_STRING ) ); - return( (int) len ); + return ( (int) len ); } mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data **head, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ) + const char *oid, size_t oid_len, + const unsigned char *val, + size_t val_len ) { mbedtls_asn1_named_data *cur; - if( ( cur = mbedtls_asn1_find_named_data( *head, oid, oid_len ) ) == NULL ) - { + if ( ( cur = mbedtls_asn1_find_named_data( *head, oid, oid_len ) ) == NULL ) { // Add new entry if not present yet based on OID // cur = (mbedtls_asn1_named_data*)mbedtls_calloc( 1, - sizeof(mbedtls_asn1_named_data) ); - if( cur == NULL ) - return( NULL ); + sizeof(mbedtls_asn1_named_data) ); + if ( cur == NULL ) + return ( NULL ); cur->oid.len = oid_len; cur->oid.p = mbedtls_calloc( 1, oid_len ); - if( cur->oid.p == NULL ) - { + if ( cur->oid.p == NULL ) { mbedtls_free( cur ); - return( NULL ); + return ( NULL ); } memcpy( cur->oid.p, oid, oid_len ); cur->val.len = val_len; cur->val.p = mbedtls_calloc( 1, val_len ); - if( cur->val.p == NULL ) - { + if ( cur->val.p == NULL ) { mbedtls_free( cur->oid.p ); mbedtls_free( cur ); - return( NULL ); + return ( NULL ); } cur->next = *head; *head = cur; - } - else if( cur->val.len < val_len ) - { + } else if ( cur->val.len < val_len ) { /* * Enlarge existing value buffer if needed * Preserve old data until the allocation succeeded, to leave list in * a consistent state in case allocation fails. */ void *p = mbedtls_calloc( 1, val_len ); - if( p == NULL ) - return( NULL ); + if ( p == NULL ) + return ( NULL ); mbedtls_free( cur->val.p ); cur->val.p = p; cur->val.len = val_len; } - if( val != NULL ) + if ( val != NULL ) memcpy( cur->val.p, val, val_len ); - return( cur ); + return ( cur ); } #endif /* MBEDTLS_ASN1_WRITE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/base64.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/base64.c index 5cb12cba..d98345d9 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/base64.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/base64.c @@ -41,8 +41,7 @@ #endif /* MBEDTLS_PLATFORM_C */ #endif /* MBEDTLS_SELF_TEST */ -static const unsigned char base64_enc_map[64] = -{ +static const unsigned char base64_enc_map[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', @@ -52,21 +51,20 @@ static const unsigned char base64_enc_map[64] = '8', '9', '+', '/' }; -static const unsigned char base64_dec_map[128] = -{ +static const unsigned char base64_dec_map[128] = { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 62, 127, 127, 127, 63, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, + 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, 127, 64, 127, 127, 127, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 127, 127, 127, 127, 127 + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 127, 127, 127, 127, 127 }; #define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ @@ -75,38 +73,34 @@ static const unsigned char base64_dec_map[128] = * Encode a buffer into base64 format */ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; int C1, C2, C3; unsigned char *p; - if( slen == 0 ) - { + if ( slen == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } n = slen / 3 + ( slen % 3 != 0 ); - if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) - { + if ( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) { *olen = BASE64_SIZE_T_MAX; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } n *= 4; - if( ( dlen < n + 1 ) || ( NULL == dst ) ) - { + if ( ( dlen < n + 1 ) || ( NULL == dst ) ) { *olen = n + 1; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } n = ( slen / 3 ) * 3; - for( i = 0, p = dst; i < n; i += 3 ) - { + for ( i = 0, p = dst; i < n; i += 3 ) { C1 = *src++; C2 = *src++; C3 = *src++; @@ -117,16 +111,15 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, *p++ = base64_enc_map[C3 & 0x3F]; } - if( i < slen ) - { + if ( i < slen ) { C1 = *src++; C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - if( ( i + 1 ) < slen ) - *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; + if ( ( i + 1 ) < slen ) + *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; else *p++ = '='; *p++ = '='; @@ -135,98 +128,91 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, *olen = p - dst; *p = 0; - return( 0 ); + return ( 0 ); } /* * Decode a base64-formatted buffer */ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; uint32_t j, x; unsigned char *p; /* First pass: check for validity and get output length */ - for( i = n = j = 0; i < slen; i++ ) - { + for ( i = n = j = 0; i < slen; i++ ) { /* Skip spaces before checking for EOL */ x = 0; - while( i < slen && src[i] == ' ' ) - { + while ( i < slen && src[i] == ' ' ) { ++i; ++x; } /* Spaces at end of buffer are OK */ - if( i == slen ) + if ( i == slen ) break; - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) + if ( ( slen - i ) >= 2 && + src[i] == '\r' && src[i + 1] == '\n' ) continue; - if( src[i] == '\n' ) + if ( src[i] == '\n' ) continue; /* Space inside a line is an error */ - if( x != 0 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( x != 0 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); - if( src[i] == '=' && ++j > 2 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( src[i] == '=' && ++j > 2 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( src[i] > 127 || base64_dec_map[src[i]] == 127 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( base64_dec_map[src[i]] < 64 && j != 0 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); n++; } - if( n == 0 ) - { + if ( n == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } n = ( ( n * 6 ) + 7 ) >> 3; n -= j; - if( dst == NULL || dlen < n ) - { + if ( dst == NULL || dlen < n ) { *olen = n; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' || *src == ' ' ) + for ( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) { + if ( *src == '\r' || *src == '\n' || *src == ' ' ) continue; j -= ( base64_dec_map[*src] == 64 ); x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - if( ++n == 4 ) - { + if ( ++n == 4 ) { n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); + if ( j > 0 ) *p++ = (unsigned char)( x >> 16 ); + if ( j > 1 ) *p++ = (unsigned char)( x >> 8 ); + if ( j > 2 ) *p++ = (unsigned char)( x ); } } *olen = p - dst; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SELF_TEST) -static const unsigned char base64_test_dec[64] = -{ +static const unsigned char base64_test_dec[64] = { 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD, 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01, 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09, @@ -250,38 +236,36 @@ int mbedtls_base64_self_test( int verbose ) const unsigned char *src; unsigned char buffer[128]; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " Base64 encoding test: " ); src = base64_test_dec; - if( mbedtls_base64_encode( buffer, sizeof( buffer ), &len, src, 64 ) != 0 || - memcmp( base64_test_enc, buffer, 88 ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_base64_encode( buffer, sizeof( buffer ), &len, src, 64 ) != 0 || + memcmp( base64_test_enc, buffer, 88 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n Base64 decoding test: " ); src = base64_test_enc; - if( mbedtls_base64_decode( buffer, sizeof( buffer ), &len, src, 88 ) != 0 || - memcmp( base64_test_dec, buffer, 64 ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_base64_decode( buffer, sizeof( buffer ), &len, src, 88 ) != 0 || + memcmp( base64_test_dec, buffer, 64 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/bignum.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/bignum.c index 4c99e04d..d5506a4e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/bignum.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/bignum.c @@ -59,8 +59,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) { - volatile mbedtls_mpi_uint *p = v; while( n-- ) *p++ = 0; +static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) +{ + volatile mbedtls_mpi_uint *p = v; + while ( n-- ) *p++ = 0; } #define ciL (sizeof(mbedtls_mpi_uint)) /* chars in limb */ @@ -81,7 +83,7 @@ static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) { */ void mbedtls_mpi_init( mbedtls_mpi *X ) { - if( X == NULL ) + if ( X == NULL ) return; X->s = 1; @@ -94,11 +96,10 @@ void mbedtls_mpi_init( mbedtls_mpi *X ) */ void mbedtls_mpi_free( mbedtls_mpi *X ) { - if( X == NULL ) + if ( X == NULL ) return; - if( X->p != NULL ) - { + if ( X->p != NULL ) { mbedtls_mpi_zeroize( X->p, X->n ); mbedtls_free( X->p ); } @@ -115,16 +116,14 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) { mbedtls_mpi_uint *p; - if( nblimbs > MBEDTLS_MPI_MAX_LIMBS ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( nblimbs > MBEDTLS_MPI_MAX_LIMBS ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); - if( X->n < nblimbs ) - { - if( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( nblimbs, ciL ) ) == NULL ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( X->n < nblimbs ) { + if ( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( nblimbs, ciL ) ) == NULL ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); - if( X->p != NULL ) - { + if ( X->p != NULL ) { memcpy( p, X->p, X->n * ciL ); mbedtls_mpi_zeroize( X->p, X->n ); mbedtls_free( X->p ); @@ -134,7 +133,7 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) X->p = p; } - return( 0 ); + return ( 0 ); } /* @@ -147,22 +146,21 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) size_t i; /* Actually resize up in this case */ - if( X->n <= nblimbs ) - return( mbedtls_mpi_grow( X, nblimbs ) ); + if ( X->n <= nblimbs ) + return ( mbedtls_mpi_grow( X, nblimbs ) ); - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) + for ( i = X->n - 1; i > 0; i-- ) + if ( X->p[i] != 0 ) break; i++; - if( i < nblimbs ) + if ( i < nblimbs ) i = nblimbs; - if( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( i, ciL ) ) == NULL ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( i, ciL ) ) == NULL ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); - if( X->p != NULL ) - { + if ( X->p != NULL ) { memcpy( p, X->p, i * ciL ); mbedtls_mpi_zeroize( X->p, X->n ); mbedtls_free( X->p ); @@ -171,7 +169,7 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) X->n = i; X->p = p; - return( 0 ); + return ( 0 ); } /* @@ -182,17 +180,16 @@ int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) int ret; size_t i; - if( X == Y ) - return( 0 ); + if ( X == Y ) + return ( 0 ); - if( Y->p == NULL ) - { + if ( Y->p == NULL ) { mbedtls_mpi_free( X ); - return( 0 ); + return ( 0 ); } - for( i = Y->n - 1; i > 0; i-- ) - if( Y->p[i] != 0 ) + for ( i = Y->n - 1; i > 0; i-- ) + if ( Y->p[i] != 0 ) break; i++; @@ -205,7 +202,7 @@ int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) cleanup: - return( ret ); + return ( ret ); } /* @@ -231,20 +228,20 @@ int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned size_t i; /* make sure assign is 0 or 1 in a time-constant manner */ - assign = (assign | (unsigned char)-assign) >> 7; + assign = (assign | (unsigned char) - assign) >> 7; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, Y->n ) ); X->s = X->s * ( 1 - assign ) + Y->s * assign; - for( i = 0; i < Y->n; i++ ) + for ( i = 0; i < Y->n; i++ ) X->p[i] = X->p[i] * ( 1 - assign ) + Y->p[i] * assign; - for( ; i < X->n; i++ ) + for ( ; i < X->n; i++ ) X->p[i] *= ( 1 - assign ); cleanup: - return( ret ); + return ( ret ); } /* @@ -259,11 +256,11 @@ int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char sw size_t i; mbedtls_mpi_uint tmp; - if( X == Y ) - return( 0 ); + if ( X == Y ) + return ( 0 ); /* make sure swap is 0 or 1 in a time-constant manner */ - swap = (swap | (unsigned char)-swap) >> 7; + swap = (swap | (unsigned char) - swap) >> 7; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, Y->n ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_grow( Y, X->n ) ); @@ -273,15 +270,14 @@ int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char sw Y->s = Y->s * ( 1 - swap ) + s * swap; - for( i = 0; i < X->n; i++ ) - { + for ( i = 0; i < X->n; i++ ) { tmp = X->p[i]; X->p[i] = X->p[i] * ( 1 - swap ) + Y->p[i] * swap; Y->p[i] = Y->p[i] * ( 1 - swap ) + tmp * swap; } cleanup: - return( ret ); + return ( ret ); } /* @@ -299,7 +295,7 @@ int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ) cleanup: - return( ret ); + return ( ret ); } /* @@ -307,10 +303,10 @@ cleanup: */ int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ) { - if( X->n * biL <= pos ) - return( 0 ); + if ( X->n * biL <= pos ) + return ( 0 ); - return( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); + return ( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); } /* @@ -322,13 +318,12 @@ int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ) size_t off = pos / biL; size_t idx = pos % biL; - if( val != 0 && val != 1 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( val != 0 && val != 1 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); - if( X->n * biL <= pos ) - { - if( val == 0 ) - return( 0 ); + if ( X->n * biL <= pos ) { + if ( val == 0 ) + return ( 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, off + 1 ) ); } @@ -338,7 +333,7 @@ int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ) cleanup: - return( ret ); + return ( ret ); } /* @@ -348,12 +343,12 @@ size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ) { size_t i, j, count = 0; - for( i = 0; i < X->n; i++ ) - for( j = 0; j < biL; j++, count++ ) - if( ( ( X->p[i] >> j ) & 1 ) != 0 ) - return( count ); + for ( i = 0; i < X->n; i++ ) + for ( j = 0; j < biL; j++, count++ ) + if ( ( ( X->p[i] >> j ) & 1 ) != 0 ) + return ( count ); - return( 0 ); + return ( 0 ); } /* @@ -364,9 +359,8 @@ static size_t mbedtls_clz( const mbedtls_mpi_uint x ) size_t j; mbedtls_mpi_uint mask = (mbedtls_mpi_uint) 1 << (biL - 1); - for( j = 0; j < biL; j++ ) - { - if( x & mask ) break; + for ( j = 0; j < biL; j++ ) { + if ( x & mask ) break; mask >>= 1; } @@ -381,16 +375,16 @@ size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) { size_t i, j; - if( X->n == 0 ) - return( 0 ); + if ( X->n == 0 ) + return ( 0 ); - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) + for ( i = X->n - 1; i > 0; i-- ) + if ( X->p[i] != 0 ) break; j = biL - mbedtls_clz( X->p[i] ); - return( ( i * biL ) + j ); + return ( ( i * biL ) + j ); } /* @@ -398,7 +392,7 @@ size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) */ size_t mbedtls_mpi_size( const mbedtls_mpi *X ) { - return( ( mbedtls_mpi_bitlen( X ) + 7 ) >> 3 ); + return ( ( mbedtls_mpi_bitlen( X ) + 7 ) >> 3 ); } /* @@ -408,14 +402,14 @@ static int mpi_get_digit( mbedtls_mpi_uint *d, int radix, char c ) { *d = 255; - if( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; - if( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; - if( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; + if ( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; + if ( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; + if ( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; - if( *d >= (mbedtls_mpi_uint) radix ) - return( MBEDTLS_ERR_MPI_INVALID_CHARACTER ); + if ( *d >= (mbedtls_mpi_uint) radix ) + return ( MBEDTLS_ERR_MPI_INVALID_CHARACTER ); - return( 0 ); + return ( 0 ); } /* @@ -428,27 +422,24 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) mbedtls_mpi_uint d; mbedtls_mpi T; - if( radix < 2 || radix > 16 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix < 2 || radix > 16 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); mbedtls_mpi_init( &T ); slen = strlen( s ); - if( radix == 16 ) - { - if( slen > MPI_SIZE_T_MAX >> 2 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix == 16 ) { + if ( slen > MPI_SIZE_T_MAX >> 2 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); n = BITS_TO_LIMBS( slen << 2 ); MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, n ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i = slen, j = 0; i > 0; i--, j++ ) - { - if( i == 1 && s[i - 1] == '-' ) - { + for ( i = slen, j = 0; i > 0; i--, j++ ) { + if ( i == 1 && s[i - 1] == '-' ) { X->s = -1; break; } @@ -456,15 +447,11 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) MBEDTLS_MPI_CHK( mpi_get_digit( &d, radix, s[i - 1] ) ); X->p[j / ( 2 * ciL )] |= d << ( ( j % ( 2 * ciL ) ) << 2 ); } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i = 0; i < slen; i++ ) - { - if( i == 0 && s[i] == '-' ) - { + for ( i = 0; i < slen; i++ ) { + if ( i == 0 && s[i] == '-' ) { X->s = -1; continue; } @@ -472,12 +459,9 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) MBEDTLS_MPI_CHK( mpi_get_digit( &d, radix, s[i] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T, X, radix ) ); - if( X->s == 1 ) - { + if ( X->s == 1 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, &T, d ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( X, &T, d ) ); } } @@ -487,7 +471,7 @@ cleanup: mbedtls_mpi_free( &T ); - return( ret ); + return ( ret ); } /* @@ -498,23 +482,23 @@ static int mpi_write_hlp( mbedtls_mpi *X, int radix, char **p ) int ret; mbedtls_mpi_uint r; - if( radix < 2 || radix > 16 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix < 2 || radix > 16 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, radix ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_div_int( X, NULL, X, radix ) ); - if( mbedtls_mpi_cmp_int( X, 0 ) != 0 ) + if ( mbedtls_mpi_cmp_int( X, 0 ) != 0 ) MBEDTLS_MPI_CHK( mpi_write_hlp( X, radix, p ) ); - if( r < 10 ) + if ( r < 10 ) *(*p)++ = (char)( r + 0x30 ); else *(*p)++ = (char)( r + 0x37 ); cleanup: - return( ret ); + return ( ret ); } /* @@ -528,38 +512,34 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, char *p; mbedtls_mpi T; - if( radix < 2 || radix > 16 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix < 2 || radix > 16 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); n = mbedtls_mpi_bitlen( X ); - if( radix >= 4 ) n >>= 1; - if( radix >= 16 ) n >>= 1; + if ( radix >= 4 ) n >>= 1; + if ( radix >= 16 ) n >>= 1; n += 3; - if( buflen < n ) - { + if ( buflen < n ) { *olen = n; - return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); } p = buf; mbedtls_mpi_init( &T ); - if( X->s == -1 ) + if ( X->s == -1 ) *p++ = '-'; - if( radix == 16 ) - { + if ( radix == 16 ) { int c; size_t i, j, k; - for( i = X->n, k = 0; i > 0; i-- ) - { - for( j = ciL; j > 0; j-- ) - { + for ( i = X->n, k = 0; i > 0; i-- ) { + for ( j = ciL; j > 0; j-- ) { c = ( X->p[i - 1] >> ( ( j - 1 ) << 3) ) & 0xFF; - if( c == 0 && k == 0 && ( i + j ) != 2 ) + if ( c == 0 && k == 0 && ( i + j ) != 2 ) continue; *(p++) = "0123456789ABCDEF" [c / 16]; @@ -567,12 +547,10 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, k = 1; } } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &T, X ) ); - if( T.s == -1 ) + if ( T.s == -1 ) T.s = 1; MBEDTLS_MPI_CHK( mpi_write_hlp( &T, radix, &p ) ); @@ -585,7 +563,7 @@ cleanup: mbedtls_mpi_free( &T ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_FS_IO) @@ -604,22 +582,28 @@ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ) char s[ MBEDTLS_MPI_RW_BUFFER_SIZE ]; memset( s, 0, sizeof( s ) ); - if( fgets( s, sizeof( s ) - 1, fin ) == NULL ) - return( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); + if ( fgets( s, sizeof( s ) - 1, fin ) == NULL ) + return ( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); slen = strlen( s ); - if( slen == sizeof( s ) - 2 ) - return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); + if ( slen == sizeof( s ) - 2 ) + return ( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); - if( s[slen - 1] == '\n' ) { slen--; s[slen] = '\0'; } - if( s[slen - 1] == '\r' ) { slen--; s[slen] = '\0'; } + if ( s[slen - 1] == '\n' ) { + slen--; + s[slen] = '\0'; + } + if ( s[slen - 1] == '\r' ) { + slen--; + s[slen] = '\0'; + } p = s + slen; - while( --p >= s ) - if( mpi_get_digit( &d, radix, *p ) != 0 ) + while ( --p >= s ) + if ( mpi_get_digit( &d, radix, *p ) != 0 ) break; - return( mbedtls_mpi_read_string( X, radix, p + 1 ) ); + return ( mbedtls_mpi_read_string( X, radix, p + 1 ) ); } /* @@ -639,25 +623,23 @@ int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, int radix, FILE MBEDTLS_MPI_CHK( mbedtls_mpi_write_string( X, radix, s, sizeof( s ) - 2, &n ) ); - if( p == NULL ) p = ""; + if ( p == NULL ) p = ""; plen = strlen( p ); slen = strlen( s ); s[slen++] = '\r'; s[slen++] = '\n'; - if( fout != NULL ) - { - if( fwrite( p, 1, plen, fout ) != plen || - fwrite( s, 1, slen, fout ) != slen ) - return( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); - } - else + if ( fout != NULL ) { + if ( fwrite( p, 1, plen, fout ) != plen || + fwrite( s, 1, slen, fout ) != slen ) + return ( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); + } else mbedtls_printf( "%s%s", p, s ); cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -669,19 +651,19 @@ int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, size_t bu int ret; size_t i, j, n; - for( n = 0; n < buflen; n++ ) - if( buf[n] != 0 ) + for ( n = 0; n < buflen; n++ ) + if ( buf[n] != 0 ) break; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, CHARS_TO_LIMBS( buflen - n ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i = buflen, j = 0; i > n; i--, j++ ) + for ( i = buflen, j = 0; i > n; i--, j++ ) X->p[j / ciL] |= ((mbedtls_mpi_uint) buf[i - 1]) << ((j % ciL) << 3); cleanup: - return( ret ); + return ( ret ); } /* @@ -693,15 +675,15 @@ int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf, size_t b n = mbedtls_mpi_size( X ); - if( buflen < n ) - return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); + if ( buflen < n ) + return ( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); memset( buf, 0, buflen ); - for( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) + for ( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) buf[i] = (unsigned char)( X->p[j / ciL] >> ((j % ciL) << 3) ); - return( 0 ); + return ( 0 ); } /* @@ -718,7 +700,7 @@ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) i = mbedtls_mpi_bitlen( X ) + count; - if( X->n * biL < i ) + if ( X->n * biL < i ) MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, BITS_TO_LIMBS( i ) ) ); ret = 0; @@ -726,22 +708,19 @@ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) /* * shift by count / limb_size */ - if( v0 > 0 ) - { - for( i = X->n; i > v0; i-- ) + if ( v0 > 0 ) { + for ( i = X->n; i > v0; i-- ) X->p[i - 1] = X->p[i - v0 - 1]; - for( ; i > 0; i-- ) + for ( ; i > 0; i-- ) X->p[i - 1] = 0; } /* * shift by count % limb_size */ - if( t1 > 0 ) - { - for( i = v0; i < X->n; i++ ) - { + if ( t1 > 0 ) { + for ( i = v0; i < X->n; i++ ) { r1 = X->p[i] >> (biL - t1); X->p[i] <<= t1; X->p[i] |= r0; @@ -751,7 +730,7 @@ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) cleanup: - return( ret ); + return ( ret ); } /* @@ -765,28 +744,25 @@ int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) v0 = count / biL; v1 = count & (biL - 1); - if( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) + if ( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) return mbedtls_mpi_lset( X, 0 ); /* * shift by count / limb_size */ - if( v0 > 0 ) - { - for( i = 0; i < X->n - v0; i++ ) + if ( v0 > 0 ) { + for ( i = 0; i < X->n - v0; i++ ) X->p[i] = X->p[i + v0]; - for( ; i < X->n; i++ ) + for ( ; i < X->n; i++ ) X->p[i] = 0; } /* * shift by count % limb_size */ - if( v1 > 0 ) - { - for( i = X->n; i > 0; i-- ) - { + if ( v1 > 0 ) { + for ( i = X->n; i > 0; i-- ) { r1 = X->p[i - 1] << (biL - v1); X->p[i - 1] >>= v1; X->p[i - 1] |= r0; @@ -794,7 +770,7 @@ int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) } } - return( 0 ); + return ( 0 ); } /* @@ -804,27 +780,26 @@ int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ) { size_t i, j; - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) + for ( i = X->n; i > 0; i-- ) + if ( X->p[i - 1] != 0 ) break; - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) + for ( j = Y->n; j > 0; j-- ) + if ( Y->p[j - 1] != 0 ) break; - if( i == 0 && j == 0 ) - return( 0 ); + if ( i == 0 && j == 0 ) + return ( 0 ); - if( i > j ) return( 1 ); - if( j > i ) return( -1 ); + if ( i > j ) return ( 1 ); + if ( j > i ) return ( -1 ); - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( 1 ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -1 ); + for ( ; i > 0; i-- ) { + if ( X->p[i - 1] > Y->p[i - 1] ) return ( 1 ); + if ( X->p[i - 1] < Y->p[i - 1] ) return ( -1 ); } - return( 0 ); + return ( 0 ); } /* @@ -834,30 +809,29 @@ int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y ) { size_t i, j; - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) + for ( i = X->n; i > 0; i-- ) + if ( X->p[i - 1] != 0 ) break; - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) + for ( j = Y->n; j > 0; j-- ) + if ( Y->p[j - 1] != 0 ) break; - if( i == 0 && j == 0 ) - return( 0 ); + if ( i == 0 && j == 0 ) + return ( 0 ); - if( i > j ) return( X->s ); - if( j > i ) return( -Y->s ); + if ( i > j ) return ( X->s ); + if ( j > i ) return ( -Y->s ); - if( X->s > 0 && Y->s < 0 ) return( 1 ); - if( Y->s > 0 && X->s < 0 ) return( -1 ); + if ( X->s > 0 && Y->s < 0 ) return ( 1 ); + if ( Y->s > 0 && X->s < 0 ) return ( -1 ); - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( X->s ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -X->s ); + for ( ; i > 0; i-- ) { + if ( X->p[i - 1] > Y->p[i - 1] ) return ( X->s ); + if ( X->p[i - 1] < Y->p[i - 1] ) return ( -X->s ); } - return( 0 ); + return ( 0 ); } /* @@ -873,7 +847,7 @@ int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ) Y.n = 1; Y.p = p; - return( mbedtls_mpi_cmp_mpi( X, &Y ) ); + return ( mbedtls_mpi_cmp_mpi( X, &Y ) ); } /* @@ -885,12 +859,13 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi size_t i, j; mbedtls_mpi_uint *o, *p, c, tmp; - if( X == B ) - { - const mbedtls_mpi *T = A; A = X; B = T; + if ( X == B ) { + const mbedtls_mpi *T = A; + A = X; + B = T; } - if( X != A ) + if ( X != A ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, A ) ); /* @@ -898,38 +873,42 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi */ X->s = 1; - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) + for ( j = B->n; j > 0; j-- ) + if ( B->p[j - 1] != 0 ) break; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, j ) ); - o = B->p; p = X->p; c = 0; + o = B->p; + p = X->p; + c = 0; /* * tmp is used because it might happen that p == o */ - for( i = 0; i < j; i++, o++, p++ ) - { - tmp= *o; - *p += c; c = ( *p < c ); - *p += tmp; c += ( *p < tmp ); + for ( i = 0; i < j; i++, o++, p++ ) { + tmp = *o; + *p += c; + c = ( *p < c ); + *p += tmp; + c += ( *p < tmp ); } - while( c != 0 ) - { - if( i >= X->n ) - { + while ( c != 0 ) { + if ( i >= X->n ) { MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i + 1 ) ); p = X->p + i; } - *p += c; c = ( *p < c ); i++; p++; + *p += c; + c = ( *p < c ); + i++; + p++; } cleanup: - return( ret ); + return ( ret ); } /* @@ -940,16 +919,19 @@ static void mpi_sub_hlp( size_t n, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d ) size_t i; mbedtls_mpi_uint c, z; - for( i = c = 0; i < n; i++, s++, d++ ) - { - z = ( *d < c ); *d -= c; - c = ( *d < *s ) + z; *d -= *s; + for ( i = c = 0; i < n; i++, s++, d++ ) { + z = ( *d < c ); + *d -= c; + c = ( *d < *s ) + z; + *d -= *s; } - while( c != 0 ) - { - z = ( *d < c ); *d -= c; - c = z; i++; d++; + while ( c != 0 ) { + z = ( *d < c ); + *d -= c; + c = z; + i++; + d++; } } @@ -962,18 +944,17 @@ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi int ret; size_t n; - if( mbedtls_mpi_cmp_abs( A, B ) < 0 ) - return( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); + if ( mbedtls_mpi_cmp_abs( A, B ) < 0 ) + return ( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); mbedtls_mpi_init( &TB ); - if( X == B ) - { + if ( X == B ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); B = &TB; } - if( X != A ) + if ( X != A ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, A ) ); /* @@ -983,8 +964,8 @@ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi ret = 0; - for( n = B->n; n > 0; n-- ) - if( B->p[n - 1] != 0 ) + for ( n = B->n; n > 0; n-- ) + if ( B->p[n - 1] != 0 ) break; mpi_sub_hlp( n, B->p, X->p ); @@ -993,7 +974,7 @@ cleanup: mbedtls_mpi_free( &TB ); - return( ret ); + return ( ret ); } /* @@ -1003,28 +984,22 @@ int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi { int ret, s = A->s; - if( A->s * B->s < 0 ) - { - if( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) - { + if ( A->s * B->s < 0 ) { + if ( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, A, B ) ); X->s = s; - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, B, A ) ); X->s = -s; } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( X, A, B ) ); X->s = s; } cleanup: - return( ret ); + return ( ret ); } /* @@ -1034,28 +1009,22 @@ int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi { int ret, s = A->s; - if( A->s * B->s > 0 ) - { - if( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) - { + if ( A->s * B->s > 0 ) { + if ( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, A, B ) ); X->s = s; - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, B, A ) ); X->s = -s; } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( X, A, B ) ); X->s = s; } cleanup: - return( ret ); + return ( ret ); } /* @@ -1071,7 +1040,7 @@ int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint _B.n = 1; _B.p = p; - return( mbedtls_mpi_add_mpi( X, A, &_B ) ); + return ( mbedtls_mpi_add_mpi( X, A, &_B ) ); } /* @@ -1087,7 +1056,7 @@ int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint _B.n = 1; _B.p = p; - return( mbedtls_mpi_sub_mpi( X, A, &_B ) ); + return ( mbedtls_mpi_sub_mpi( X, A, &_B ) ); } /* @@ -1106,22 +1075,19 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp mbedtls_mpi_uint c = 0, t = 0; #if defined(MULADDC_HUIT) - for( ; i >= 8; i -= 8 ) - { + for ( ; i >= 8; i -= 8 ) { MULADDC_INIT MULADDC_HUIT MULADDC_STOP } - for( ; i > 0; i-- ) - { + for ( ; i > 0; i-- ) { MULADDC_INIT MULADDC_CORE MULADDC_STOP } #else /* MULADDC_HUIT */ - for( ; i >= 16; i -= 16 ) - { + for ( ; i >= 16; i -= 16 ) { MULADDC_INIT MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE @@ -1135,8 +1101,7 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp MULADDC_STOP } - for( ; i >= 8; i -= 8 ) - { + for ( ; i >= 8; i -= 8 ) { MULADDC_INIT MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE @@ -1146,8 +1111,7 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp MULADDC_STOP } - for( ; i > 0; i-- ) - { + for ( ; i > 0; i-- ) { MULADDC_INIT MULADDC_CORE MULADDC_STOP @@ -1157,9 +1121,10 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp t++; do { - *d += c; c = ( *d < c ); d++; - } - while( c != 0 ); + *d += c; + c = ( *d < c ); + d++; + } while ( c != 0 ); } /* @@ -1171,32 +1136,40 @@ int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi size_t i, j; mbedtls_mpi TA, TB; - mbedtls_mpi_init( &TA ); mbedtls_mpi_init( &TB ); + mbedtls_mpi_init( &TA ); + mbedtls_mpi_init( &TB ); - if( X == A ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); A = &TA; } - if( X == B ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); B = &TB; } + if ( X == A ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); + A = &TA; + } + if ( X == B ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); + B = &TB; + } - for( i = A->n; i > 0; i-- ) - if( A->p[i - 1] != 0 ) + for ( i = A->n; i > 0; i-- ) + if ( A->p[i - 1] != 0 ) break; - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) + for ( j = B->n; j > 0; j-- ) + if ( B->p[j - 1] != 0 ) break; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i + j ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i++; j > 0; j-- ) + for ( i++; j > 0; j-- ) mpi_mul_hlp( i - 1, A->p, X->p + j - 1, B->p[j - 1] ); X->s = A->s * B->s; cleanup: - mbedtls_mpi_free( &TB ); mbedtls_mpi_free( &TA ); + mbedtls_mpi_free( &TB ); + mbedtls_mpi_free( &TA ); - return( ret ); + return ( ret ); } /* @@ -1212,7 +1185,7 @@ int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint _B.p = p; p[0] = b; - return( mbedtls_mpi_mul_mpi( X, A, &_B ) ); + return ( mbedtls_mpi_mul_mpi( X, A, &_B ) ); } /* @@ -1220,7 +1193,7 @@ int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint * mbedtls_mpi_uint divisor, d */ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, - mbedtls_mpi_uint u0, mbedtls_mpi_uint d, mbedtls_mpi_uint *r ) + mbedtls_mpi_uint u0, mbedtls_mpi_uint d, mbedtls_mpi_uint *r ) { #if defined(MBEDTLS_HAVE_UDBL) mbedtls_t_udbl dividend, quotient; @@ -1235,8 +1208,7 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, /* * Check for overflow */ - if( 0 == d || u1 >= d ) - { + if ( 0 == d || u1 >= d ) { if (r != NULL) *r = ~0; return ( ~0 ); @@ -1246,10 +1218,10 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, dividend = (mbedtls_t_udbl) u1 << biL; dividend |= (mbedtls_t_udbl) u0; quotient = dividend / d; - if( quotient > ( (mbedtls_t_udbl) 1 << biL ) - 1 ) + if ( quotient > ( (mbedtls_t_udbl) 1 << biL ) - 1 ) quotient = ( (mbedtls_t_udbl) 1 << biL ) - 1; - if( r != NULL ) + if ( r != NULL ) *r = (mbedtls_mpi_uint)( dividend - (quotient * d ) ); return (mbedtls_mpi_uint) quotient; @@ -1282,8 +1254,7 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, q1 = u1 / d1; r0 = u1 - d1 * q1; - while( q1 >= radix || ( q1 * d0 > radix * r0 + u0_msw ) ) - { + while ( q1 >= radix || ( q1 * d0 > radix * r0 + u0_msw ) ) { q1 -= 1; r0 += d1; @@ -1294,8 +1265,7 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, q0 = rAX / d1; r0 = rAX - q0 * d1; - while( q0 >= radix || ( q0 * d0 > radix * r0 + u0_lsw ) ) - { + while ( q0 >= radix || ( q0 * d0 > radix * r0 + u0_lsw ) ) { q0 -= 1; r0 += d1; @@ -1320,17 +1290,19 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c size_t i, n, t, k; mbedtls_mpi X, Y, Z, T1, T2; - if( mbedtls_mpi_cmp_int( B, 0 ) == 0 ) - return( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); + if ( mbedtls_mpi_cmp_int( B, 0 ) == 0 ) + return ( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); - mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); - mbedtls_mpi_init( &T1 ); mbedtls_mpi_init( &T2 ); + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &Z ); + mbedtls_mpi_init( &T1 ); + mbedtls_mpi_init( &T2 ); - if( mbedtls_mpi_cmp_abs( A, B ) < 0 ) - { - if( Q != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_lset( Q, 0 ) ); - if( R != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, A ) ); - return( 0 ); + if ( mbedtls_mpi_cmp_abs( A, B ) < 0 ) { + if ( Q != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_lset( Q, 0 ) ); + if ( R != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, A ) ); + return ( 0 ); } MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &X, A ) ); @@ -1343,38 +1315,32 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &T2, 3 ) ); k = mbedtls_mpi_bitlen( &Y ) % biL; - if( k < biL - 1 ) - { + if ( k < biL - 1 ) { k = biL - 1 - k; MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &X, k ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &Y, k ) ); - } - else k = 0; + } else k = 0; n = X.n - 1; t = Y.n - 1; MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &Y, biL * ( n - t ) ) ); - while( mbedtls_mpi_cmp_mpi( &X, &Y ) >= 0 ) - { + while ( mbedtls_mpi_cmp_mpi( &X, &Y ) >= 0 ) { Z.p[n - t]++; MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &Y ) ); } MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &Y, biL * ( n - t ) ) ); - for( i = n; i > t ; i-- ) - { - if( X.p[i] >= Y.p[t] ) + for ( i = n; i > t ; i-- ) { + if ( X.p[i] >= Y.p[t] ) Z.p[i - t - 1] = ~0; - else - { + else { Z.p[i - t - 1] = mbedtls_int_div_int( X.p[i], X.p[i - 1], - Y.p[t], NULL); + Y.p[t], NULL); } Z.p[i - t - 1]++; - do - { + do { Z.p[i - t - 1]--; MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &T1, 0 ) ); @@ -1386,15 +1352,13 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c T2.p[0] = ( i < 2 ) ? 0 : X.p[i - 2]; T2.p[1] = ( i < 1 ) ? 0 : X.p[i - 1]; T2.p[2] = X.p[i]; - } - while( mbedtls_mpi_cmp_mpi( &T1, &T2 ) > 0 ); + } while ( mbedtls_mpi_cmp_mpi( &T1, &T2 ) > 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T1, &Y, Z.p[i - t - 1] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); - if( mbedtls_mpi_cmp_int( &X, 0 ) < 0 ) - { + if ( mbedtls_mpi_cmp_int( &X, 0 ) < 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &T1, &Y ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &X, &X, &T1 ) ); @@ -1402,28 +1366,29 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c } } - if( Q != NULL ) - { + if ( Q != NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( Q, &Z ) ); Q->s = A->s * B->s; } - if( R != NULL ) - { + if ( R != NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &X, k ) ); X.s = A->s; MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, &X ) ); - if( mbedtls_mpi_cmp_int( R, 0 ) == 0 ) + if ( mbedtls_mpi_cmp_int( R, 0 ) == 0 ) R->s = 1; } cleanup: - mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); - mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 ); + mbedtls_mpi_free( &X ); + mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &Z ); + mbedtls_mpi_free( &T1 ); + mbedtls_mpi_free( &T2 ); - return( ret ); + return ( ret ); } /* @@ -1439,7 +1404,7 @@ int mbedtls_mpi_div_int( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, m _B.n = 1; _B.p = p; - return( mbedtls_mpi_div_mpi( Q, R, A, &_B ) ); + return ( mbedtls_mpi_div_mpi( Q, R, A, &_B ) ); } /* @@ -1449,20 +1414,20 @@ int mbedtls_mpi_mod_mpi( mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi { int ret; - if( mbedtls_mpi_cmp_int( B, 0 ) < 0 ) - return( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); + if ( mbedtls_mpi_cmp_int( B, 0 ) < 0 ) + return ( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); MBEDTLS_MPI_CHK( mbedtls_mpi_div_mpi( NULL, R, A, B ) ); - while( mbedtls_mpi_cmp_int( R, 0 ) < 0 ) - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( R, R, B ) ); + while ( mbedtls_mpi_cmp_int( R, 0 ) < 0 ) + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( R, R, B ) ); - while( mbedtls_mpi_cmp_mpi( R, B ) >= 0 ) - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( R, R, B ) ); + while ( mbedtls_mpi_cmp_mpi( R, B ) >= 0 ) + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( R, R, B ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1473,32 +1438,29 @@ int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_ size_t i; mbedtls_mpi_uint x, y, z; - if( b == 0 ) - return( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); + if ( b == 0 ) + return ( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); - if( b < 0 ) - return( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); + if ( b < 0 ) + return ( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); /* * handle trivial cases */ - if( b == 1 ) - { + if ( b == 1 ) { *r = 0; - return( 0 ); + return ( 0 ); } - if( b == 2 ) - { + if ( b == 2 ) { *r = A->p[0] & 1; - return( 0 ); + return ( 0 ); } /* * general case */ - for( i = A->n, y = 0; i > 0; i-- ) - { + for ( i = A->n, y = 0; i > 0; i-- ) { x = A->p[i - 1]; y = ( y << biH ) | ( x >> biH ); z = y / b; @@ -1514,12 +1476,12 @@ int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_ * If A is negative, then the current y represents a negative value. * Flipping it to the positive side. */ - if( A->s < 0 && y != 0 ) + if ( A->s < 0 && y != 0 ) y = b - y; *r = y; - return( 0 ); + return ( 0 ); } /* @@ -1533,7 +1495,7 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N ) x = m0; x += ( ( m0 + 2 ) & 4 ) << 1; - for( i = biL; i >= 8; i /= 2 ) + for ( i = biL; i >= 8; i /= 2 ) x *= ( 2 - ( m0 * x ) ); *mm = ~x + 1; @@ -1543,13 +1505,13 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N ) * Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) */ static int mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi *N, mbedtls_mpi_uint mm, - const mbedtls_mpi *T ) + const mbedtls_mpi *T ) { size_t i, n, m; mbedtls_mpi_uint u0, u1, *d; - if( T->n < N->n + 1 || T->p == NULL ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( T->n < N->n + 1 || T->p == NULL ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); memset( T->p, 0, T->n * ciL ); @@ -1557,8 +1519,7 @@ static int mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi n = N->n; m = ( B->n < n ) ? B->n : n; - for( i = 0; i < n; i++ ) - { + for ( i = 0; i < n; i++ ) { /* * T = (T + u0*B + u1*N) / 2^biL */ @@ -1568,18 +1529,19 @@ static int mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi mpi_mul_hlp( m, B->p, d, u0 ); mpi_mul_hlp( n, N->p, d, u1 ); - *d++ = u0; d[n + 1] = 0; + *d++ = u0; + d[n + 1] = 0; } memcpy( A->p, d, ( n + 1 ) * ciL ); - if( mbedtls_mpi_cmp_abs( A, N ) >= 0 ) + if ( mbedtls_mpi_cmp_abs( A, N ) >= 0 ) mpi_sub_hlp( n, N->p, A->p ); else /* prevent timing attacks */ mpi_sub_hlp( n, A->p, T->p ); - return( 0 ); + return ( 0 ); } /* @@ -1593,7 +1555,7 @@ static int mpi_montred( mbedtls_mpi *A, const mbedtls_mpi *N, mbedtls_mpi_uint m U.n = U.s = (int) z; U.p = &z; - return( mpi_montmul( A, &U, N, mm, T ) ); + return ( mpi_montmul( A, &U, N, mm, T ) ); } /* @@ -1609,17 +1571,18 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi mbedtls_mpi RR, T, W[ 2 << MBEDTLS_MPI_WINDOW_SIZE ], Apos; int neg; - if( mbedtls_mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); - if( mbedtls_mpi_cmp_int( E, 0 ) < 0 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( E, 0 ) < 0 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); /* * Init temps and window size */ mpi_montg_init( &mm, N ); - mbedtls_mpi_init( &RR ); mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &RR ); + mbedtls_mpi_init( &T ); mbedtls_mpi_init( &Apos ); memset( W, 0, sizeof( W ) ); @@ -1628,7 +1591,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi wsize = ( i > 671 ) ? 6 : ( i > 239 ) ? 5 : ( i > 79 ) ? 4 : ( i > 23 ) ? 3 : 1; - if( wsize > MBEDTLS_MPI_WINDOW_SIZE ) + if ( wsize > MBEDTLS_MPI_WINDOW_SIZE ) wsize = MBEDTLS_MPI_WINDOW_SIZE; j = N->n + 1; @@ -1640,8 +1603,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi * Compensate for negative A (and correct at the end) */ neg = ( A->s == -1 ); - if( neg ) - { + if ( neg ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Apos, A ) ); Apos.s = 1; A = &Apos; @@ -1650,22 +1612,20 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi /* * If 1st call, pre-compute R^2 mod N */ - if( _RR == NULL || _RR->p == NULL ) - { + if ( _RR == NULL || _RR->p == NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &RR, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &RR, N->n * 2 * biL ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &RR, &RR, N ) ); - if( _RR != NULL ) + if ( _RR != NULL ) memcpy( _RR, &RR, sizeof( mbedtls_mpi ) ); - } - else + } else memcpy( &RR, _RR, sizeof( mbedtls_mpi ) ); /* * W[1] = A * R^2 * R^-1 mod N = A * R mod N */ - if( mbedtls_mpi_cmp_mpi( A, N ) >= 0 ) + if ( mbedtls_mpi_cmp_mpi( A, N ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &W[1], A, N ) ); else MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[1], A ) ); @@ -1678,8 +1638,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, &RR ) ); MBEDTLS_MPI_CHK( mpi_montred( X, N, mm, &T ) ); - if( wsize > 1 ) - { + if ( wsize > 1 ) { /* * W[1 << (wsize - 1)] = W[1] ^ (wsize - 1) */ @@ -1688,14 +1647,13 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &W[j], N->n + 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[j], &W[1] ) ); - for( i = 0; i < wsize - 1; i++ ) + for ( i = 0; i < wsize - 1; i++ ) MBEDTLS_MPI_CHK( mpi_montmul( &W[j], &W[j], N, mm, &T ) ); /* * W[i] = W[i - 1] * W[1] */ - for( i = j + 1; i < ( one << wsize ); i++ ) - { + for ( i = j + 1; i < ( one << wsize ); i++ ) { MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &W[i], N->n + 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[i], &W[i - 1] ) ); @@ -1709,11 +1667,9 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi wbits = 0; state = 0; - while( 1 ) - { - if( bufsize == 0 ) - { - if( nblimbs == 0 ) + while ( 1 ) { + if ( bufsize == 0 ) { + if ( nblimbs == 0 ) break; nblimbs--; @@ -1728,11 +1684,10 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi /* * skip leading 0s */ - if( ei == 0 && state == 0 ) + if ( ei == 0 && state == 0 ) continue; - if( ei == 0 && state == 1 ) - { + if ( ei == 0 && state == 1 ) { /* * out of window, square X */ @@ -1748,12 +1703,11 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi nbits++; wbits |= ( ei << ( wsize - nbits ) ); - if( nbits == wsize ) - { + if ( nbits == wsize ) { /* * X = X^wsize R^-1 mod N */ - for( i = 0; i < wsize; i++ ) + for ( i = 0; i < wsize; i++ ) MBEDTLS_MPI_CHK( mpi_montmul( X, X, N, mm, &T ) ); /* @@ -1770,13 +1724,12 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi /* * process the remaining bits */ - for( i = 0; i < nbits; i++ ) - { + for ( i = 0; i < nbits; i++ ) { MBEDTLS_MPI_CHK( mpi_montmul( X, X, N, mm, &T ) ); wbits <<= 1; - if( ( wbits & ( one << wsize ) ) != 0 ) + if ( ( wbits & ( one << wsize ) ) != 0 ) MBEDTLS_MPI_CHK( mpi_montmul( X, &W[1], N, mm, &T ) ); } @@ -1785,23 +1738,24 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi */ MBEDTLS_MPI_CHK( mpi_montred( X, N, mm, &T ) ); - if( neg ) - { + if ( neg ) { X->s = -1; MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( X, N, X ) ); } cleanup: - for( i = ( one << ( wsize - 1 ) ); i < ( one << wsize ); i++ ) + for ( i = ( one << ( wsize - 1 ) ); i < ( one << wsize ); i++ ) mbedtls_mpi_free( &W[i] ); - mbedtls_mpi_free( &W[1] ); mbedtls_mpi_free( &T ); mbedtls_mpi_free( &Apos ); + mbedtls_mpi_free( &W[1] ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &Apos ); - if( _RR == NULL || _RR->p == NULL ) + if ( _RR == NULL || _RR->p == NULL ) mbedtls_mpi_free( &RR ); - return( ret ); + return ( ret ); } /* @@ -1813,7 +1767,9 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B size_t lz, lzt; mbedtls_mpi TG, TA, TB; - mbedtls_mpi_init( &TG ); mbedtls_mpi_init( &TA ); mbedtls_mpi_init( &TB ); + mbedtls_mpi_init( &TG ); + mbedtls_mpi_init( &TA ); + mbedtls_mpi_init( &TB ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); @@ -1821,7 +1777,7 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B lz = mbedtls_mpi_lsb( &TA ); lzt = mbedtls_mpi_lsb( &TB ); - if( lzt < lz ) + if ( lzt < lz ) lz = lzt; MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TA, lz ) ); @@ -1829,18 +1785,14 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B TA.s = TB.s = 1; - while( mbedtls_mpi_cmp_int( &TA, 0 ) != 0 ) - { + while ( mbedtls_mpi_cmp_int( &TA, 0 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TA, mbedtls_mpi_lsb( &TA ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TB, mbedtls_mpi_lsb( &TB ) ) ); - if( mbedtls_mpi_cmp_mpi( &TA, &TB ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &TA, &TB ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( &TA, &TA, &TB ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TA, 1 ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( &TB, &TB, &TA ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TB, 1 ) ); } @@ -1851,9 +1803,11 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B cleanup: - mbedtls_mpi_free( &TG ); mbedtls_mpi_free( &TA ); mbedtls_mpi_free( &TB ); + mbedtls_mpi_free( &TG ); + mbedtls_mpi_free( &TA ); + mbedtls_mpi_free( &TB ); - return( ret ); + return ( ret ); } /* @@ -1864,20 +1818,20 @@ cleanup: * deterministic, eg for tests). */ int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( size > MBEDTLS_MPI_MAX_SIZE ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( size > MBEDTLS_MPI_MAX_SIZE ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( f_rng( p_rng, buf, size ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( X, buf, size ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1888,17 +1842,22 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi int ret; mbedtls_mpi G, TA, TU, U1, U2, TB, TV, V1, V2; - if( mbedtls_mpi_cmp_int( N, 0 ) <= 0 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( N, 0 ) <= 0 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); - mbedtls_mpi_init( &TA ); mbedtls_mpi_init( &TU ); mbedtls_mpi_init( &U1 ); mbedtls_mpi_init( &U2 ); - mbedtls_mpi_init( &G ); mbedtls_mpi_init( &TB ); mbedtls_mpi_init( &TV ); - mbedtls_mpi_init( &V1 ); mbedtls_mpi_init( &V2 ); + mbedtls_mpi_init( &TA ); + mbedtls_mpi_init( &TU ); + mbedtls_mpi_init( &U1 ); + mbedtls_mpi_init( &U2 ); + mbedtls_mpi_init( &G ); + mbedtls_mpi_init( &TB ); + mbedtls_mpi_init( &TV ); + mbedtls_mpi_init( &V1 ); + mbedtls_mpi_init( &V2 ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &G, A, N ) ); - if( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) - { + if ( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) { ret = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; goto cleanup; } @@ -1913,14 +1872,11 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &V1, 0 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &V2, 1 ) ); - do - { - while( ( TU.p[0] & 1 ) == 0 ) - { + do { + while ( ( TU.p[0] & 1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TU, 1 ) ); - if( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) - { + if ( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &U1, &U1, &TB ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U2, &U2, &TA ) ); } @@ -1929,12 +1885,10 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &U2, 1 ) ); } - while( ( TV.p[0] & 1 ) == 0 ) - { + while ( ( TV.p[0] & 1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TV, 1 ) ); - if( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) - { + if ( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &V1, &V1, &TB ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V2, &V2, &TA ) ); } @@ -1943,63 +1897,64 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &V2, 1 ) ); } - if( mbedtls_mpi_cmp_mpi( &TU, &TV ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &TU, &TV ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &TU, &TU, &TV ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U1, &U1, &V1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U2, &U2, &V2 ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &TV, &TV, &TU ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V1, &V1, &U1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V2, &V2, &U2 ) ); } - } - while( mbedtls_mpi_cmp_int( &TU, 0 ) != 0 ); + } while ( mbedtls_mpi_cmp_int( &TU, 0 ) != 0 ); - while( mbedtls_mpi_cmp_int( &V1, 0 ) < 0 ) + while ( mbedtls_mpi_cmp_int( &V1, 0 ) < 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &V1, &V1, N ) ); - while( mbedtls_mpi_cmp_mpi( &V1, N ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &V1, N ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V1, &V1, N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, &V1 ) ); cleanup: - mbedtls_mpi_free( &TA ); mbedtls_mpi_free( &TU ); mbedtls_mpi_free( &U1 ); mbedtls_mpi_free( &U2 ); - mbedtls_mpi_free( &G ); mbedtls_mpi_free( &TB ); mbedtls_mpi_free( &TV ); - mbedtls_mpi_free( &V1 ); mbedtls_mpi_free( &V2 ); + mbedtls_mpi_free( &TA ); + mbedtls_mpi_free( &TU ); + mbedtls_mpi_free( &U1 ); + mbedtls_mpi_free( &U2 ); + mbedtls_mpi_free( &G ); + mbedtls_mpi_free( &TB ); + mbedtls_mpi_free( &TV ); + mbedtls_mpi_free( &V1 ); + mbedtls_mpi_free( &V2 ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_GENPRIME) -static const int small_prime[] = -{ - 3, 5, 7, 11, 13, 17, 19, 23, - 29, 31, 37, 41, 43, 47, 53, 59, - 61, 67, 71, 73, 79, 83, 89, 97, - 101, 103, 107, 109, 113, 127, 131, 137, - 139, 149, 151, 157, 163, 167, 173, 179, - 181, 191, 193, 197, 199, 211, 223, 227, - 229, 233, 239, 241, 251, 257, 263, 269, - 271, 277, 281, 283, 293, 307, 311, 313, - 317, 331, 337, 347, 349, 353, 359, 367, - 373, 379, 383, 389, 397, 401, 409, 419, - 421, 431, 433, 439, 443, 449, 457, 461, - 463, 467, 479, 487, 491, 499, 503, 509, - 521, 523, 541, 547, 557, 563, 569, 571, - 577, 587, 593, 599, 601, 607, 613, 617, - 619, 631, 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, 719, 727, - 733, 739, 743, 751, 757, 761, 769, 773, - 787, 797, 809, 811, 821, 823, 827, 829, - 839, 853, 857, 859, 863, 877, 881, 883, - 887, 907, 911, 919, 929, 937, 941, 947, - 953, 967, 971, 977, 983, 991, 997, -103 +static const int small_prime[] = { + 3, 5, 7, 11, 13, 17, 19, 23, + 29, 31, 37, 41, 43, 47, 53, 59, + 61, 67, 71, 73, 79, 83, 89, 97, + 101, 103, 107, 109, 113, 127, 131, 137, + 139, 149, 151, 157, 163, 167, 173, 179, + 181, 191, 193, 197, 199, 211, 223, 227, + 229, 233, 239, 241, 251, 257, 263, 269, + 271, 277, 281, 283, 293, 307, 311, 313, + 317, 331, 337, 347, 349, 353, 359, 367, + 373, 379, 383, 389, 397, 401, 409, 419, + 421, 431, 433, 439, 443, 449, 457, 461, + 463, 467, 479, 487, 491, 499, 503, 509, + 521, 523, 541, 547, 557, 563, 569, 571, + 577, 587, 593, 599, 601, 607, 613, 617, + 619, 631, 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, 719, 727, + 733, 739, 743, 751, 757, 761, 769, 773, + 787, 797, 809, 811, 821, 823, 827, 829, + 839, 853, 857, 859, 863, 877, 881, 883, + 887, 907, 911, 919, 929, 937, 941, 947, + 953, 967, 971, 977, 983, 991, 997, -103 }; /* @@ -2017,22 +1972,21 @@ static int mpi_check_small_factors( const mbedtls_mpi *X ) size_t i; mbedtls_mpi_uint r; - if( ( X->p[0] & 1 ) == 0 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + if ( ( X->p[0] & 1 ) == 0 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); - for( i = 0; small_prime[i] > 0; i++ ) - { - if( mbedtls_mpi_cmp_int( X, small_prime[i] ) <= 0 ) - return( 1 ); + for ( i = 0; small_prime[i] > 0; i++ ) { + if ( mbedtls_mpi_cmp_int( X, small_prime[i] ) <= 0 ) + return ( 1 ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, small_prime[i] ) ); - if( r == 0 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + if ( r == 0 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); } cleanup: - return( ret ); + return ( ret ); } /* @@ -2046,7 +2000,10 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, size_t i, j, k, n, s; mbedtls_mpi W, R, T, A, RR; - mbedtls_mpi_init( &W ); mbedtls_mpi_init( &R ); mbedtls_mpi_init( &T ); mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &W ); + mbedtls_mpi_init( &R ); + mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &A ); mbedtls_mpi_init( &RR ); /* @@ -2066,15 +2023,13 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, ( i >= 650 ) ? 4 : ( i >= 350 ) ? 8 : ( i >= 250 ) ? 12 : ( i >= 150 ) ? 18 : 27 ); - for( i = 0; i < n; i++ ) - { + for ( i = 0; i < n; i++ ) { /* * pick a random A, 1 < A < |X| - 1 */ MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &A, X->n * ciL, f_rng, p_rng ) ); - if( mbedtls_mpi_cmp_mpi( &A, &W ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &A, &W ) >= 0 ) { j = mbedtls_mpi_bitlen( &A ) - mbedtls_mpi_bitlen( &W ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &A, j + 1 ) ); } @@ -2102,20 +2057,19 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, */ MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &A, &A, &R, X, &RR ) ); - if( mbedtls_mpi_cmp_mpi( &A, &W ) == 0 || - mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) + if ( mbedtls_mpi_cmp_mpi( &A, &W ) == 0 || + mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) continue; j = 1; - while( j < s && mbedtls_mpi_cmp_mpi( &A, &W ) != 0 ) - { + while ( j < s && mbedtls_mpi_cmp_mpi( &A, &W ) != 0 ) { /* * A = A * A mod |X| */ MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &A, &A ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &A, &T, X ) ); - if( mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) + if ( mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) break; j++; @@ -2124,27 +2078,29 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, /* * not prime if A != |X| - 1 or A == 1 */ - if( mbedtls_mpi_cmp_mpi( &A, &W ) != 0 || - mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &A, &W ) != 0 || + mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) { ret = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; break; } } cleanup: - mbedtls_mpi_free( &W ); mbedtls_mpi_free( &R ); mbedtls_mpi_free( &T ); mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &W ); + mbedtls_mpi_free( &R ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &A ); mbedtls_mpi_free( &RR ); - return( ret ); + return ( ret ); } /* * Pseudo-primality test: small factors, then Miller-Rabin */ int mbedtls_mpi_is_prime( const mbedtls_mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_mpi XX; @@ -2153,38 +2109,37 @@ int mbedtls_mpi_is_prime( const mbedtls_mpi *X, XX.n = X->n; XX.p = X->p; - if( mbedtls_mpi_cmp_int( &XX, 0 ) == 0 || - mbedtls_mpi_cmp_int( &XX, 1 ) == 0 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + if ( mbedtls_mpi_cmp_int( &XX, 0 ) == 0 || + mbedtls_mpi_cmp_int( &XX, 1 ) == 0 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); - if( mbedtls_mpi_cmp_int( &XX, 2 ) == 0 ) - return( 0 ); + if ( mbedtls_mpi_cmp_int( &XX, 2 ) == 0 ) + return ( 0 ); - if( ( ret = mpi_check_small_factors( &XX ) ) != 0 ) - { - if( ret == 1 ) - return( 0 ); + if ( ( ret = mpi_check_small_factors( &XX ) ) != 0 ) { + if ( ret == 1 ) + return ( 0 ); - return( ret ); + return ( ret ); } - return( mpi_miller_rabin( &XX, f_rng, p_rng ) ); + return ( mpi_miller_rabin( &XX, f_rng, p_rng ) ); } /* * Prime number generation */ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; size_t k, n; mbedtls_mpi_uint r; mbedtls_mpi Y; - if( nbits < 3 || nbits > MBEDTLS_MPI_MAX_BITS ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( nbits < 3 || nbits > MBEDTLS_MPI_MAX_BITS ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); mbedtls_mpi_init( &Y ); @@ -2193,24 +2148,20 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( X, n * ciL, f_rng, p_rng ) ); k = mbedtls_mpi_bitlen( X ); - if( k > nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, k - nbits + 1 ) ); + if ( k > nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, k - nbits + 1 ) ); - mbedtls_mpi_set_bit( X, nbits-1, 1 ); + mbedtls_mpi_set_bit( X, nbits - 1, 1 ); X->p[0] |= 1; - if( dh_flag == 0 ) - { - while( ( ret = mbedtls_mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) - { - if( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) + if ( dh_flag == 0 ) { + while ( ( ret = mbedtls_mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) { + if ( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) goto cleanup; MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 2 ) ); } - } - else - { + } else { /* * An necessary condition for Y and X = 2Y + 1 to be prime * is X = 2 mod 3 (which is equivalent to Y = 2 mod 3). @@ -2220,30 +2171,28 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, X->p[0] |= 2; MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, 3 ) ); - if( r == 0 ) + if ( r == 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 8 ) ); - else if( r == 1 ) + else if ( r == 1 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 4 ) ); /* Set Y = (X-1) / 2, which is X / 2 because X is odd */ MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Y, X ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &Y, 1 ) ); - while( 1 ) - { + while ( 1 ) { /* * First, check small factors for X and Y * before doing Miller-Rabin on any of them */ - if( ( ret = mpi_check_small_factors( X ) ) == 0 && - ( ret = mpi_check_small_factors( &Y ) ) == 0 && - ( ret = mpi_miller_rabin( X, f_rng, p_rng ) ) == 0 && - ( ret = mpi_miller_rabin( &Y, f_rng, p_rng ) ) == 0 ) - { + if ( ( ret = mpi_check_small_factors( X ) ) == 0 && + ( ret = mpi_check_small_factors( &Y ) ) == 0 && + ( ret = mpi_miller_rabin( X, f_rng, p_rng ) ) == 0 && + ( ret = mpi_miller_rabin( &Y, f_rng, p_rng ) ) == 0 ) { break; } - if( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) + if ( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) goto cleanup; /* @@ -2260,7 +2209,7 @@ cleanup: mbedtls_mpi_free( &Y ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_GENPRIME */ @@ -2269,8 +2218,7 @@ cleanup: #define GCD_PAIR_COUNT 3 -static const int gcd_pairs[GCD_PAIR_COUNT][3] = -{ +static const int gcd_pairs[GCD_PAIR_COUNT][3] = { { 693, 609, 21 }, { 1764, 868, 28 }, { 768454923, 542167814, 1 } @@ -2284,135 +2232,134 @@ int mbedtls_mpi_self_test( int verbose ) int ret, i; mbedtls_mpi A, E, N, X, Y, U, V; - mbedtls_mpi_init( &A ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &N ); mbedtls_mpi_init( &X ); - mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &U ); mbedtls_mpi_init( &V ); + mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &E ); + mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &U ); + mbedtls_mpi_init( &V ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &A, 16, - "EFE021C2645FD1DC586E69184AF4A31E" \ - "D5F53E93B5F123FA41680867BA110131" \ - "944FE7952E2517337780CB0DB80E61AA" \ - "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); + "EFE021C2645FD1DC586E69184AF4A31E" \ + "D5F53E93B5F123FA41680867BA110131" \ + "944FE7952E2517337780CB0DB80E61AA" \ + "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &E, 16, - "B2E7EFD37075B9F03FF989C7C5051C20" \ - "34D2A323810251127E7BF8625A4F49A5" \ - "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ - "5B5C25763222FEFCCFC38B832366C29E" ) ); + "B2E7EFD37075B9F03FF989C7C5051C20" \ + "34D2A323810251127E7BF8625A4F49A5" \ + "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ + "5B5C25763222FEFCCFC38B832366C29E" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &N, 16, - "0066A198186C18C10B2F5ED9B522752A" \ - "9830B69916E535C8F047518A889A43A5" \ - "94B6BED27A168D31D4A52F88925AA8F5" ) ); + "0066A198186C18C10B2F5ED9B522752A" \ + "9830B69916E535C8F047518A889A43A5" \ + "94B6BED27A168D31D4A52F88925AA8F5" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &A, &N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "602AB7ECA597A3D6B56FF9829A5E8B85" \ - "9E857EA95A03512E2BAE7391688D264A" \ - "A5663B0341DB9CCFD2C4C5F421FEC814" \ - "8001B72E848A38CAE1C65F78E56ABDEF" \ - "E12D3C039B8A02D6BE593F0BBBDA56F1" \ - "ECF677152EF804370C1A305CAF3B5BF1" \ - "30879B56C61DE584A0F53A2447A51E" ) ); + "602AB7ECA597A3D6B56FF9829A5E8B85" \ + "9E857EA95A03512E2BAE7391688D264A" \ + "A5663B0341DB9CCFD2C4C5F421FEC814" \ + "8001B72E848A38CAE1C65F78E56ABDEF" \ + "E12D3C039B8A02D6BE593F0BBBDA56F1" \ + "ECF677152EF804370C1A305CAF3B5BF1" \ + "30879B56C61DE584A0F53A2447A51E" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #1 (mul_mpi): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); MBEDTLS_MPI_CHK( mbedtls_mpi_div_mpi( &X, &Y, &A, &N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "256567336059E52CAE22925474705F39A94" ) ); + "256567336059E52CAE22925474705F39A94" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &V, 16, - "6613F26162223DF488E9CD48CC132C7A" \ - "0AC93C701B001B092E4E5B9F73BCD27B" \ - "9EE50D0657C77F374E903CDFA4C642" ) ); + "6613F26162223DF488E9CD48CC132C7A" \ + "0AC93C701B001B092E4E5B9F73BCD27B" \ + "9EE50D0657C77F374E903CDFA4C642" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #2 (div_mpi): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 || - mbedtls_mpi_cmp_mpi( &Y, &V ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 || + mbedtls_mpi_cmp_mpi( &Y, &V ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &X, &A, &E, &N, NULL ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "36E139AEA55215609D2816998ED020BB" \ - "BD96C37890F65171D948E9BC7CBAA4D9" \ - "325D24D6A3C12710F10A09FA08AB87" ) ); + "36E139AEA55215609D2816998ED020BB" \ + "BD96C37890F65171D948E9BC7CBAA4D9" \ + "325D24D6A3C12710F10A09FA08AB87" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #3 (exp_mod): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &X, &A, &N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ - "C3DBA76456363A10869622EAC2DD84EC" \ - "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); + "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ + "C3DBA76456363A10869622EAC2DD84EC" \ + "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #4 (inv_mod): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #5 (simple gcd): " ); - for( i = 0; i < GCD_PAIR_COUNT; i++ ) - { + for ( i = 0; i < GCD_PAIR_COUNT; i++ ) { MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &X, gcd_pairs[i][0] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &Y, gcd_pairs[i][1] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &A, &X, &Y ) ); - if( mbedtls_mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed at %d\n", i ); ret = 1; @@ -2420,21 +2367,26 @@ int mbedtls_mpi_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: - if( ret != 0 && verbose != 0 ) + if ( ret != 0 && verbose != 0 ) mbedtls_printf( "Unexpected error, return code = %08X\n", ret ); - mbedtls_mpi_free( &A ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &N ); mbedtls_mpi_free( &X ); - mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &U ); mbedtls_mpi_free( &V ); + mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &E ); + mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &X ); + mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &U ); + mbedtls_mpi_free( &V ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/blowfish.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/blowfish.c index 9003f0df..48744aa7 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/blowfish.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/blowfish.c @@ -40,8 +40,10 @@ #if !defined(MBEDTLS_BLOWFISH_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -68,11 +70,11 @@ static void mbedtls_zeroize( void *v, size_t n ) { #endif static const uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2] = { - 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, - 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, - 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, - 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, - 0x9216D5D9L, 0x8979FB1BL + 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, + 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, + 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, + 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, + 0x9216D5D9L, 0x8979FB1BL }; /* declarations of data at the end of this file */ @@ -80,21 +82,21 @@ static const uint32_t S[4][256]; static uint32_t F( mbedtls_blowfish_context *ctx, uint32_t x ) { - unsigned short a, b, c, d; - uint32_t y; + unsigned short a, b, c, d; + uint32_t y; - d = (unsigned short)(x & 0xFF); - x >>= 8; - c = (unsigned short)(x & 0xFF); - x >>= 8; - b = (unsigned short)(x & 0xFF); - x >>= 8; - a = (unsigned short)(x & 0xFF); - y = ctx->S[0][a] + ctx->S[1][b]; - y = y ^ ctx->S[2][c]; - y = y + ctx->S[3][d]; + d = (unsigned short)(x & 0xFF); + x >>= 8; + c = (unsigned short)(x & 0xFF); + x >>= 8; + b = (unsigned short)(x & 0xFF); + x >>= 8; + a = (unsigned short)(x & 0xFF); + y = ctx->S[0][a] + ctx->S[1][b]; + y = y ^ ctx->S[2][c]; + y = y + ctx->S[3][d]; - return( y ); + return ( y ); } static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) @@ -105,8 +107,7 @@ static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t Xl = *xl; Xr = *xr; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i ) - { + for ( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i ) { Xl = Xl ^ ctx->P[i]; Xr = F( ctx, Xl ) ^ Xr; @@ -134,8 +135,7 @@ static void blowfish_dec( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t Xl = *xl; Xr = *xr; - for( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i ) - { + for ( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i ) { Xl = Xl ^ ctx->P[i]; Xr = F( ctx, Xl ) ^ Xr; @@ -162,7 +162,7 @@ void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx ) void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_blowfish_context ) ); @@ -172,33 +172,29 @@ void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ) * Blowfish key schedule */ int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { unsigned int i, j, k; uint32_t data, datal, datar; - if( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS || - ( keybits % 8 ) ) - { - return( MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH ); + if ( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS || + ( keybits % 8 ) ) { + return ( MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH ); } keybits >>= 3; - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j++ ) + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 256; j++ ) ctx->S[i][j] = S[i][j]; } j = 0; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i ) - { + for ( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i ) { data = 0x00000000; - for( k = 0; k < 4; ++k ) - { + for ( k = 0; k < 4; ++k ) { data = ( data << 8 ) | key[j++]; - if( j >= keybits ) + if ( j >= keybits ) j = 0; } ctx->P[i] = P[i] ^ data; @@ -207,51 +203,45 @@ int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char datal = 0x00000000; datar = 0x00000000; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 ) - { + for ( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 ) { blowfish_enc( ctx, &datal, &datar ); ctx->P[i] = datal; ctx->P[i + 1] = datar; } - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j += 2 ) - { + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 256; j += 2 ) { blowfish_enc( ctx, &datal, &datar ); ctx->S[i][j] = datal; ctx->S[i][j + 1] = datar; } } - return( 0 ); + return ( 0 ); } /* * Blowfish-ECB block encryption/decryption */ int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, - int mode, - const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ) + int mode, + const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], + unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ) { uint32_t X0, X1; GET_UINT32_BE( X0, input, 0 ); GET_UINT32_BE( X1, input, 4 ); - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { + if ( mode == MBEDTLS_BLOWFISH_DECRYPT ) { blowfish_dec( ctx, &X0, &X1 ); - } - else /* MBEDTLS_BLOWFISH_ENCRYPT */ - { + } else { /* MBEDTLS_BLOWFISH_ENCRYPT */ blowfish_enc( ctx, &X0, &X1 ); } PUT_UINT32_BE( X0, output, 0 ); PUT_UINT32_BE( X1, output, 4 ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -259,26 +249,24 @@ int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, * Blowfish-CBC buffer encryption/decryption */ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[MBEDTLS_BLOWFISH_BLOCKSIZE]; - if( length % MBEDTLS_BLOWFISH_BLOCKSIZE ) - return( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); + if ( length % MBEDTLS_BLOWFISH_BLOCKSIZE ) + return ( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_BLOWFISH_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, MBEDTLS_BLOWFISH_BLOCKSIZE ); mbedtls_blowfish_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE;i++ ) + for ( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, MBEDTLS_BLOWFISH_BLOCKSIZE ); @@ -287,12 +275,9 @@ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, output += MBEDTLS_BLOWFISH_BLOCKSIZE; length -= MBEDTLS_BLOWFISH_BLOCKSIZE; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_blowfish_crypt_ecb( ctx, mode, output, output ); @@ -304,7 +289,7 @@ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -313,21 +298,19 @@ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, * Blowfish CFB buffer encryption/decryption */ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ) { int c; size_t n = *iv_off; - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) + if ( mode == MBEDTLS_BLOWFISH_DECRYPT ) { + while ( length-- ) { + if ( n == 0 ) mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); c = *input++; @@ -336,12 +319,9 @@ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; } - } - else - { - while( length-- ) - { - if( n == 0 ) + } else { + while ( length-- ) { + if ( n == 0 ) mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); @@ -352,7 +332,7 @@ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, *iv_off = n; - return( 0 ); + return ( 0 ); } #endif /*MBEDTLS_CIPHER_MODE_CFB */ @@ -361,24 +341,23 @@ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, * Blowfish CTR buffer encryption/decryption */ int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) + size_t length, + size_t *nc_off, + unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], + unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ) { int c, i; size_t n = *nc_off; - while( length-- ) - { - if( n == 0 ) { + while ( length-- ) { + if ( n == 0 ) { mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, nonce_counter, - stream_block ); + stream_block ); - for( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) + for ( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- ) + if ( ++nonce_counter[i - 1] != 0 ) break; } c = *input++; @@ -389,12 +368,13 @@ int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, *nc_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ static const uint32_t S[4][256] = { - { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, + { + 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, @@ -457,8 +437,10 @@ static const uint32_t S[4][256] = { 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, - 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL }, - { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, + 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL + }, + { + 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, @@ -521,8 +503,10 @@ static const uint32_t S[4][256] = { 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, - 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L }, - { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, + 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L + }, + { + 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, @@ -585,8 +569,10 @@ static const uint32_t S[4][256] = { 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, - 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L }, - { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, + 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L + }, + { + 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, @@ -649,7 +635,8 @@ static const uint32_t S[4][256] = { 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, - 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L } + 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L + } }; #endif /* !MBEDTLS_BLOWFISH_ALT */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/camellia.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/camellia.c index ac6f96a8..9acf745d 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/camellia.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/camellia.c @@ -49,8 +49,10 @@ #if !defined(MBEDTLS_CAMELLIA_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -76,8 +78,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { } #endif -static const unsigned char SIGMA_CHARS[6][8] = -{ +static const unsigned char SIGMA_CHARS[6][8] = { { 0xa0, 0x9e, 0x66, 0x7f, 0x3b, 0xcc, 0x90, 0x8b }, { 0xb6, 0x7a, 0xe8, 0x58, 0x4c, 0xaa, 0x73, 0xb2 }, { 0xc6, 0xef, 0x37, 0x2f, 0xe9, 0x4f, 0x82, 0xbe }, @@ -88,24 +89,23 @@ static const unsigned char SIGMA_CHARS[6][8] = #if defined(MBEDTLS_CAMELLIA_SMALL_MEMORY) -static const unsigned char FSb[256] = -{ - 112,130, 44,236,179, 39,192,229,228,133, 87, 53,234, 12,174, 65, - 35,239,107,147, 69, 25,165, 33,237, 14, 79, 78, 29,101,146,189, - 134,184,175,143,124,235, 31,206, 62, 48,220, 95, 94,197, 11, 26, - 166,225, 57,202,213, 71, 93, 61,217, 1, 90,214, 81, 86,108, 77, - 139, 13,154,102,251,204,176, 45,116, 18, 43, 32,240,177,132,153, - 223, 76,203,194, 52,126,118, 5,109,183,169, 49,209, 23, 4,215, - 20, 88, 58, 97,222, 27, 17, 28, 50, 15,156, 22, 83, 24,242, 34, - 254, 68,207,178,195,181,122,145, 36, 8,232,168, 96,252,105, 80, - 170,208,160,125,161,137, 98,151, 84, 91, 30,149,224,255,100,210, - 16,196, 0, 72,163,247,117,219,138, 3,230,218, 9, 63,221,148, - 135, 92,131, 2,205, 74,144, 51,115,103,246,243,157,127,191,226, - 82,155,216, 38,200, 55,198, 59,129,150,111, 75, 19,190, 99, 46, - 233,121,167,140,159,110,188,142, 41,245,249,182, 47,253,180, 89, - 120,152, 6,106,231, 70,113,186,212, 37,171, 66,136,162,141,250, - 114, 7,185, 85,248,238,172, 10, 54, 73, 42,104, 60, 56,241,164, - 64, 40,211,123,187,201, 67,193, 21,227,173,244,119,199,128,158 +static const unsigned char FSb[256] = { + 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, + 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, + 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, + 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, + 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, + 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, + 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, + 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, + 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, + 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, + 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, + 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, + 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, + 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, + 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, + 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 }; #define SBOX1(n) FSb[(n)] @@ -115,84 +115,80 @@ static const unsigned char FSb[256] = #else /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ -static const unsigned char FSb[256] = -{ - 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, - 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, - 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, - 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, - 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, - 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, - 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, - 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, - 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, - 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, - 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, - 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, - 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, - 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, - 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, - 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 +static const unsigned char FSb[256] = { + 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, + 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, + 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, + 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, + 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, + 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, + 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, + 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, + 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, + 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, + 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, + 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, + 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, + 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, + 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, + 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 }; -static const unsigned char FSb2[256] = -{ - 224, 5, 88, 217, 103, 78, 129, 203, 201, 11, 174, 106, 213, 24, 93, 130, - 70, 223, 214, 39, 138, 50, 75, 66, 219, 28, 158, 156, 58, 202, 37, 123, - 13, 113, 95, 31, 248, 215, 62, 157, 124, 96, 185, 190, 188, 139, 22, 52, - 77, 195, 114, 149, 171, 142, 186, 122, 179, 2, 180, 173, 162, 172, 216, 154, - 23, 26, 53, 204, 247, 153, 97, 90, 232, 36, 86, 64, 225, 99, 9, 51, - 191, 152, 151, 133, 104, 252, 236, 10, 218, 111, 83, 98, 163, 46, 8, 175, - 40, 176, 116, 194, 189, 54, 34, 56, 100, 30, 57, 44, 166, 48, 229, 68, - 253, 136, 159, 101, 135, 107, 244, 35, 72, 16, 209, 81, 192, 249, 210, 160, - 85, 161, 65, 250, 67, 19, 196, 47, 168, 182, 60, 43, 193, 255, 200, 165, - 32, 137, 0, 144, 71, 239, 234, 183, 21, 6, 205, 181, 18, 126, 187, 41, - 15, 184, 7, 4, 155, 148, 33, 102, 230, 206, 237, 231, 59, 254, 127, 197, - 164, 55, 177, 76, 145, 110, 141, 118, 3, 45, 222, 150, 38, 125, 198, 92, - 211, 242, 79, 25, 63, 220, 121, 29, 82, 235, 243, 109, 94, 251, 105, 178, - 240, 49, 12, 212, 207, 140, 226, 117, 169, 74, 87, 132, 17, 69, 27, 245, - 228, 14, 115, 170, 241, 221, 89, 20, 108, 146, 84, 208, 120, 112, 227, 73, - 128, 80, 167, 246, 119, 147, 134, 131, 42, 199, 91, 233, 238, 143, 1, 61 +static const unsigned char FSb2[256] = { + 224, 5, 88, 217, 103, 78, 129, 203, 201, 11, 174, 106, 213, 24, 93, 130, + 70, 223, 214, 39, 138, 50, 75, 66, 219, 28, 158, 156, 58, 202, 37, 123, + 13, 113, 95, 31, 248, 215, 62, 157, 124, 96, 185, 190, 188, 139, 22, 52, + 77, 195, 114, 149, 171, 142, 186, 122, 179, 2, 180, 173, 162, 172, 216, 154, + 23, 26, 53, 204, 247, 153, 97, 90, 232, 36, 86, 64, 225, 99, 9, 51, + 191, 152, 151, 133, 104, 252, 236, 10, 218, 111, 83, 98, 163, 46, 8, 175, + 40, 176, 116, 194, 189, 54, 34, 56, 100, 30, 57, 44, 166, 48, 229, 68, + 253, 136, 159, 101, 135, 107, 244, 35, 72, 16, 209, 81, 192, 249, 210, 160, + 85, 161, 65, 250, 67, 19, 196, 47, 168, 182, 60, 43, 193, 255, 200, 165, + 32, 137, 0, 144, 71, 239, 234, 183, 21, 6, 205, 181, 18, 126, 187, 41, + 15, 184, 7, 4, 155, 148, 33, 102, 230, 206, 237, 231, 59, 254, 127, 197, + 164, 55, 177, 76, 145, 110, 141, 118, 3, 45, 222, 150, 38, 125, 198, 92, + 211, 242, 79, 25, 63, 220, 121, 29, 82, 235, 243, 109, 94, 251, 105, 178, + 240, 49, 12, 212, 207, 140, 226, 117, 169, 74, 87, 132, 17, 69, 27, 245, + 228, 14, 115, 170, 241, 221, 89, 20, 108, 146, 84, 208, 120, 112, 227, 73, + 128, 80, 167, 246, 119, 147, 134, 131, 42, 199, 91, 233, 238, 143, 1, 61 }; -static const unsigned char FSb3[256] = -{ - 56, 65, 22, 118, 217, 147, 96, 242, 114, 194, 171, 154, 117, 6, 87, 160, - 145, 247, 181, 201, 162, 140, 210, 144, 246, 7, 167, 39, 142, 178, 73, 222, - 67, 92, 215, 199, 62, 245, 143, 103, 31, 24, 110, 175, 47, 226, 133, 13, - 83, 240, 156, 101, 234, 163, 174, 158, 236, 128, 45, 107, 168, 43, 54, 166, - 197, 134, 77, 51, 253, 102, 88, 150, 58, 9, 149, 16, 120, 216, 66, 204, - 239, 38, 229, 97, 26, 63, 59, 130, 182, 219, 212, 152, 232, 139, 2, 235, - 10, 44, 29, 176, 111, 141, 136, 14, 25, 135, 78, 11, 169, 12, 121, 17, - 127, 34, 231, 89, 225, 218, 61, 200, 18, 4, 116, 84, 48, 126, 180, 40, - 85, 104, 80, 190, 208, 196, 49, 203, 42, 173, 15, 202, 112, 255, 50, 105, - 8, 98, 0, 36, 209, 251, 186, 237, 69, 129, 115, 109, 132, 159, 238, 74, - 195, 46, 193, 1, 230, 37, 72, 153, 185, 179, 123, 249, 206, 191, 223, 113, - 41, 205, 108, 19, 100, 155, 99, 157, 192, 75, 183, 165, 137, 95, 177, 23, - 244, 188, 211, 70, 207, 55, 94, 71, 148, 250, 252, 91, 151, 254, 90, 172, - 60, 76, 3, 53, 243, 35, 184, 93, 106, 146, 213, 33, 68, 81, 198, 125, - 57, 131, 220, 170, 124, 119, 86, 5, 27, 164, 21, 52, 30, 28, 248, 82, - 32, 20, 233, 189, 221, 228, 161, 224, 138, 241, 214, 122, 187, 227, 64, 79 +static const unsigned char FSb3[256] = { + 56, 65, 22, 118, 217, 147, 96, 242, 114, 194, 171, 154, 117, 6, 87, 160, + 145, 247, 181, 201, 162, 140, 210, 144, 246, 7, 167, 39, 142, 178, 73, 222, + 67, 92, 215, 199, 62, 245, 143, 103, 31, 24, 110, 175, 47, 226, 133, 13, + 83, 240, 156, 101, 234, 163, 174, 158, 236, 128, 45, 107, 168, 43, 54, 166, + 197, 134, 77, 51, 253, 102, 88, 150, 58, 9, 149, 16, 120, 216, 66, 204, + 239, 38, 229, 97, 26, 63, 59, 130, 182, 219, 212, 152, 232, 139, 2, 235, + 10, 44, 29, 176, 111, 141, 136, 14, 25, 135, 78, 11, 169, 12, 121, 17, + 127, 34, 231, 89, 225, 218, 61, 200, 18, 4, 116, 84, 48, 126, 180, 40, + 85, 104, 80, 190, 208, 196, 49, 203, 42, 173, 15, 202, 112, 255, 50, 105, + 8, 98, 0, 36, 209, 251, 186, 237, 69, 129, 115, 109, 132, 159, 238, 74, + 195, 46, 193, 1, 230, 37, 72, 153, 185, 179, 123, 249, 206, 191, 223, 113, + 41, 205, 108, 19, 100, 155, 99, 157, 192, 75, 183, 165, 137, 95, 177, 23, + 244, 188, 211, 70, 207, 55, 94, 71, 148, 250, 252, 91, 151, 254, 90, 172, + 60, 76, 3, 53, 243, 35, 184, 93, 106, 146, 213, 33, 68, 81, 198, 125, + 57, 131, 220, 170, 124, 119, 86, 5, 27, 164, 21, 52, 30, 28, 248, 82, + 32, 20, 233, 189, 221, 228, 161, 224, 138, 241, 214, 122, 187, 227, 64, 79 }; -static const unsigned char FSb4[256] = -{ - 112, 44, 179, 192, 228, 87, 234, 174, 35, 107, 69, 165, 237, 79, 29, 146, - 134, 175, 124, 31, 62, 220, 94, 11, 166, 57, 213, 93, 217, 90, 81, 108, - 139, 154, 251, 176, 116, 43, 240, 132, 223, 203, 52, 118, 109, 169, 209, 4, - 20, 58, 222, 17, 50, 156, 83, 242, 254, 207, 195, 122, 36, 232, 96, 105, - 170, 160, 161, 98, 84, 30, 224, 100, 16, 0, 163, 117, 138, 230, 9, 221, - 135, 131, 205, 144, 115, 246, 157, 191, 82, 216, 200, 198, 129, 111, 19, 99, - 233, 167, 159, 188, 41, 249, 47, 180, 120, 6, 231, 113, 212, 171, 136, 141, - 114, 185, 248, 172, 54, 42, 60, 241, 64, 211, 187, 67, 21, 173, 119, 128, - 130, 236, 39, 229, 133, 53, 12, 65, 239, 147, 25, 33, 14, 78, 101, 189, - 184, 143, 235, 206, 48, 95, 197, 26, 225, 202, 71, 61, 1, 214, 86, 77, - 13, 102, 204, 45, 18, 32, 177, 153, 76, 194, 126, 5, 183, 49, 23, 215, - 88, 97, 27, 28, 15, 22, 24, 34, 68, 178, 181, 145, 8, 168, 252, 80, - 208, 125, 137, 151, 91, 149, 255, 210, 196, 72, 247, 219, 3, 218, 63, 148, - 92, 2, 74, 51, 103, 243, 127, 226, 155, 38, 55, 59, 150, 75, 190, 46, - 121, 140, 110, 142, 245, 182, 253, 89, 152, 106, 70, 186, 37, 66, 162, 250, - 7, 85, 238, 10, 73, 104, 56, 164, 40, 123, 201, 193, 227, 244, 199, 158 +static const unsigned char FSb4[256] = { + 112, 44, 179, 192, 228, 87, 234, 174, 35, 107, 69, 165, 237, 79, 29, 146, + 134, 175, 124, 31, 62, 220, 94, 11, 166, 57, 213, 93, 217, 90, 81, 108, + 139, 154, 251, 176, 116, 43, 240, 132, 223, 203, 52, 118, 109, 169, 209, 4, + 20, 58, 222, 17, 50, 156, 83, 242, 254, 207, 195, 122, 36, 232, 96, 105, + 170, 160, 161, 98, 84, 30, 224, 100, 16, 0, 163, 117, 138, 230, 9, 221, + 135, 131, 205, 144, 115, 246, 157, 191, 82, 216, 200, 198, 129, 111, 19, 99, + 233, 167, 159, 188, 41, 249, 47, 180, 120, 6, 231, 113, 212, 171, 136, 141, + 114, 185, 248, 172, 54, 42, 60, 241, 64, 211, 187, 67, 21, 173, 119, 128, + 130, 236, 39, 229, 133, 53, 12, 65, 239, 147, 25, 33, 14, 78, 101, 189, + 184, 143, 235, 206, 48, 95, 197, 26, 225, 202, 71, 61, 1, 214, 86, 77, + 13, 102, 204, 45, 18, 32, 177, 153, 76, 194, 126, 5, 183, 49, 23, 215, + 88, 97, 27, 28, 15, 22, 24, 34, 68, 178, 181, 145, 8, 168, 252, 80, + 208, 125, 137, 151, 91, 149, 255, 210, 196, 72, 247, 219, 3, 218, 63, 148, + 92, 2, 74, 51, 103, 243, 127, 226, 155, 38, 55, 59, 150, 75, 190, 46, + 121, 140, 110, 142, 245, 182, 253, 89, 152, 106, 70, 186, 37, 66, 162, 250, + 7, 85, 238, 10, 73, 104, 56, 164, 40, 123, 201, 193, 227, 244, 199, 158 }; #define SBOX1(n) FSb[(n)] @@ -202,8 +198,7 @@ static const unsigned char FSb4[256] = #endif /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ -static const unsigned char shifts[2][4][4] = -{ +static const unsigned char shifts[2][4][4] = { { { 1, 1, 1, 1 }, /* KL */ { 0, 0, 0, 0 }, /* KR */ @@ -218,32 +213,46 @@ static const unsigned char shifts[2][4][4] = } }; -static const signed char indexes[2][4][20] = -{ +static const signed char indexes[2][4][20] = { { - { 0, 1, 2, 3, 8, 9, 10, 11, 38, 39, - 36, 37, 23, 20, 21, 22, 27, -1, -1, 26 }, /* KL -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, /* KR -> RK */ - { 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, - 18, 19, -1, 24, 25, -1, 31, 28, 29, 30 }, /* KA -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } /* KB -> RK */ + { + 0, 1, 2, 3, 8, 9, 10, 11, 38, 39, + 36, 37, 23, 20, 21, 22, 27, -1, -1, 26 + }, /* KL -> RK */ + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }, /* KR -> RK */ + { + 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, + 18, 19, -1, 24, 25, -1, 31, 28, 29, 30 + }, /* KA -> RK */ + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + } /* KB -> RK */ }, { - { 0, 1, 2, 3, 61, 62, 63, 60, -1, -1, - -1, -1, 27, 24, 25, 26, 35, 32, 33, 34 }, /* KL -> RK */ - { -1, -1, -1, -1, 8, 9, 10, 11, 16, 17, - 18, 19, -1, -1, -1, -1, 39, 36, 37, 38 }, /* KR -> RK */ - { -1, -1, -1, -1, 12, 13, 14, 15, 58, 59, - 56, 57, 31, 28, 29, 30, -1, -1, -1, -1 }, /* KA -> RK */ - { 4, 5, 6, 7, 65, 66, 67, 64, 20, 21, - 22, 23, -1, -1, -1, -1, 43, 40, 41, 42 } /* KB -> RK */ + { + 0, 1, 2, 3, 61, 62, 63, 60, -1, -1, + -1, -1, 27, 24, 25, 26, 35, 32, 33, 34 + }, /* KL -> RK */ + { + -1, -1, -1, -1, 8, 9, 10, 11, 16, 17, + 18, 19, -1, -1, -1, -1, 39, 36, 37, 38 + }, /* KR -> RK */ + { + -1, -1, -1, -1, 12, 13, 14, 15, 58, 59, + 56, 57, 31, 28, 29, 30, -1, -1, -1, -1 + }, /* KA -> RK */ + { + 4, 5, 6, 7, 65, 66, 67, 64, 20, 21, + 22, 23, -1, -1, -1, -1, 43, 40, 41, 42 + } /* KB -> RK */ } }; -static const signed char transposes[2][20] = -{ +static const signed char transposes[2][20] = { { 21, 22, 23, 20, -1, -1, -1, -1, @@ -330,7 +339,7 @@ void mbedtls_camellia_init( mbedtls_camellia_context *ctx ) void mbedtls_camellia_free( mbedtls_camellia_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_camellia_context ) ); @@ -340,7 +349,7 @@ void mbedtls_camellia_free( mbedtls_camellia_context *ctx ) * Camellia key schedule (encryption) */ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int idx; size_t i; @@ -355,26 +364,32 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c memset( t, 0, 64 ); memset( RK, 0, sizeof(ctx->rk) ); - switch( keybits ) - { - case 128: ctx->nr = 3; idx = 0; break; + switch ( keybits ) { + case 128: + ctx->nr = 3; + idx = 0; + break; case 192: - case 256: ctx->nr = 4; idx = 1; break; - default : return( MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH ); + case 256: + ctx->nr = 4; + idx = 1; + break; + default : + return ( MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH ); } - for( i = 0; i < keybits / 8; ++i ) + for ( i = 0; i < keybits / 8; ++i ) t[i] = key[i]; - if( keybits == 192 ) { - for( i = 0; i < 8; i++ ) + if ( keybits == 192 ) { + for ( i = 0; i < 8; i++ ) t[24 + i] = ~t[16 + i]; } /* * Prepare SIGMA values */ - for( i = 0; i < 6; i++ ) { + for ( i = 0; i < 6; i++ ) { GET_UINT32_BE( SIGMA[i][0], SIGMA_CHARS[i], 0 ); GET_UINT32_BE( SIGMA[i][1], SIGMA_CHARS[i], 4 ); } @@ -386,25 +401,25 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c memset( KC, 0, sizeof(KC) ); /* Store KL, KR */ - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) GET_UINT32_BE( KC[i], t, i * 4 ); /* Generate KA */ - for( i = 0; i < 4; ++i ) + for ( i = 0; i < 4; ++i ) KC[8 + i] = KC[i] ^ KC[4 + i]; camellia_feistel( KC + 8, SIGMA[0], KC + 10 ); camellia_feistel( KC + 10, SIGMA[1], KC + 8 ); - for( i = 0; i < 4; ++i ) + for ( i = 0; i < 4; ++i ) KC[8 + i] ^= KC[i]; camellia_feistel( KC + 8, SIGMA[2], KC + 10 ); camellia_feistel( KC + 10, SIGMA[3], KC + 8 ); - if( keybits > 128 ) { + if ( keybits > 128 ) { /* Generate KB */ - for( i = 0; i < 4; ++i ) + for ( i = 0; i < 4; ++i ) KC[12 + i] = KC[4 + i] ^ KC[8 + i]; camellia_feistel( KC + 12, SIGMA[4], KC + 14 ); @@ -419,7 +434,7 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c SHIFT_AND_PLACE( idx, 0 ); /* Manipulating KR */ - if( keybits > 128 ) { + if ( keybits > 128 ) { SHIFT_AND_PLACE( idx, 1 ); } @@ -427,25 +442,25 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c SHIFT_AND_PLACE( idx, 2 ); /* Manipulating KB */ - if( keybits > 128 ) { + if ( keybits > 128 ) { SHIFT_AND_PLACE( idx, 3 ); } /* Do transpositions */ - for( i = 0; i < 20; i++ ) { - if( transposes[idx][i] != -1 ) { + for ( i = 0; i < 20; i++ ) { + if ( transposes[idx][i] != -1 ) { RK[32 + 12 * idx + i] = RK[transposes[idx][i]]; } } - return( 0 ); + return ( 0 ); } /* * Camellia key schedule (decryption) */ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int idx, ret; size_t i; @@ -456,7 +471,7 @@ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned c mbedtls_camellia_init( &cty ); /* Also checks keybits */ - if( ( ret = mbedtls_camellia_setkey_enc( &cty, key, keybits ) ) != 0 ) + if ( ( ret = mbedtls_camellia_setkey_enc( &cty, key, keybits ) ) != 0 ) goto exit; ctx->nr = cty.nr; @@ -470,8 +485,7 @@ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned c *RK++ = *SK++; *RK++ = *SK++; - for( i = 22 + 8 * idx, SK -= 6; i > 0; i--, SK -= 4 ) - { + for ( i = 22 + 8 * idx, SK -= 6; i > 0; i--, SK -= 4 ) { *RK++ = *SK++; *RK++ = *SK++; } @@ -486,16 +500,16 @@ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned c exit: mbedtls_camellia_free( &cty ); - return( ret ); + return ( ret ); } /* * Camellia-ECB block encryption/decryption */ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { int NR; uint32_t *RK, X[4]; @@ -515,7 +529,7 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, X[2] ^= *RK++; X[3] ^= *RK++; - while( NR ) { + while ( NR ) { --NR; camellia_feistel( X, RK, X + 2 ); RK += 2; @@ -530,7 +544,7 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, camellia_feistel( X + 2, RK, X ); RK += 2; - if( NR ) { + if ( NR ) { FL(X[0], X[1], RK[0], RK[1]); RK += 2; FLInv(X[2], X[3], RK[0], RK[1]); @@ -548,7 +562,7 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, PUT_UINT32_BE( X[0], output, 8 ); PUT_UINT32_BE( X[1], output, 12 ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -556,26 +570,24 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, * Camellia-CBC buffer encryption/decryption */ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; - if( length % 16 ) - return( MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH ); + if ( length % 16 ) + return ( MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_CAMELLIA_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_CAMELLIA_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 16 ); mbedtls_camellia_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 16 ); @@ -584,12 +596,9 @@ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, output += 16; length -= 16; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_camellia_crypt_ecb( ctx, mode, output, output ); @@ -601,7 +610,7 @@ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -610,21 +619,19 @@ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, * Camellia-CFB128 buffer encryption/decryption */ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int c; size_t n = *iv_off; - if( mode == MBEDTLS_CAMELLIA_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) + if ( mode == MBEDTLS_CAMELLIA_DECRYPT ) { + while ( length-- ) { + if ( n == 0 ) mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, iv, iv ); c = *input++; @@ -633,12 +640,9 @@ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, n = ( n + 1 ) & 0x0F; } - } - else - { - while( length-- ) - { - if( n == 0 ) + } else { + while ( length-- ) { + if ( n == 0 ) mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, iv, iv ); iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); @@ -649,7 +653,7 @@ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, *iv_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ @@ -658,24 +662,23 @@ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, * Camellia-CTR buffer encryption/decryption */ int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ) { int c, i; size_t n = *nc_off; - while( length-- ) - { - if( n == 0 ) { + while ( length-- ) { + if ( n == 0 ) { mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, nonce_counter, - stream_block ); + stream_block ); - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) + for ( i = 16; i > 0; i-- ) + if ( ++nonce_counter[i - 1] != 0 ) break; } c = *input++; @@ -686,7 +689,7 @@ int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, *nc_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ #endif /* !MBEDTLS_CAMELLIA_ALT */ @@ -703,124 +706,178 @@ int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, */ #define CAMELLIA_TESTS_ECB 2 -static const unsigned char camellia_test_ecb_key[3][CAMELLIA_TESTS_ECB][32] = -{ +static const unsigned char camellia_test_ecb_key[3][CAMELLIA_TESTS_ECB][32] = { { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }, { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }, { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }, }; -static const unsigned char camellia_test_ecb_plain[CAMELLIA_TESTS_ECB][16] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } +static const unsigned char camellia_test_ecb_plain[CAMELLIA_TESTS_ECB][16] = { + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }; -static const unsigned char camellia_test_ecb_cipher[3][CAMELLIA_TESTS_ECB][16] = -{ +static const unsigned char camellia_test_ecb_cipher[3][CAMELLIA_TESTS_ECB][16] = { { - { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, - 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 }, - { 0x38, 0x3C, 0x6C, 0x2A, 0xAB, 0xEF, 0x7F, 0xDE, - 0x25, 0xCD, 0x47, 0x0B, 0xF7, 0x74, 0xA3, 0x31 } + { + 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, + 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 + }, + { + 0x38, 0x3C, 0x6C, 0x2A, 0xAB, 0xEF, 0x7F, 0xDE, + 0x25, 0xCD, 0x47, 0x0B, 0xF7, 0x74, 0xA3, 0x31 + } }, { - { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, - 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 }, - { 0xD1, 0x76, 0x3F, 0xC0, 0x19, 0xD7, 0x7C, 0xC9, - 0x30, 0xBF, 0xF2, 0xA5, 0x6F, 0x7C, 0x93, 0x64 } + { + 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, + 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 + }, + { + 0xD1, 0x76, 0x3F, 0xC0, 0x19, 0xD7, 0x7C, 0xC9, + 0x30, 0xBF, 0xF2, 0xA5, 0x6F, 0x7C, 0x93, 0x64 + } }, { - { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, - 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 }, - { 0x05, 0x03, 0xFB, 0x10, 0xAB, 0x24, 0x1E, 0x7C, - 0xF4, 0x5D, 0x8C, 0xDE, 0xEE, 0x47, 0x43, 0x35 } + { + 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, + 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 + }, + { + 0x05, 0x03, 0xFB, 0x10, 0xAB, 0x24, 0x1E, 0x7C, + 0xF4, 0x5D, 0x8C, 0xDE, 0xEE, 0x47, 0x43, 0x35 + } } }; #if defined(MBEDTLS_CIPHER_MODE_CBC) #define CAMELLIA_TESTS_CBC 3 -static const unsigned char camellia_test_cbc_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C } +static const unsigned char camellia_test_cbc_key[3][32] = { + { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + } , - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B } + { + 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, + 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, + 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B + } , - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } + { + 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, + 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, + 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, + 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 + } }; static const unsigned char camellia_test_cbc_iv[16] = - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F } +{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F +} ; -static const unsigned char camellia_test_cbc_plain[CAMELLIA_TESTS_CBC][16] = -{ - { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A }, - { 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51 }, - { 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF } +static const unsigned char camellia_test_cbc_plain[CAMELLIA_TESTS_CBC][16] = { + { + 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, + 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A + }, + { + 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, + 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51 + }, + { + 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, + 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF + } }; -static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = -{ +static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = { { - { 0x16, 0x07, 0xCF, 0x49, 0x4B, 0x36, 0xBB, 0xF0, - 0x0D, 0xAE, 0xB0, 0xB5, 0x03, 0xC8, 0x31, 0xAB }, - { 0xA2, 0xF2, 0xCF, 0x67, 0x16, 0x29, 0xEF, 0x78, - 0x40, 0xC5, 0xA5, 0xDF, 0xB5, 0x07, 0x48, 0x87 }, - { 0x0F, 0x06, 0x16, 0x50, 0x08, 0xCF, 0x8B, 0x8B, - 0x5A, 0x63, 0x58, 0x63, 0x62, 0x54, 0x3E, 0x54 } + { + 0x16, 0x07, 0xCF, 0x49, 0x4B, 0x36, 0xBB, 0xF0, + 0x0D, 0xAE, 0xB0, 0xB5, 0x03, 0xC8, 0x31, 0xAB + }, + { + 0xA2, 0xF2, 0xCF, 0x67, 0x16, 0x29, 0xEF, 0x78, + 0x40, 0xC5, 0xA5, 0xDF, 0xB5, 0x07, 0x48, 0x87 + }, + { + 0x0F, 0x06, 0x16, 0x50, 0x08, 0xCF, 0x8B, 0x8B, + 0x5A, 0x63, 0x58, 0x63, 0x62, 0x54, 0x3E, 0x54 + } }, { - { 0x2A, 0x48, 0x30, 0xAB, 0x5A, 0xC4, 0xA1, 0xA2, - 0x40, 0x59, 0x55, 0xFD, 0x21, 0x95, 0xCF, 0x93 }, - { 0x5D, 0x5A, 0x86, 0x9B, 0xD1, 0x4C, 0xE5, 0x42, - 0x64, 0xF8, 0x92, 0xA6, 0xDD, 0x2E, 0xC3, 0xD5 }, - { 0x37, 0xD3, 0x59, 0xC3, 0x34, 0x98, 0x36, 0xD8, - 0x84, 0xE3, 0x10, 0xAD, 0xDF, 0x68, 0xC4, 0x49 } + { + 0x2A, 0x48, 0x30, 0xAB, 0x5A, 0xC4, 0xA1, 0xA2, + 0x40, 0x59, 0x55, 0xFD, 0x21, 0x95, 0xCF, 0x93 + }, + { + 0x5D, 0x5A, 0x86, 0x9B, 0xD1, 0x4C, 0xE5, 0x42, + 0x64, 0xF8, 0x92, 0xA6, 0xDD, 0x2E, 0xC3, 0xD5 + }, + { + 0x37, 0xD3, 0x59, 0xC3, 0x34, 0x98, 0x36, 0xD8, + 0x84, 0xE3, 0x10, 0xAD, 0xDF, 0x68, 0xC4, 0x49 + } }, { - { 0xE6, 0xCF, 0xA3, 0x5F, 0xC0, 0x2B, 0x13, 0x4A, - 0x4D, 0x2C, 0x0B, 0x67, 0x37, 0xAC, 0x3E, 0xDA }, - { 0x36, 0xCB, 0xEB, 0x73, 0xBD, 0x50, 0x4B, 0x40, - 0x70, 0xB1, 0xB7, 0xDE, 0x2B, 0x21, 0xEB, 0x50 }, - { 0xE3, 0x1A, 0x60, 0x55, 0x29, 0x7D, 0x96, 0xCA, - 0x33, 0x30, 0xCD, 0xF1, 0xB1, 0x86, 0x0A, 0x83 } + { + 0xE6, 0xCF, 0xA3, 0x5F, 0xC0, 0x2B, 0x13, 0x4A, + 0x4D, 0x2C, 0x0B, 0x67, 0x37, 0xAC, 0x3E, 0xDA + }, + { + 0x36, 0xCB, 0xEB, 0x73, 0xBD, 0x50, 0x4B, 0x40, + 0x70, 0xB1, 0xB7, 0xDE, 0x2B, 0x21, 0xEB, 0x50 + }, + { + 0xE3, 0x1A, 0x60, 0x55, 0x29, 0x7D, 0x96, 0xCA, + 0x33, 0x30, 0xCD, 0xF1, 0xB1, 0x86, 0x0A, 0x83 + } } }; #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -832,60 +889,80 @@ static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = * http://www.faqs.org/rfcs/rfc5528.html */ -static const unsigned char camellia_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } +static const unsigned char camellia_test_ctr_key[3][16] = { + { + 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, + 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E + }, + { + 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, + 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 + }, + { + 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, + 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC + } }; -static const unsigned char camellia_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } +static const unsigned char camellia_test_ctr_nonce_counter[3][16] = { + { + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, + 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, + 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 + } }; -static const unsigned char camellia_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, +static const unsigned char camellia_test_ctr_pt[3][48] = { + { + 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, + 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 + }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F + }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23 + } }; -static const unsigned char camellia_test_ctr_ct[3][48] = -{ - { 0xD0, 0x9D, 0xC2, 0x9A, 0x82, 0x14, 0x61, 0x9A, - 0x20, 0x87, 0x7C, 0x76, 0xDB, 0x1F, 0x0B, 0x3F }, - { 0xDB, 0xF3, 0xC7, 0x8D, 0xC0, 0x83, 0x96, 0xD4, - 0xDA, 0x7C, 0x90, 0x77, 0x65, 0xBB, 0xCB, 0x44, - 0x2B, 0x8E, 0x8E, 0x0F, 0x31, 0xF0, 0xDC, 0xA7, - 0x2C, 0x74, 0x17, 0xE3, 0x53, 0x60, 0xE0, 0x48 }, - { 0xB1, 0x9D, 0x1F, 0xCD, 0xCB, 0x75, 0xEB, 0x88, - 0x2F, 0x84, 0x9C, 0xE2, 0x4D, 0x85, 0xCF, 0x73, - 0x9C, 0xE6, 0x4B, 0x2B, 0x5C, 0x9D, 0x73, 0xF1, - 0x4F, 0x2D, 0x5D, 0x9D, 0xCE, 0x98, 0x89, 0xCD, - 0xDF, 0x50, 0x86, 0x96 } +static const unsigned char camellia_test_ctr_ct[3][48] = { + { + 0xD0, 0x9D, 0xC2, 0x9A, 0x82, 0x14, 0x61, 0x9A, + 0x20, 0x87, 0x7C, 0x76, 0xDB, 0x1F, 0x0B, 0x3F + }, + { + 0xDB, 0xF3, 0xC7, 0x8D, 0xC0, 0x83, 0x96, 0xD4, + 0xDA, 0x7C, 0x90, 0x77, 0x65, 0xBB, 0xCB, 0x44, + 0x2B, 0x8E, 0x8E, 0x0F, 0x31, 0xF0, 0xDC, 0xA7, + 0x2C, 0x74, 0x17, 0xE3, 0x53, 0x60, 0xE0, 0x48 + }, + { + 0xB1, 0x9D, 0x1F, 0xCD, 0xCB, 0x75, 0xEB, 0x88, + 0x2F, 0x84, 0x9C, 0xE2, 0x4D, 0x85, 0xCF, 0x73, + 0x9C, 0xE6, 0x4B, 0x2B, 0x5C, 0x9D, 0x73, 0xF1, + 0x4F, 0x2D, 0x5D, 0x9D, 0xCE, 0x98, 0x89, 0xCD, + 0xDF, 0x50, 0x86, 0x96 + } }; static const int camellia_test_ctr_len[3] = - { 16, 32, 36 }; +{ 16, 32, 36 }; #endif /* MBEDTLS_CIPHER_MODE_CTR */ /* @@ -911,111 +988,107 @@ int mbedtls_camellia_self_test( int verbose ) memset( key, 0, 32 ); - for( j = 0; j < 6; j++ ) { + for ( j = 0; j < 6; j++ ) { u = j >> 1; - v = j & 1; + v = j & 1; - if( verbose != 0 ) - mbedtls_printf( " CAMELLIA-ECB-%3d (%s): ", 128 + u * 64, - (v == MBEDTLS_CAMELLIA_DECRYPT) ? "dec" : "enc"); + if ( verbose != 0 ) + mbedtls_printf( " CAMELLIA-ECB-%3d (%s): ", 128 + u * 64, + (v == MBEDTLS_CAMELLIA_DECRYPT) ? "dec" : "enc"); - for( i = 0; i < CAMELLIA_TESTS_ECB; i++ ) { - memcpy( key, camellia_test_ecb_key[u][i], 16 + 8 * u ); + for ( i = 0; i < CAMELLIA_TESTS_ECB; i++ ) { + memcpy( key, camellia_test_ecb_key[u][i], 16 + 8 * u ); - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_cipher[u][i], 16 ); - memcpy( dst, camellia_test_ecb_plain[i], 16 ); - } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ - mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_plain[i], 16 ); - memcpy( dst, camellia_test_ecb_cipher[u][i], 16 ); + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { + mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); + memcpy( src, camellia_test_ecb_cipher[u][i], 16 ); + memcpy( dst, camellia_test_ecb_plain[i], 16 ); + } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ + mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); + memcpy( src, camellia_test_ecb_plain[i], 16 ); + memcpy( dst, camellia_test_ecb_cipher[u][i], 16 ); + } + + mbedtls_camellia_crypt_ecb( &ctx, v, src, buf ); + + if ( memcmp( buf, dst, 16 ) != 0 ) { + if ( verbose != 0 ) + mbedtls_printf( "failed\n" ); + + return ( 1 ); + } } - mbedtls_camellia_crypt_ecb( &ctx, v, src, buf ); - - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); - - return( 1 ); - } + if ( verbose != 0 ) + mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); - } - - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CBC) /* * CBC mode */ - for( j = 0; j < 6; j++ ) - { + for ( j = 0; j < 6; j++ ) { u = j >> 1; v = j & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CAMELLIA-CBC-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); memcpy( src, camellia_test_cbc_iv, 16 ); memcpy( dst, camellia_test_cbc_iv, 16 ); memcpy( key, camellia_test_cbc_key[u], 16 + 8 * u ); - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); } else { mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); } - for( i = 0; i < CAMELLIA_TESTS_CBC; i++ ) { + for ( i = 0; i < CAMELLIA_TESTS_CBC; i++ ) { - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - memcpy( iv , src, 16 ); + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { + memcpy( iv, src, 16 ); memcpy( src, camellia_test_cbc_cipher[u][i], 16 ); memcpy( dst, camellia_test_cbc_plain[i], 16 ); } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ - memcpy( iv , dst, 16 ); + memcpy( iv, dst, 16 ); memcpy( src, camellia_test_cbc_plain[i], 16 ); memcpy( dst, camellia_test_cbc_cipher[u][i], 16 ); } mbedtls_camellia_crypt_cbc( &ctx, v, 16, iv, src, buf ); - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, dst, 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CTR) /* * CTR mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CAMELLIA-CTR-128 (%s): ", - ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); memcpy( nonce_counter, camellia_test_ctr_nonce_counter[u], 16 ); memcpy( key, camellia_test_ctr_key[u], 16 ); @@ -1023,48 +1096,43 @@ int mbedtls_camellia_self_test( int verbose ) offset = 0; mbedtls_camellia_setkey_enc( &ctx, key, 128 ); - if( v == MBEDTLS_CAMELLIA_DECRYPT ) - { + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { len = camellia_test_ctr_len[u]; memcpy( buf, camellia_test_ctr_ct[u], len ); mbedtls_camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, camellia_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, camellia_test_ctr_pt[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - } - else - { + } else { len = camellia_test_ctr_len[u]; memcpy( buf, camellia_test_ctr_pt[u], len ); mbedtls_camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, camellia_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, camellia_test_ctr_ct[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CTR */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ccm.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ccm.c index 13a8fd1a..5d0b985e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ccm.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ccm.c @@ -50,8 +50,10 @@ #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } #define CCM_ENCRYPT 0 @@ -74,24 +76,23 @@ int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx, const mbedtls_cipher_info_t *cipher_info; cipher_info = mbedtls_cipher_info_from_values( cipher, keybits, MBEDTLS_MODE_ECB ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); - if( cipher_info->block_size != 16 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( cipher_info->block_size != 16 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); mbedtls_cipher_free( &ctx->cipher_ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -155,15 +156,15 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, * Additional requirement: a < 2^16 - 2^8 to simplify the code. * 'length' checked later (when writing it to the first block) */ - if( tag_len < 4 || tag_len > 16 || tag_len % 2 != 0 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( tag_len < 4 || tag_len > 16 || tag_len % 2 != 0 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); /* Also implies q is within bounds */ - if( iv_len < 7 || iv_len > 13 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( iv_len < 7 || iv_len > 13 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); - if( add_len > 0xFF00 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( add_len > 0xFF00 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); q = 16 - 1 - (unsigned char) iv_len; @@ -186,11 +187,11 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, memcpy( b + 1, iv, iv_len ); - for( i = 0, len_left = length; i < q; i++, len_left >>= 8 ) - b[15-i] = (unsigned char)( len_left & 0xFF ); + for ( i = 0, len_left = length; i < q; i++, len_left >>= 8 ) + b[15 - i] = (unsigned char)( len_left & 0xFF ); - if( len_left > 0 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( len_left > 0 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); /* Start CBC-MAC with first block */ @@ -201,8 +202,7 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, * If there is additional data, update CBC-MAC with * add_len, add, 0 (padding to a block boundary) */ - if( add_len > 0 ) - { + if ( add_len > 0 ) { size_t use_len; len_left = add_len; src = add; @@ -218,8 +218,7 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, UPDATE_CBC_MAC; - while( len_left > 0 ) - { + while ( len_left > 0 ) { use_len = len_left > 16 ? 16 : len_left; memset( b, 0, 16 ); @@ -256,12 +255,10 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, src = input; dst = output; - while( len_left > 0 ) - { + while ( len_left > 0 ) { size_t use_len = len_left > 16 ? 16 : len_left; - if( mode == CCM_ENCRYPT ) - { + if ( mode == CCM_ENCRYPT ) { memset( b, 0, 16 ); memcpy( b, src, use_len ); UPDATE_CBC_MAC; @@ -269,8 +266,7 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, CTR_CRYPT( dst, src, use_len ); - if( mode == CCM_DECRYPT ) - { + if ( mode == CCM_DECRYPT ) { memset( b, 0, 16 ); memcpy( b, dst, use_len ); UPDATE_CBC_MAC; @@ -284,68 +280,66 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, * Increment counter. * No need to check for overflow thanks to the length check above. */ - for( i = 0; i < q; i++ ) - if( ++ctr[15-i] != 0 ) + for ( i = 0; i < q; i++ ) + if ( ++ctr[15 - i] != 0 ) break; } /* * Authentication: reset counter and crypt/mask internal tag */ - for( i = 0; i < q; i++ ) - ctr[15-i] = 0; + for ( i = 0; i < q; i++ ) + ctr[15 - i] = 0; CTR_CRYPT( y, y, 16 ); memcpy( tag, y, tag_len ); - return( 0 ); + return ( 0 ); } /* * Authenticated encryption */ int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *add, size_t add_len, + const unsigned char *input, unsigned char *output, + unsigned char *tag, size_t tag_len ) { - return( ccm_auth_crypt( ctx, CCM_ENCRYPT, length, iv, iv_len, - add, add_len, input, output, tag, tag_len ) ); + return ( ccm_auth_crypt( ctx, CCM_ENCRYPT, length, iv, iv_len, + add, add_len, input, output, tag, tag_len ) ); } /* * Authenticated decryption */ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - const unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *add, size_t add_len, + const unsigned char *input, unsigned char *output, + const unsigned char *tag, size_t tag_len ) { int ret; unsigned char check_tag[16]; unsigned char i; int diff; - if( ( ret = ccm_auth_crypt( ctx, CCM_DECRYPT, length, - iv, iv_len, add, add_len, - input, output, check_tag, tag_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = ccm_auth_crypt( ctx, CCM_DECRYPT, length, + iv, iv_len, add, add_len, + input, output, check_tag, tag_len ) ) != 0 ) { + return ( ret ); } /* Check tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) + for ( diff = 0, i = 0; i < tag_len; i++ ) diff |= tag[i] ^ check_tag[i]; - if( diff != 0 ) - { + if ( diff != 0 ) { mbedtls_zeroize( output, length ); - return( MBEDTLS_ERR_CCM_AUTH_FAILED ); + return ( MBEDTLS_ERR_CCM_AUTH_FAILED ); } - return( 0 ); + return ( 0 ); } @@ -388,13 +382,17 @@ static const size_t tag_len[NB_TESTS] = { 4, 6, 8 }; static const unsigned char res[NB_TESTS][32] = { { 0x71, 0x62, 0x01, 0x5b, 0x4d, 0xac, 0x25, 0x5d }, - { 0xd2, 0xa1, 0xf0, 0xe0, 0x51, 0xea, 0x5f, 0x62, + { + 0xd2, 0xa1, 0xf0, 0xe0, 0x51, 0xea, 0x5f, 0x62, 0x08, 0x1a, 0x77, 0x92, 0x07, 0x3d, 0x59, 0x3d, - 0x1f, 0xc6, 0x4f, 0xbf, 0xac, 0xcd }, - { 0xe3, 0xb2, 0x01, 0xa9, 0xf5, 0xb7, 0x1a, 0x7a, + 0x1f, 0xc6, 0x4f, 0xbf, 0xac, 0xcd + }, + { + 0xe3, 0xb2, 0x01, 0xa9, 0xf5, 0xb7, 0x1a, 0x7a, 0x9b, 0x1c, 0xea, 0xec, 0xcd, 0x97, 0xe7, 0x0b, 0x61, 0x76, 0xaa, 0xd9, 0xa4, 0x42, 0x8a, 0xa5, - 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 } + 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 + } }; int mbedtls_ccm_self_test( int verbose ) @@ -406,57 +404,53 @@ int mbedtls_ccm_self_test( int verbose ) mbedtls_ccm_init( &ctx ); - if( mbedtls_ccm_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, key, 8 * sizeof key ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_ccm_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, key, 8 * sizeof key ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( " CCM: setup failed" ); - return( 1 ); + return ( 1 ); } - for( i = 0; i < NB_TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < NB_TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " CCM-AES #%u: ", (unsigned int) i + 1 ); ret = mbedtls_ccm_encrypt_and_tag( &ctx, msg_len[i], - iv, iv_len[i], ad, add_len[i], - msg, out, - out + msg_len[i], tag_len[i] ); + iv, iv_len[i], ad, add_len[i], + msg, out, + out + msg_len[i], tag_len[i] ); - if( ret != 0 || - memcmp( out, res[i], msg_len[i] + tag_len[i] ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( out, res[i], msg_len[i] + tag_len[i] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } ret = mbedtls_ccm_auth_decrypt( &ctx, msg_len[i], - iv, iv_len[i], ad, add_len[i], - res[i], out, - res[i] + msg_len[i], tag_len[i] ); + iv, iv_len[i], ad, add_len[i], + res[i], out, + res[i] + msg_len[i], tag_len[i] ); - if( ret != 0 || - memcmp( out, msg, msg_len[i] ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( out, msg, msg_len[i] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } mbedtls_ccm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/certs.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/certs.c index ffe6bc98..7bfb5461 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/certs.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/certs.c @@ -49,63 +49,63 @@ const char mbedtls_test_ca_crt_ec[] = TEST_CA_CRT_EC; const char mbedtls_test_ca_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"Proc-Type: 4,ENCRYPTED\r\n" -"DEK-Info: DES-EDE3-CBC,307EAB469933D64E\r\n" -"\r\n" -"IxbrRmKcAzctJqPdTQLA4SWyBYYGYJVkYEna+F7Pa5t5Yg/gKADrFKcm6B72e7DG\r\n" -"ihExtZI648s0zdYw6qSJ74vrPSuWDe5qm93BqsfVH9svtCzWHW0pm1p0KTBCFfUq\r\n" -"UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb\r\n" -"a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm\r\n" -"-----END EC PRIVATE KEY-----\r\n"; + "-----BEGIN EC PRIVATE KEY-----\r\n" + "Proc-Type: 4,ENCRYPTED\r\n" + "DEK-Info: DES-EDE3-CBC,307EAB469933D64E\r\n" + "\r\n" + "IxbrRmKcAzctJqPdTQLA4SWyBYYGYJVkYEna+F7Pa5t5Yg/gKADrFKcm6B72e7DG\r\n" + "ihExtZI648s0zdYw6qSJ74vrPSuWDe5qm93BqsfVH9svtCzWHW0pm1p0KTBCFfUq\r\n" + "UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb\r\n" + "a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm\r\n" + "-----END EC PRIVATE KEY-----\r\n"; const char mbedtls_test_ca_pwd_ec[] = "PolarSSLTest"; const char mbedtls_test_srv_crt_ec[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" -"MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG\r\n" -"CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA\r\n" -"2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd\r\n" -"BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB\r\n" -"PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh\r\n" -"clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG\r\n" -"CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S\r\n" -"C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V\r\n" -"fGa5kHvHARBPc8YAIVIqDvHH1Q==\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" + "MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG\r\n" + "CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA\r\n" + "2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd\r\n" + "BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB\r\n" + "PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh\r\n" + "clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG\r\n" + "CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S\r\n" + "C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V\r\n" + "fGa5kHvHARBPc8YAIVIqDvHH1Q==\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_srv_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\r\n" -"AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\r\n" -"6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\r\n" -"-----END EC PRIVATE KEY-----\r\n"; + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\r\n" + "AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\r\n" + "6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\r\n" + "-----END EC PRIVATE KEY-----\r\n"; const char mbedtls_test_cli_crt_ec[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIICLDCCAbKgAwIBAgIBDTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" -"MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjBBMQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHzAdBgNVBAMTFlBvbGFyU1NMIFRlc3QgQ2xpZW50IDIw\r\n" -"WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARX5a6xc9/TrLuTuIH/Eq7u5lOszlVT\r\n" -"9jQOzC7jYyUL35ji81xgNpbA1RgUcOV/n9VLRRjlsGzVXPiWj4dwo+THo4GdMIGa\r\n" -"MAkGA1UdEwQCMAAwHQYDVR0OBBYEFHoAX4Zk/OBd5REQO7LmO8QmP8/iMG4GA1Ud\r\n" -"IwRnMGWAFJ1tICRJAT8ry3i1Gbx+JMnb+zZ8oUKkQDA+MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0GC\r\n" -"CQDBQ+J+YkPM6DAKBggqhkjOPQQDAgNoADBlAjBKZQ17IIOimbmoD/yN7o89u3BM\r\n" -"lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU\r\n" -"LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIICLDCCAbKgAwIBAgIBDTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" + "MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjBBMQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxHzAdBgNVBAMTFlBvbGFyU1NMIFRlc3QgQ2xpZW50IDIw\r\n" + "WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARX5a6xc9/TrLuTuIH/Eq7u5lOszlVT\r\n" + "9jQOzC7jYyUL35ji81xgNpbA1RgUcOV/n9VLRRjlsGzVXPiWj4dwo+THo4GdMIGa\r\n" + "MAkGA1UdEwQCMAAwHQYDVR0OBBYEFHoAX4Zk/OBd5REQO7LmO8QmP8/iMG4GA1Ud\r\n" + "IwRnMGWAFJ1tICRJAT8ry3i1Gbx+JMnb+zZ8oUKkQDA+MQswCQYDVQQGEwJOTDER\r\n" + "MA8GA1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0GC\r\n" + "CQDBQ+J+YkPM6DAKBggqhkjOPQQDAgNoADBlAjBKZQ17IIOimbmoD/yN7o89u3BM\r\n" + "lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU\r\n" + "LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_cli_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"MHcCAQEEIPb3hmTxZ3/mZI3vyk7p3U3wBf+WIop6hDhkFzJhmLcqoAoGCCqGSM49\r\n" -"AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW\r\n" -"wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==\r\n" -"-----END EC PRIVATE KEY-----\r\n"; + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIPb3hmTxZ3/mZI3vyk7p3U3wBf+WIop6hDhkFzJhmLcqoAoGCCqGSM49\r\n" + "AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW\r\n" + "wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==\r\n" + "-----END EC PRIVATE KEY-----\r\n"; const size_t mbedtls_test_ca_crt_ec_len = sizeof( mbedtls_test_ca_crt_ec ); const size_t mbedtls_test_ca_key_ec_len = sizeof( mbedtls_test_ca_key_ec ); @@ -144,140 +144,140 @@ const size_t mbedtls_test_cli_key_ec_len = sizeof( mbedtls_test_cli_key_ec ); const char mbedtls_test_ca_crt_rsa[] = TEST_CA_CRT_RSA; const char mbedtls_test_ca_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"Proc-Type: 4,ENCRYPTED\r\n" -"DEK-Info: DES-EDE3-CBC,A8A95B05D5B7206B\r\n" -"\r\n" -"9Qd9GeArejl1GDVh2lLV1bHt0cPtfbh5h/5zVpAVaFpqtSPMrElp50Rntn9et+JA\r\n" -"7VOyboR+Iy2t/HU4WvA687k3Bppe9GwKHjHhtl//8xFKwZr3Xb5yO5JUP8AUctQq\r\n" -"Nb8CLlZyuUC+52REAAthdWgsX+7dJO4yabzUcQ22Tp9JSD0hiL43BlkWYUNK3dAo\r\n" -"PZlmiptjnzVTjg1MxsBSydZinWOLBV8/JQgxSPo2yD4uEfig28qbvQ2wNIn0pnAb\r\n" -"GxnSAOazkongEGfvcjIIs+LZN9gXFhxcOh6kc4Q/c99B7QWETwLLkYgZ+z1a9VY9\r\n" -"gEU7CwCxYCD+h9hY6FPmsK0/lC4O7aeRKpYq00rPPxs6i7phiexg6ax6yTMmArQq\r\n" -"QmK3TAsJm8V/J5AWpLEV6jAFgRGymGGHnof0DXzVWZidrcZJWTNuGEX90nB3ee2w\r\n" -"PXJEFWKoD3K3aFcSLdHYr3mLGxP7H9ThQai9VsycxZKS5kwvBKQ//YMrmFfwPk8x\r\n" -"vTeY4KZMaUrveEel5tWZC94RSMKgxR6cyE1nBXyTQnDOGbfpNNgBKxyKbINWoOJU\r\n" -"WJZAwlsQn+QzCDwpri7+sV1mS3gBE6UY7aQmnmiiaC2V3Hbphxct/en5QsfDOt1X\r\n" -"JczSfpRWLlbPznZg8OQh/VgCMA58N5DjOzTIK7sJJ5r+94ZBTCpgAMbF588f0NTR\r\n" -"KCe4yrxGJR7X02M4nvD4IwOlpsQ8xQxZtOSgXv4LkxvdU9XJJKWZ/XNKJeWztxSe\r\n" -"Z1vdTc2YfsDBA2SEv33vxHx2g1vqtw8SjDRT2RaQSS0QuSaMJimdOX6mTOCBKk1J\r\n" -"9Q5mXTrER+/LnK0jEmXsBXWA5bqqVZIyahXSx4VYZ7l7w/PHiUDtDgyRhMMKi4n2\r\n" -"iQvQcWSQTjrpnlJbca1/DkpRt3YwrvJwdqb8asZU2VrNETh5x0QVefDRLFiVpif/\r\n" -"tUaeAe/P1F8OkS7OIZDs1SUbv/sD2vMbhNkUoCms3/PvNtdnvgL4F0zhaDpKCmlT\r\n" -"P8vx49E7v5CyRNmED9zZg4o3wmMqrQO93PtTug3Eu9oVx1zPQM1NVMyBa2+f29DL\r\n" -"1nuTCeXdo9+ni45xx+jAI4DCwrRdhJ9uzZyC6962H37H6D+5naNvClFR1s6li1Gb\r\n" -"nqPoiy/OBsEx9CaDGcqQBp5Wme/3XW+6z1ISOx+igwNTVCT14mHdBMbya0eIKft5\r\n" -"X+GnwtgEMyCYyyWuUct8g4RzErcY9+yW9Om5Hzpx4zOuW4NPZgPDTgK+t2RSL/Yq\r\n" -"rE1njrgeGYcVeG3f+OftH4s6fPbq7t1A5ZgUscbLMBqr9tK+OqygR4EgKBPsH6Cz\r\n" -"L6zlv/2RV0qAHvVuDJcIDIgwY5rJtINEm32rhOeFNJwZS5MNIC1czXZx5//ugX7l\r\n" -"I4sy5nbVhwSjtAk8Xg5dZbdTZ6mIrb7xqH+fdakZor1khG7bC2uIwibD3cSl2XkR\r\n" -"wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde\r\n" -"P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; + "-----BEGIN RSA PRIVATE KEY-----\r\n" + "Proc-Type: 4,ENCRYPTED\r\n" + "DEK-Info: DES-EDE3-CBC,A8A95B05D5B7206B\r\n" + "\r\n" + "9Qd9GeArejl1GDVh2lLV1bHt0cPtfbh5h/5zVpAVaFpqtSPMrElp50Rntn9et+JA\r\n" + "7VOyboR+Iy2t/HU4WvA687k3Bppe9GwKHjHhtl//8xFKwZr3Xb5yO5JUP8AUctQq\r\n" + "Nb8CLlZyuUC+52REAAthdWgsX+7dJO4yabzUcQ22Tp9JSD0hiL43BlkWYUNK3dAo\r\n" + "PZlmiptjnzVTjg1MxsBSydZinWOLBV8/JQgxSPo2yD4uEfig28qbvQ2wNIn0pnAb\r\n" + "GxnSAOazkongEGfvcjIIs+LZN9gXFhxcOh6kc4Q/c99B7QWETwLLkYgZ+z1a9VY9\r\n" + "gEU7CwCxYCD+h9hY6FPmsK0/lC4O7aeRKpYq00rPPxs6i7phiexg6ax6yTMmArQq\r\n" + "QmK3TAsJm8V/J5AWpLEV6jAFgRGymGGHnof0DXzVWZidrcZJWTNuGEX90nB3ee2w\r\n" + "PXJEFWKoD3K3aFcSLdHYr3mLGxP7H9ThQai9VsycxZKS5kwvBKQ//YMrmFfwPk8x\r\n" + "vTeY4KZMaUrveEel5tWZC94RSMKgxR6cyE1nBXyTQnDOGbfpNNgBKxyKbINWoOJU\r\n" + "WJZAwlsQn+QzCDwpri7+sV1mS3gBE6UY7aQmnmiiaC2V3Hbphxct/en5QsfDOt1X\r\n" + "JczSfpRWLlbPznZg8OQh/VgCMA58N5DjOzTIK7sJJ5r+94ZBTCpgAMbF588f0NTR\r\n" + "KCe4yrxGJR7X02M4nvD4IwOlpsQ8xQxZtOSgXv4LkxvdU9XJJKWZ/XNKJeWztxSe\r\n" + "Z1vdTc2YfsDBA2SEv33vxHx2g1vqtw8SjDRT2RaQSS0QuSaMJimdOX6mTOCBKk1J\r\n" + "9Q5mXTrER+/LnK0jEmXsBXWA5bqqVZIyahXSx4VYZ7l7w/PHiUDtDgyRhMMKi4n2\r\n" + "iQvQcWSQTjrpnlJbca1/DkpRt3YwrvJwdqb8asZU2VrNETh5x0QVefDRLFiVpif/\r\n" + "tUaeAe/P1F8OkS7OIZDs1SUbv/sD2vMbhNkUoCms3/PvNtdnvgL4F0zhaDpKCmlT\r\n" + "P8vx49E7v5CyRNmED9zZg4o3wmMqrQO93PtTug3Eu9oVx1zPQM1NVMyBa2+f29DL\r\n" + "1nuTCeXdo9+ni45xx+jAI4DCwrRdhJ9uzZyC6962H37H6D+5naNvClFR1s6li1Gb\r\n" + "nqPoiy/OBsEx9CaDGcqQBp5Wme/3XW+6z1ISOx+igwNTVCT14mHdBMbya0eIKft5\r\n" + "X+GnwtgEMyCYyyWuUct8g4RzErcY9+yW9Om5Hzpx4zOuW4NPZgPDTgK+t2RSL/Yq\r\n" + "rE1njrgeGYcVeG3f+OftH4s6fPbq7t1A5ZgUscbLMBqr9tK+OqygR4EgKBPsH6Cz\r\n" + "L6zlv/2RV0qAHvVuDJcIDIgwY5rJtINEm32rhOeFNJwZS5MNIC1czXZx5//ugX7l\r\n" + "I4sy5nbVhwSjtAk8Xg5dZbdTZ6mIrb7xqH+fdakZor1khG7bC2uIwibD3cSl2XkR\r\n" + "wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde\r\n" + "P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2\r\n" + "-----END RSA PRIVATE KEY-----\r\n"; const char mbedtls_test_ca_pwd_rsa[] = "PolarSSLTest"; const char mbedtls_test_srv_crt_rsa[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" -"MTEwMjEyMTQ0NDA2WhcNMjEwMjEyMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN\r\n" -"AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN\r\n" -"owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz\r\n" -"NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM\r\n" -"tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P\r\n" -"hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya\r\n" -"HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD\r\n" -"VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw\r\n" -"FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQADggEBAJxnXClY\r\n" -"oHkbp70cqBrsGXLybA74czbO5RdLEgFs7rHVS9r+c293luS/KdliLScZqAzYVylw\r\n" -"UfRWvKMoWhHYKp3dEIS4xTXk6/5zXxhv9Rw8SGc8qn6vITHk1S1mPevtekgasY5Y\r\n" -"iWQuM3h4YVlRH3HHEMAD1TnAexfXHHDFQGe+Bd1iAbz1/sH9H8l4StwX6egvTK3M\r\n" -"wXRwkKkvjKaEDA9ATbZx0mI8LGsxSuCqe9r9dyjmttd47J1p1Rulz3CLzaRcVIuS\r\n" -"RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8\r\n" -"zhuYwjVuX6JHG0c=\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" + "MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" + "MTEwMjEyMTQ0NDA2WhcNMjEwMjEyMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN\r\n" + "AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN\r\n" + "owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz\r\n" + "NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM\r\n" + "tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P\r\n" + "hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya\r\n" + "HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD\r\n" + "VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw\r\n" + "FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQADggEBAJxnXClY\r\n" + "oHkbp70cqBrsGXLybA74czbO5RdLEgFs7rHVS9r+c293luS/KdliLScZqAzYVylw\r\n" + "UfRWvKMoWhHYKp3dEIS4xTXk6/5zXxhv9Rw8SGc8qn6vITHk1S1mPevtekgasY5Y\r\n" + "iWQuM3h4YVlRH3HHEMAD1TnAexfXHHDFQGe+Bd1iAbz1/sH9H8l4StwX6egvTK3M\r\n" + "wXRwkKkvjKaEDA9ATbZx0mI8LGsxSuCqe9r9dyjmttd47J1p1Rulz3CLzaRcVIuS\r\n" + "RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8\r\n" + "zhuYwjVuX6JHG0c=\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_srv_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"MIIEpAIBAAKCAQEAwU2j3efNHdEE10lyuJmsDnjkOjxKzzoTFtBa5M2jAIin7h5r\r\n" -"lqdStJDvLXJ6PiSa/LY0rCT1d+AmZIycsCh9odrqjObJHJa8/sEEUrM21KP64bF2\r\n" -"2JDBYbRmUjaiJlOqq3ReB30Zgtsq2B+g2Q0cLUlm91slc0boC4pPaQy1AJDh2oIQ\r\n" -"Zn2uVCuLZXmRoeJhw81ASQjuaAzxi4bSRr/QuKoRAx5/VqgaHkQYDw+Fi9qLRF7i\r\n" -"GMZiL8dmjfpd2H3zJ4kpAcWQDj8n8TDISg7v1t7HxydrxwU9esQCPJodPg/oNJhb\r\n" -"y3NLUpbYEaIsgIhpOVrTD7DeWS8Rx/fqEgEwlwIDAQABAoIBAQCXR0S8EIHFGORZ\r\n" -"++AtOg6eENxD+xVs0f1IeGz57Tjo3QnXX7VBZNdj+p1ECvhCE/G7XnkgU5hLZX+G\r\n" -"Z0jkz/tqJOI0vRSdLBbipHnWouyBQ4e/A1yIJdlBtqXxJ1KE/ituHRbNc4j4kL8Z\r\n" -"/r6pvwnTI0PSx2Eqs048YdS92LT6qAv4flbNDxMn2uY7s4ycS4Q8w1JXnCeaAnYm\r\n" -"WYI5wxO+bvRELR2Mcz5DmVnL8jRyml6l6582bSv5oufReFIbyPZbQWlXgYnpu6He\r\n" -"GTc7E1zKYQGG/9+DQUl/1vQuCPqQwny0tQoX2w5tdYpdMdVm+zkLtbajzdTviJJa\r\n" -"TWzL6lt5AoGBAN86+SVeJDcmQJcv4Eq6UhtRr4QGMiQMz0Sod6ettYxYzMgxtw28\r\n" -"CIrgpozCc+UaZJLo7UxvC6an85r1b2nKPCLQFaggJ0H4Q0J/sZOhBIXaoBzWxveK\r\n" -"nupceKdVxGsFi8CDy86DBfiyFivfBj+47BbaQzPBj7C4rK7UlLjab2rDAoGBAN2u\r\n" -"AM2gchoFiu4v1HFL8D7lweEpi6ZnMJjnEu/dEgGQJFjwdpLnPbsj4c75odQ4Gz8g\r\n" -"sw9lao9VVzbusoRE/JGI4aTdO0pATXyG7eG1Qu+5Yc1YGXcCrliA2xM9xx+d7f+s\r\n" -"mPzN+WIEg5GJDYZDjAzHG5BNvi/FfM1C9dOtjv2dAoGAF0t5KmwbjWHBhcVqO4Ic\r\n" -"BVvN3BIlc1ue2YRXEDlxY5b0r8N4XceMgKmW18OHApZxfl8uPDauWZLXOgl4uepv\r\n" -"whZC3EuWrSyyICNhLY21Ah7hbIEBPF3L3ZsOwC+UErL+dXWLdB56Jgy3gZaBeW7b\r\n" -"vDrEnocJbqCm7IukhXHOBK8CgYEAwqdHB0hqyNSzIOGY7v9abzB6pUdA3BZiQvEs\r\n" -"3LjHVd4HPJ2x0N8CgrBIWOE0q8+0hSMmeE96WW/7jD3fPWwCR5zlXknxBQsfv0gP\r\n" -"3BC5PR0Qdypz+d+9zfMf625kyit4T/hzwhDveZUzHnk1Cf+IG7Q+TOEnLnWAWBED\r\n" -"ISOWmrUCgYAFEmRxgwAc/u+D6t0syCwAYh6POtscq9Y0i9GyWk89NzgC4NdwwbBH\r\n" -"4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE\r\n" -"TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; + "-----BEGIN RSA PRIVATE KEY-----\r\n" + "MIIEpAIBAAKCAQEAwU2j3efNHdEE10lyuJmsDnjkOjxKzzoTFtBa5M2jAIin7h5r\r\n" + "lqdStJDvLXJ6PiSa/LY0rCT1d+AmZIycsCh9odrqjObJHJa8/sEEUrM21KP64bF2\r\n" + "2JDBYbRmUjaiJlOqq3ReB30Zgtsq2B+g2Q0cLUlm91slc0boC4pPaQy1AJDh2oIQ\r\n" + "Zn2uVCuLZXmRoeJhw81ASQjuaAzxi4bSRr/QuKoRAx5/VqgaHkQYDw+Fi9qLRF7i\r\n" + "GMZiL8dmjfpd2H3zJ4kpAcWQDj8n8TDISg7v1t7HxydrxwU9esQCPJodPg/oNJhb\r\n" + "y3NLUpbYEaIsgIhpOVrTD7DeWS8Rx/fqEgEwlwIDAQABAoIBAQCXR0S8EIHFGORZ\r\n" + "++AtOg6eENxD+xVs0f1IeGz57Tjo3QnXX7VBZNdj+p1ECvhCE/G7XnkgU5hLZX+G\r\n" + "Z0jkz/tqJOI0vRSdLBbipHnWouyBQ4e/A1yIJdlBtqXxJ1KE/ituHRbNc4j4kL8Z\r\n" + "/r6pvwnTI0PSx2Eqs048YdS92LT6qAv4flbNDxMn2uY7s4ycS4Q8w1JXnCeaAnYm\r\n" + "WYI5wxO+bvRELR2Mcz5DmVnL8jRyml6l6582bSv5oufReFIbyPZbQWlXgYnpu6He\r\n" + "GTc7E1zKYQGG/9+DQUl/1vQuCPqQwny0tQoX2w5tdYpdMdVm+zkLtbajzdTviJJa\r\n" + "TWzL6lt5AoGBAN86+SVeJDcmQJcv4Eq6UhtRr4QGMiQMz0Sod6ettYxYzMgxtw28\r\n" + "CIrgpozCc+UaZJLo7UxvC6an85r1b2nKPCLQFaggJ0H4Q0J/sZOhBIXaoBzWxveK\r\n" + "nupceKdVxGsFi8CDy86DBfiyFivfBj+47BbaQzPBj7C4rK7UlLjab2rDAoGBAN2u\r\n" + "AM2gchoFiu4v1HFL8D7lweEpi6ZnMJjnEu/dEgGQJFjwdpLnPbsj4c75odQ4Gz8g\r\n" + "sw9lao9VVzbusoRE/JGI4aTdO0pATXyG7eG1Qu+5Yc1YGXcCrliA2xM9xx+d7f+s\r\n" + "mPzN+WIEg5GJDYZDjAzHG5BNvi/FfM1C9dOtjv2dAoGAF0t5KmwbjWHBhcVqO4Ic\r\n" + "BVvN3BIlc1ue2YRXEDlxY5b0r8N4XceMgKmW18OHApZxfl8uPDauWZLXOgl4uepv\r\n" + "whZC3EuWrSyyICNhLY21Ah7hbIEBPF3L3ZsOwC+UErL+dXWLdB56Jgy3gZaBeW7b\r\n" + "vDrEnocJbqCm7IukhXHOBK8CgYEAwqdHB0hqyNSzIOGY7v9abzB6pUdA3BZiQvEs\r\n" + "3LjHVd4HPJ2x0N8CgrBIWOE0q8+0hSMmeE96WW/7jD3fPWwCR5zlXknxBQsfv0gP\r\n" + "3BC5PR0Qdypz+d+9zfMf625kyit4T/hzwhDveZUzHnk1Cf+IG7Q+TOEnLnWAWBED\r\n" + "ISOWmrUCgYAFEmRxgwAc/u+D6t0syCwAYh6POtscq9Y0i9GyWk89NzgC4NdwwbBH\r\n" + "4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE\r\n" + "TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==\r\n" + "-----END RSA PRIVATE KEY-----\r\n"; const char mbedtls_test_cli_crt_rsa[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" -"MTEwMjEyMTQ0NDA3WhcNMjEwMjEyMTQ0NDA3WjA8MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxGjAYBgNVBAMTEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN\r\n" -"BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f\r\n" -"M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu\r\n" -"1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw\r\n" -"MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v\r\n" -"4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/\r\n" -"/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB\r\n" -"o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf\r\n" -"BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC\r\n" -"AQEAAn86isAM8X+mVwJqeItt6E9slhEQbAofyk+diH1Lh8Y9iLlWQSKbw/UXYjx5\r\n" -"LLPZcniovxIcARC/BjyZR9g3UwTHNGNm+rwrqa15viuNOFBchykX/Orsk02EH7NR\r\n" -"Alw5WLPorYjED6cdVQgBl9ot93HdJogRiXCxErM7NC8/eP511mjq+uLDjLKH8ZPQ\r\n" -"8I4ekHJnroLsDkIwXKGIsvIBHQy2ac/NwHLCQOK6mfum1pRx52V4Utu5dLLjD5bM\r\n" -"xOBC7KU4xZKuMXXZM6/93Yb51K/J4ahf1TxJlTWXtnzDr9saEYdNy2SKY/6ZiDNH\r\n" -"D+stpAKiQLAWaAusIWKYEyw9MQ==\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" + "MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" + "MTEwMjEyMTQ0NDA3WhcNMjEwMjEyMTQ0NDA3WjA8MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxGjAYBgNVBAMTEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN\r\n" + "BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f\r\n" + "M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu\r\n" + "1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw\r\n" + "MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v\r\n" + "4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/\r\n" + "/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB\r\n" + "o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf\r\n" + "BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC\r\n" + "AQEAAn86isAM8X+mVwJqeItt6E9slhEQbAofyk+diH1Lh8Y9iLlWQSKbw/UXYjx5\r\n" + "LLPZcniovxIcARC/BjyZR9g3UwTHNGNm+rwrqa15viuNOFBchykX/Orsk02EH7NR\r\n" + "Alw5WLPorYjED6cdVQgBl9ot93HdJogRiXCxErM7NC8/eP511mjq+uLDjLKH8ZPQ\r\n" + "8I4ekHJnroLsDkIwXKGIsvIBHQy2ac/NwHLCQOK6mfum1pRx52V4Utu5dLLjD5bM\r\n" + "xOBC7KU4xZKuMXXZM6/93Yb51K/J4ahf1TxJlTWXtnzDr9saEYdNy2SKY/6ZiDNH\r\n" + "D+stpAKiQLAWaAusIWKYEyw9MQ==\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_cli_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"MIIEpAIBAAKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6fM60Nj4o8VmXl3ETZzGaF\r\n" -"B9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu1C93KYRhTYJQj6eVSHD1\r\n" -"bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEwMjDV0/YI0FZPRo7yX/k9\r\n" -"Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v4Jv4EFbMs44TFeY0BGbH\r\n" -"7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx//DZrtenNLQNiTrM9AM+v\r\n" -"dqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQABAoIBAGdNtfYDiap6bzst\r\n" -"yhCiI8m9TtrhZw4MisaEaN/ll3XSjaOG2dvV6xMZCMV+5TeXDHOAZnY18Yi18vzz\r\n" -"4Ut2TnNFzizCECYNaA2fST3WgInnxUkV3YXAyP6CNxJaCmv2aA0yFr2kFVSeaKGt\r\n" -"ymvljNp2NVkvm7Th8fBQBO7I7AXhz43k0mR7XmPgewe8ApZOG3hstkOaMvbWAvWA\r\n" -"zCZupdDjZYjOJqlA4eEA4H8/w7F83r5CugeBE8LgEREjLPiyejrU5H1fubEY+h0d\r\n" -"l5HZBJ68ybTXfQ5U9o/QKA3dd0toBEhhdRUDGzWtjvwkEQfqF1reGWj/tod/gCpf\r\n" -"DFi6X0ECgYEA4wOv/pjSC3ty6TuOvKX2rOUiBrLXXv2JSxZnMoMiWI5ipLQt+RYT\r\n" -"VPafL/m7Dn6MbwjayOkcZhBwk5CNz5A6Q4lJ64Mq/lqHznRCQQ2Mc1G8eyDF/fYL\r\n" -"Ze2pLvwP9VD5jTc2miDfw+MnvJhywRRLcemDFP8k4hQVtm8PMp3ZmNECgYEA4gz7\r\n" -"wzObR4gn8ibe617uQPZjWzUj9dUHYd+in1gwBCIrtNnaRn9I9U/Q6tegRYpii4ys\r\n" -"c176NmU+umy6XmuSKV5qD9bSpZWG2nLFnslrN15Lm3fhZxoeMNhBaEDTnLT26yoi\r\n" -"33gp0mSSWy94ZEqipms+ULF6sY1ZtFW6tpGFoy8CgYAQHhnnvJflIs2ky4q10B60\r\n" -"ZcxFp3rtDpkp0JxhFLhiizFrujMtZSjYNm5U7KkgPVHhLELEUvCmOnKTt4ap/vZ0\r\n" -"BxJNe1GZH3pW6SAvGDQpl9sG7uu/vTFP+lCxukmzxB0DrrDcvorEkKMom7ZCCRvW\r\n" -"KZsZ6YeH2Z81BauRj218kQKBgQCUV/DgKP2985xDTT79N08jUo3hTP5MVYCCuj/+\r\n" -"UeEw1TvZcx3LJby7P6Xad6a1/BqveaGyFKIfEFIaBUBItk801sDDpDaYc4gL00Xc\r\n" -"7lFuBHOZkxJYlss5QrGpuOEl9ZwUt5IrFLBdYaKqNHzNVC1pCPfb/JyH6Dr2HUxq\r\n" -"gxUwAQKBgQCcU6G2L8AG9d9c0UpOyL1tMvFe5Ttw0KjlQVdsh1MP6yigYo9DYuwu\r\n" -"bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv\r\n" -"8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; + "-----BEGIN RSA PRIVATE KEY-----\r\n" + "MIIEpAIBAAKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6fM60Nj4o8VmXl3ETZzGaF\r\n" + "B9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu1C93KYRhTYJQj6eVSHD1\r\n" + "bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEwMjDV0/YI0FZPRo7yX/k9\r\n" + "Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v4Jv4EFbMs44TFeY0BGbH\r\n" + "7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx//DZrtenNLQNiTrM9AM+v\r\n" + "dqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQABAoIBAGdNtfYDiap6bzst\r\n" + "yhCiI8m9TtrhZw4MisaEaN/ll3XSjaOG2dvV6xMZCMV+5TeXDHOAZnY18Yi18vzz\r\n" + "4Ut2TnNFzizCECYNaA2fST3WgInnxUkV3YXAyP6CNxJaCmv2aA0yFr2kFVSeaKGt\r\n" + "ymvljNp2NVkvm7Th8fBQBO7I7AXhz43k0mR7XmPgewe8ApZOG3hstkOaMvbWAvWA\r\n" + "zCZupdDjZYjOJqlA4eEA4H8/w7F83r5CugeBE8LgEREjLPiyejrU5H1fubEY+h0d\r\n" + "l5HZBJ68ybTXfQ5U9o/QKA3dd0toBEhhdRUDGzWtjvwkEQfqF1reGWj/tod/gCpf\r\n" + "DFi6X0ECgYEA4wOv/pjSC3ty6TuOvKX2rOUiBrLXXv2JSxZnMoMiWI5ipLQt+RYT\r\n" + "VPafL/m7Dn6MbwjayOkcZhBwk5CNz5A6Q4lJ64Mq/lqHznRCQQ2Mc1G8eyDF/fYL\r\n" + "Ze2pLvwP9VD5jTc2miDfw+MnvJhywRRLcemDFP8k4hQVtm8PMp3ZmNECgYEA4gz7\r\n" + "wzObR4gn8ibe617uQPZjWzUj9dUHYd+in1gwBCIrtNnaRn9I9U/Q6tegRYpii4ys\r\n" + "c176NmU+umy6XmuSKV5qD9bSpZWG2nLFnslrN15Lm3fhZxoeMNhBaEDTnLT26yoi\r\n" + "33gp0mSSWy94ZEqipms+ULF6sY1ZtFW6tpGFoy8CgYAQHhnnvJflIs2ky4q10B60\r\n" + "ZcxFp3rtDpkp0JxhFLhiizFrujMtZSjYNm5U7KkgPVHhLELEUvCmOnKTt4ap/vZ0\r\n" + "BxJNe1GZH3pW6SAvGDQpl9sG7uu/vTFP+lCxukmzxB0DrrDcvorEkKMom7ZCCRvW\r\n" + "KZsZ6YeH2Z81BauRj218kQKBgQCUV/DgKP2985xDTT79N08jUo3hTP5MVYCCuj/+\r\n" + "UeEw1TvZcx3LJby7P6Xad6a1/BqveaGyFKIfEFIaBUBItk801sDDpDaYc4gL00Xc\r\n" + "7lFuBHOZkxJYlss5QrGpuOEl9ZwUt5IrFLBdYaKqNHzNVC1pCPfb/JyH6Dr2HUxq\r\n" + "gxUwAQKBgQCcU6G2L8AG9d9c0UpOyL1tMvFe5Ttw0KjlQVdsh1MP6yigYo9DYuwu\r\n" + "bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv\r\n" + "8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==\r\n" + "-----END RSA PRIVATE KEY-----\r\n"; const size_t mbedtls_test_ca_crt_rsa_len = sizeof( mbedtls_test_ca_crt_rsa ); const size_t mbedtls_test_ca_key_rsa_len = sizeof( mbedtls_test_ca_key_rsa ); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher.c index a8834386..ad2ac4bf 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher.c @@ -61,8 +61,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } static int supported_init = 0; @@ -72,12 +74,11 @@ const int *mbedtls_cipher_list( void ) const mbedtls_cipher_definition_t *def; int *type; - if( ! supported_init ) - { + if ( ! supported_init ) { def = mbedtls_cipher_definitions; type = mbedtls_cipher_supported; - while( def->type != 0 ) + while ( def->type != 0 ) *type++ = (*def++).type; *type = 0; @@ -85,47 +86,47 @@ const int *mbedtls_cipher_list( void ) supported_init = 1; } - return( mbedtls_cipher_supported ); + return ( mbedtls_cipher_supported ); } const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type( const mbedtls_cipher_type_t cipher_type ) { const mbedtls_cipher_definition_t *def; - for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) - if( def->type == cipher_type ) - return( def->info ); + for ( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if ( def->type == cipher_type ) + return ( def->info ); - return( NULL ); + return ( NULL ); } const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string( const char *cipher_name ) { const mbedtls_cipher_definition_t *def; - if( NULL == cipher_name ) - return( NULL ); + if ( NULL == cipher_name ) + return ( NULL ); - for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) - if( ! strcmp( def->info->name, cipher_name ) ) - return( def->info ); + for ( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if ( ! strcmp( def->info->name, cipher_name ) ) + return ( def->info ); - return( NULL ); + return ( NULL ); } const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values( const mbedtls_cipher_id_t cipher_id, - int key_bitlen, - const mbedtls_cipher_mode_t mode ) + int key_bitlen, + const mbedtls_cipher_mode_t mode ) { const mbedtls_cipher_definition_t *def; - for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) - if( def->info->base->cipher == cipher_id && - def->info->key_bitlen == (unsigned) key_bitlen && - def->info->mode == mode ) - return( def->info ); + for ( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if ( def->info->base->cipher == cipher_id && + def->info->key_bitlen == (unsigned) key_bitlen && + def->info->mode == mode ) + return ( def->info ); - return( NULL ); + return ( NULL ); } void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ) @@ -135,18 +136,17 @@ void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ) void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; #if defined(MBEDTLS_CMAC_C) - if( ctx->cmac_ctx ) - { - mbedtls_zeroize( ctx->cmac_ctx, sizeof( mbedtls_cmac_context_t ) ); - mbedtls_free( ctx->cmac_ctx ); + if ( ctx->cmac_ctx ) { + mbedtls_zeroize( ctx->cmac_ctx, sizeof( mbedtls_cmac_context_t ) ); + mbedtls_free( ctx->cmac_ctx ); } #endif - if( ctx->cipher_ctx ) + if ( ctx->cipher_ctx ) ctx->cipher_info->base->ctx_free_func( ctx->cipher_ctx ); mbedtls_zeroize( ctx, sizeof(mbedtls_cipher_context_t) ); @@ -154,13 +154,13 @@ void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx ) int mbedtls_cipher_setup( mbedtls_cipher_context_t *ctx, const mbedtls_cipher_info_t *cipher_info ) { - if( NULL == cipher_info || NULL == ctx ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == cipher_info || NULL == ctx ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); memset( ctx, 0, sizeof( mbedtls_cipher_context_t ) ); - if( NULL == ( ctx->cipher_ctx = cipher_info->base->ctx_alloc_func() ) ) - return( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); + if ( NULL == ( ctx->cipher_ctx = cipher_info->base->ctx_alloc_func() ) ) + return ( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); ctx->cipher_info = cipher_info; @@ -175,19 +175,18 @@ int mbedtls_cipher_setup( mbedtls_cipher_context_t *ctx, const mbedtls_cipher_in #endif #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ - return( 0 ); + return ( 0 ); } int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *key, - int key_bitlen, const mbedtls_operation_t operation ) + int key_bitlen, const mbedtls_operation_t operation ) { - if( NULL == ctx || NULL == ctx->cipher_info ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_KEY_LEN ) == 0 && - (int) ctx->cipher_info->key_bitlen != key_bitlen ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_KEY_LEN ) == 0 && + (int) ctx->cipher_info->key_bitlen != key_bitlen ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } ctx->key_bitlen = key_bitlen; @@ -196,162 +195,149 @@ int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *k /* * For CFB and CTR mode always use the encryption key schedule */ - if( MBEDTLS_ENCRYPT == operation || - MBEDTLS_MODE_CFB == ctx->cipher_info->mode || - MBEDTLS_MODE_CTR == ctx->cipher_info->mode ) - { + if ( MBEDTLS_ENCRYPT == operation || + MBEDTLS_MODE_CFB == ctx->cipher_info->mode || + MBEDTLS_MODE_CTR == ctx->cipher_info->mode ) { return ctx->cipher_info->base->setkey_enc_func( ctx->cipher_ctx, key, ctx->key_bitlen ); } - if( MBEDTLS_DECRYPT == operation ) + if ( MBEDTLS_DECRYPT == operation ) return ctx->cipher_info->base->setkey_dec_func( ctx->cipher_ctx, key, ctx->key_bitlen ); - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } int mbedtls_cipher_set_iv( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len ) + const unsigned char *iv, size_t iv_len ) { size_t actual_iv_size; - if( NULL == ctx || NULL == ctx->cipher_info || NULL == iv ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == iv ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); /* avoid buffer overflow in ctx->iv */ - if( iv_len > MBEDTLS_MAX_IV_LENGTH ) - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + if ( iv_len > MBEDTLS_MAX_IV_LENGTH ) + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); - if( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_IV_LEN ) != 0 ) + if ( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_IV_LEN ) != 0 ) actual_iv_size = iv_len; - else - { + else { actual_iv_size = ctx->cipher_info->iv_size; /* avoid reading past the end of input buffer */ - if( actual_iv_size > iv_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( actual_iv_size > iv_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } memcpy( ctx->iv, iv, actual_iv_size ); ctx->iv_size = actual_iv_size; - return( 0 ); + return ( 0 ); } int mbedtls_cipher_reset( mbedtls_cipher_context_t *ctx ) { - if( NULL == ctx || NULL == ctx->cipher_info ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); ctx->unprocessed_len = 0; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_GCM_C) int mbedtls_cipher_update_ad( mbedtls_cipher_context_t *ctx, - const unsigned char *ad, size_t ad_len ) + const unsigned char *ad, size_t ad_len ) { - if( NULL == ctx || NULL == ctx->cipher_info ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { return mbedtls_gcm_starts( (mbedtls_gcm_context *) ctx->cipher_ctx, ctx->operation, - ctx->iv, ctx->iv_size, ad, ad_len ); + ctx->iv, ctx->iv_size, ad, ad_len ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_GCM_C */ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *input, - size_t ilen, unsigned char *output, size_t *olen ) + size_t ilen, unsigned char *output, size_t *olen ) { int ret; size_t block_size = 0; - if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } *olen = 0; block_size = mbedtls_cipher_get_block_size( ctx ); - if( ctx->cipher_info->mode == MBEDTLS_MODE_ECB ) - { - if( ilen != block_size ) - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_ECB ) { + if ( ilen != block_size ) + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); *olen = ilen; - if( 0 != ( ret = ctx->cipher_info->base->ecb_func( ctx->cipher_ctx, - ctx->operation, input, output ) ) ) - { - return( ret ); + if ( 0 != ( ret = ctx->cipher_info->base->ecb_func( ctx->cipher_ctx, + ctx->operation, input, output ) ) ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_GCM_C) - if( ctx->cipher_info->mode == MBEDTLS_MODE_GCM ) - { + if ( ctx->cipher_info->mode == MBEDTLS_MODE_GCM ) { *olen = ilen; return mbedtls_gcm_update( (mbedtls_gcm_context *) ctx->cipher_ctx, ilen, input, - output ); + output ); } #endif - if ( 0 == block_size ) - { + if ( 0 == block_size ) { return MBEDTLS_ERR_CIPHER_INVALID_CONTEXT; } - if( input == output && - ( ctx->unprocessed_len != 0 || ilen % block_size ) ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( input == output && + ( ctx->unprocessed_len != 0 || ilen % block_size ) ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) - if( ctx->cipher_info->mode == MBEDTLS_MODE_CBC ) - { + if ( ctx->cipher_info->mode == MBEDTLS_MODE_CBC ) { size_t copy_len = 0; /* * If there is not enough data for a full block, cache it. */ - if( ( ctx->operation == MBEDTLS_DECRYPT && - ilen + ctx->unprocessed_len <= block_size ) || + if ( ( ctx->operation == MBEDTLS_DECRYPT && + ilen + ctx->unprocessed_len <= block_size ) || ( ctx->operation == MBEDTLS_ENCRYPT && - ilen + ctx->unprocessed_len < block_size ) ) - { + ilen + ctx->unprocessed_len < block_size ) ) { memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, ilen ); ctx->unprocessed_len += ilen; - return( 0 ); + return ( 0 ); } /* * Process cached data first */ - if( 0 != ctx->unprocessed_len ) - { + if ( 0 != ctx->unprocessed_len ) { copy_len = block_size - ctx->unprocessed_len; memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, copy_len ); - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, block_size, ctx->iv, - ctx->unprocessed_data, output ) ) ) - { - return( ret ); + if ( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, block_size, ctx->iv, + ctx->unprocessed_data, output ) ) ) { + return ( ret ); } *olen += block_size; @@ -365,15 +351,13 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i /* * Cache final, incomplete block */ - if( 0 != ilen ) - { - if( 0 == block_size ) - { + if ( 0 != ilen ) { + if ( 0 == block_size ) { return MBEDTLS_ERR_CIPHER_INVALID_CONTEXT; } copy_len = ilen % block_size; - if( copy_len == 0 && ctx->operation == MBEDTLS_DECRYPT ) + if ( copy_len == 0 && ctx->operation == MBEDTLS_DECRYPT ) copy_len = block_size; memcpy( ctx->unprocessed_data, &( input[ilen - copy_len] ), @@ -386,69 +370,61 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i /* * Process remaining full blocks */ - if( ilen ) - { - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, ilen, ctx->iv, input, output ) ) ) - { - return( ret ); + if ( ilen ) { + if ( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, ilen, ctx->iv, input, output ) ) ) { + return ( ret ); } *olen += ilen; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) - if( ctx->cipher_info->mode == MBEDTLS_MODE_CFB ) - { - if( 0 != ( ret = ctx->cipher_info->base->cfb_func( ctx->cipher_ctx, - ctx->operation, ilen, &ctx->unprocessed_len, ctx->iv, - input, output ) ) ) - { - return( ret ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_CFB ) { + if ( 0 != ( ret = ctx->cipher_info->base->cfb_func( ctx->cipher_ctx, + ctx->operation, ilen, &ctx->unprocessed_len, ctx->iv, + input, output ) ) ) { + return ( ret ); } *olen = ilen; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) - if( ctx->cipher_info->mode == MBEDTLS_MODE_CTR ) - { - if( 0 != ( ret = ctx->cipher_info->base->ctr_func( ctx->cipher_ctx, - ilen, &ctx->unprocessed_len, ctx->iv, - ctx->unprocessed_data, input, output ) ) ) - { - return( ret ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_CTR ) { + if ( 0 != ( ret = ctx->cipher_info->base->ctr_func( ctx->cipher_ctx, + ilen, &ctx->unprocessed_len, ctx->iv, + ctx->unprocessed_data, input, output ) ) ) { + return ( ret ); } *olen = ilen; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ #if defined(MBEDTLS_CIPHER_MODE_STREAM) - if( ctx->cipher_info->mode == MBEDTLS_MODE_STREAM ) - { - if( 0 != ( ret = ctx->cipher_info->base->stream_func( ctx->cipher_ctx, - ilen, input, output ) ) ) - { - return( ret ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_STREAM ) { + if ( 0 != ( ret = ctx->cipher_info->base->stream_func( ctx->cipher_ctx, + ilen, input, output ) ) ) { + return ( ret ); } *olen = ilen; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_STREAM */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) @@ -457,23 +433,23 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i * PKCS7 (and PKCS5) padding: fill with ll bytes, with ll = padding_len */ static void add_pkcs_padding( unsigned char *output, size_t output_len, - size_t data_len ) + size_t data_len ) { size_t padding_len = output_len - data_len; unsigned char i; - for( i = 0; i < padding_len; i++ ) + for ( i = 0; i < padding_len; i++ ) output[data_len + i] = (unsigned char) padding_len; } static int get_pkcs_padding( unsigned char *input, size_t input_len, - size_t *data_len ) + size_t *data_len ) { size_t i, pad_idx; unsigned char padding_len, bad = 0; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); padding_len = input[input_len - 1]; *data_len = input_len - padding_len; @@ -485,10 +461,10 @@ static int get_pkcs_padding( unsigned char *input, size_t input_len, /* The number of bytes checked must be independent of padding_len, * so pick input_len, which is usually 8 or 16 (one block) */ pad_idx = input_len - padding_len; - for( i = 0; i < input_len; i++ ) + for ( i = 0; i < input_len; i++ ) bad |= ( input[i] ^ padding_len ) * ( i >= pad_idx ); - return( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); + return ( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); } #endif /* MBEDTLS_CIPHER_PADDING_PKCS7 */ @@ -503,7 +479,7 @@ static void add_one_and_zeros_padding( unsigned char *output, unsigned char i = 0; output[data_len] = 0x80; - for( i = 1; i < padding_len; i++ ) + for ( i = 1; i < padding_len; i++ ) output[data_len + i] = 0x00; } @@ -513,20 +489,19 @@ static int get_one_and_zeros_padding( unsigned char *input, size_t input_len, size_t i; unsigned char done = 0, prev_done, bad; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); bad = 0xFF; *data_len = 0; - for( i = input_len; i > 0; i-- ) - { + for ( i = input_len; i > 0; i-- ) { prev_done = done; - done |= ( input[i-1] != 0 ); + done |= ( input[i - 1] != 0 ); *data_len |= ( i - 1 ) * ( done != prev_done ); - bad &= ( input[i-1] ^ 0x80 ) | ( done == prev_done ); + bad &= ( input[i - 1] ^ 0x80 ) | ( done == prev_done ); } - return( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); + return ( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); } #endif /* MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS */ @@ -541,7 +516,7 @@ static void add_zeros_and_len_padding( unsigned char *output, size_t padding_len = output_len - data_len; unsigned char i = 0; - for( i = 1; i < padding_len; i++ ) + for ( i = 1; i < padding_len; i++ ) output[data_len + i - 1] = 0x00; output[output_len - 1] = (unsigned char) padding_len; } @@ -552,8 +527,8 @@ static int get_zeros_and_len_padding( unsigned char *input, size_t input_len, size_t i, pad_idx; unsigned char padding_len, bad = 0; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); padding_len = input[input_len - 1]; *data_len = input_len - padding_len; @@ -564,10 +539,10 @@ static int get_zeros_and_len_padding( unsigned char *input, size_t input_len, /* The number of bytes checked must be independent of padding_len */ pad_idx = input_len - padding_len; - for( i = 0; i < input_len - 1; i++ ) + for ( i = 0; i < input_len - 1; i++ ) bad |= input[i] * ( i >= pad_idx ); - return( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); + return ( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); } #endif /* MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN */ @@ -580,7 +555,7 @@ static void add_zeros_padding( unsigned char *output, { size_t i; - for( i = data_len; i < output_len; i++ ) + for ( i = data_len; i < output_len; i++ ) output[i] = 0x00; } @@ -590,18 +565,17 @@ static int get_zeros_padding( unsigned char *input, size_t input_len, size_t i; unsigned char done = 0, prev_done; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); *data_len = 0; - for( i = input_len; i > 0; i-- ) - { + for ( i = input_len; i > 0; i-- ) { prev_done = done; - done |= ( input[i-1] != 0 ); + done |= ( input[i - 1] != 0 ); *data_len |= i * ( done != prev_done ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_PADDING_ZEROS */ @@ -612,197 +586,184 @@ static int get_zeros_padding( unsigned char *input, size_t input_len, * but a trivial get_padding function */ static int get_no_padding( unsigned char *input, size_t input_len, - size_t *data_len ) + size_t *data_len ) { - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); *data_len = input_len; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ int mbedtls_cipher_finish( mbedtls_cipher_context_t *ctx, - unsigned char *output, size_t *olen ) + unsigned char *output, size_t *olen ) { - if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); *olen = 0; - if( MBEDTLS_MODE_CFB == ctx->cipher_info->mode || - MBEDTLS_MODE_CTR == ctx->cipher_info->mode || - MBEDTLS_MODE_GCM == ctx->cipher_info->mode || - MBEDTLS_MODE_STREAM == ctx->cipher_info->mode ) - { - return( 0 ); + if ( MBEDTLS_MODE_CFB == ctx->cipher_info->mode || + MBEDTLS_MODE_CTR == ctx->cipher_info->mode || + MBEDTLS_MODE_GCM == ctx->cipher_info->mode || + MBEDTLS_MODE_STREAM == ctx->cipher_info->mode ) { + return ( 0 ); } - if( MBEDTLS_MODE_ECB == ctx->cipher_info->mode ) - { - if( ctx->unprocessed_len != 0 ) - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + if ( MBEDTLS_MODE_ECB == ctx->cipher_info->mode ) { + if ( ctx->unprocessed_len != 0 ) + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) - if( MBEDTLS_MODE_CBC == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_CBC == ctx->cipher_info->mode ) { int ret = 0; - if( MBEDTLS_ENCRYPT == ctx->operation ) - { + if ( MBEDTLS_ENCRYPT == ctx->operation ) { /* check for 'no padding' mode */ - if( NULL == ctx->add_padding ) - { - if( 0 != ctx->unprocessed_len ) - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + if ( NULL == ctx->add_padding ) { + if ( 0 != ctx->unprocessed_len ) + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - return( 0 ); + return ( 0 ); } ctx->add_padding( ctx->unprocessed_data, mbedtls_cipher_get_iv_size( ctx ), - ctx->unprocessed_len ); - } - else if( mbedtls_cipher_get_block_size( ctx ) != ctx->unprocessed_len ) - { + ctx->unprocessed_len ); + } else if ( mbedtls_cipher_get_block_size( ctx ) != ctx->unprocessed_len ) { /* * For decrypt operations, expect a full block, * or an empty block if no padding */ - if( NULL == ctx->add_padding && 0 == ctx->unprocessed_len ) - return( 0 ); + if ( NULL == ctx->add_padding && 0 == ctx->unprocessed_len ) + return ( 0 ); - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); } /* cipher block */ - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, mbedtls_cipher_get_block_size( ctx ), ctx->iv, - ctx->unprocessed_data, output ) ) ) - { - return( ret ); + if ( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, mbedtls_cipher_get_block_size( ctx ), ctx->iv, + ctx->unprocessed_data, output ) ) ) { + return ( ret ); } /* Set output size for decryption */ - if( MBEDTLS_DECRYPT == ctx->operation ) + if ( MBEDTLS_DECRYPT == ctx->operation ) return ctx->get_padding( output, mbedtls_cipher_get_block_size( ctx ), olen ); /* Set output size for encryption */ *olen = mbedtls_cipher_get_block_size( ctx ); - return( 0 ); + return ( 0 ); } #else ((void) output); #endif /* MBEDTLS_CIPHER_MODE_CBC */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) int mbedtls_cipher_set_padding_mode( mbedtls_cipher_context_t *ctx, mbedtls_cipher_padding_t mode ) { - if( NULL == ctx || - MBEDTLS_MODE_CBC != ctx->cipher_info->mode ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || + MBEDTLS_MODE_CBC != ctx->cipher_info->mode ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } - switch( mode ) - { + switch ( mode ) { #if defined(MBEDTLS_CIPHER_PADDING_PKCS7) - case MBEDTLS_PADDING_PKCS7: - ctx->add_padding = add_pkcs_padding; - ctx->get_padding = get_pkcs_padding; - break; + case MBEDTLS_PADDING_PKCS7: + ctx->add_padding = add_pkcs_padding; + ctx->get_padding = get_pkcs_padding; + break; #endif #if defined(MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS) - case MBEDTLS_PADDING_ONE_AND_ZEROS: - ctx->add_padding = add_one_and_zeros_padding; - ctx->get_padding = get_one_and_zeros_padding; - break; + case MBEDTLS_PADDING_ONE_AND_ZEROS: + ctx->add_padding = add_one_and_zeros_padding; + ctx->get_padding = get_one_and_zeros_padding; + break; #endif #if defined(MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN) - case MBEDTLS_PADDING_ZEROS_AND_LEN: - ctx->add_padding = add_zeros_and_len_padding; - ctx->get_padding = get_zeros_and_len_padding; - break; + case MBEDTLS_PADDING_ZEROS_AND_LEN: + ctx->add_padding = add_zeros_and_len_padding; + ctx->get_padding = get_zeros_and_len_padding; + break; #endif #if defined(MBEDTLS_CIPHER_PADDING_ZEROS) - case MBEDTLS_PADDING_ZEROS: - ctx->add_padding = add_zeros_padding; - ctx->get_padding = get_zeros_padding; - break; + case MBEDTLS_PADDING_ZEROS: + ctx->add_padding = add_zeros_padding; + ctx->get_padding = get_zeros_padding; + break; #endif - case MBEDTLS_PADDING_NONE: - ctx->add_padding = NULL; - ctx->get_padding = get_no_padding; - break; + case MBEDTLS_PADDING_NONE: + ctx->add_padding = NULL; + ctx->get_padding = get_no_padding; + break; - default: - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + default: + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ #if defined(MBEDTLS_GCM_C) int mbedtls_cipher_write_tag( mbedtls_cipher_context_t *ctx, - unsigned char *tag, size_t tag_len ) + unsigned char *tag, size_t tag_len ) { - if( NULL == ctx || NULL == ctx->cipher_info || NULL == tag ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == tag ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( MBEDTLS_ENCRYPT != ctx->operation ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( MBEDTLS_ENCRYPT != ctx->operation ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) return mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, tag, tag_len ); - return( 0 ); + return ( 0 ); } int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, - const unsigned char *tag, size_t tag_len ) + const unsigned char *tag, size_t tag_len ) { int ret; - if( NULL == ctx || NULL == ctx->cipher_info || - MBEDTLS_DECRYPT != ctx->operation ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || + MBEDTLS_DECRYPT != ctx->operation ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { unsigned char check_tag[16]; size_t i; int diff; - if( tag_len > sizeof( check_tag ) ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( tag_len > sizeof( check_tag ) ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( 0 != ( ret = mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, - check_tag, tag_len ) ) ) - { - return( ret ); + if ( 0 != ( ret = mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, + check_tag, tag_len ) ) ) { + return ( ret ); } /* Check the tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) + for ( diff = 0, i = 0; i < tag_len; i++ ) diff |= tag[i] ^ check_tag[i]; - if( diff != 0 ) - return( MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + if ( diff != 0 ) + return ( MBEDTLS_ERR_CIPHER_AUTH_FAILED ); - return( 0 ); + return ( 0 ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_GCM_C */ @@ -810,28 +771,28 @@ int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, * Packet-oriented wrapper for non-AEAD modes */ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen ) + const unsigned char *iv, size_t iv_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen ) { int ret; size_t finish_olen; - if( ( ret = mbedtls_cipher_set_iv( ctx, iv, iv_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_set_iv( ctx, iv, iv_len ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_reset( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_reset( ctx ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_update( ctx, input, ilen, output, olen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_update( ctx, input, ilen, output, olen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_finish( ctx, output + *olen, &finish_olen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_finish( ctx, output + *olen, &finish_olen ) ) != 0 ) + return ( ret ); *olen += finish_olen; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_AEAD) @@ -839,78 +800,74 @@ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, * Packet-oriented encryption for AEAD modes */ int mbedtls_cipher_auth_encrypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + unsigned char *tag, size_t tag_len ) { #if defined(MBEDTLS_GCM_C) - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { *olen = ilen; - return( mbedtls_gcm_crypt_and_tag( ctx->cipher_ctx, MBEDTLS_GCM_ENCRYPT, ilen, - iv, iv_len, ad, ad_len, input, output, - tag_len, tag ) ); + return ( mbedtls_gcm_crypt_and_tag( ctx->cipher_ctx, MBEDTLS_GCM_ENCRYPT, ilen, + iv, iv_len, ad, ad_len, input, output, + tag_len, tag ) ); } #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CCM_C) - if( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) { *olen = ilen; - return( mbedtls_ccm_encrypt_and_tag( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, input, output, - tag, tag_len ) ); + return ( mbedtls_ccm_encrypt_and_tag( ctx->cipher_ctx, ilen, + iv, iv_len, ad, ad_len, input, output, + tag, tag_len ) ); } #endif /* MBEDTLS_CCM_C */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } /* * Packet-oriented decryption for AEAD modes */ int mbedtls_cipher_auth_decrypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - const unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + const unsigned char *tag, size_t tag_len ) { #if defined(MBEDTLS_GCM_C) - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { int ret; *olen = ilen; ret = mbedtls_gcm_auth_decrypt( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, - tag, tag_len, input, output ); + iv, iv_len, ad, ad_len, + tag, tag_len, input, output ); - if( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ) + if ( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ) ret = MBEDTLS_ERR_CIPHER_AUTH_FAILED; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CCM_C) - if( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) { int ret; *olen = ilen; ret = mbedtls_ccm_auth_decrypt( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, - input, output, tag, tag_len ); + iv, iv_len, ad, ad_len, + input, output, tag, tag_len ); - if( ret == MBEDTLS_ERR_CCM_AUTH_FAILED ) + if ( ret == MBEDTLS_ERR_CCM_AUTH_FAILED ) ret = MBEDTLS_ERR_CIPHER_AUTH_FAILED; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_CCM_C */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } #endif /* MBEDTLS_CIPHER_MODE_AEAD */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher_wrap.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher_wrap.c index dc76af8f..0871f6b6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher_wrap.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cipher_wrap.c @@ -79,10 +79,10 @@ static void *gcm_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_gcm_init( (mbedtls_gcm_context *) ctx ); - return( ctx ); + return ( ctx ); } static void gcm_ctx_free( void *ctx ) @@ -98,10 +98,10 @@ static void *ccm_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ccm_init( (mbedtls_ccm_context *) ctx ); - return( ctx ); + return ( ctx ); } static void ccm_ctx_free( void *ctx ) @@ -114,37 +114,37 @@ static void ccm_ctx_free( void *ctx ) #if defined(MBEDTLS_AES_C) static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) + unsigned char *iv, const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input, - output ); + output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, size_t *iv_off, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv, - input, output ); + input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter, - stream_block, input, output ); + stream_block, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -164,12 +164,12 @@ static void * aes_ctx_alloc( void ) { mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) ); - if( aes == NULL ) - return( NULL ); + if ( aes == NULL ) + return ( NULL ); mbedtls_aes_init( aes ); - return( aes ); + return ( aes ); } static void aes_ctx_free( void *ctx ) @@ -342,7 +342,7 @@ static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t gcm_aes_info = { @@ -405,7 +405,7 @@ static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t ccm_aes_info = { @@ -468,39 +468,39 @@ static const mbedtls_cipher_info_t aes_256_ccm_info = { #if defined(MBEDTLS_CAMELLIA_C) static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input, - output ); + output ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv, - input, output ); + input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, size_t *iv_off, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length, - iv_off, iv, input, output ); + iv_off, iv, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); + nonce_counter, stream_block, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -521,12 +521,12 @@ static void * camellia_ctx_alloc( void ) mbedtls_camellia_context *ctx; ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) ); - if( ctx == NULL ) - return( NULL ); + if ( ctx == NULL ) + return ( NULL ); mbedtls_camellia_init( ctx ); - return( ctx ); + return ( ctx ); } static void camellia_ctx_free( void *ctx ) @@ -699,7 +699,7 @@ static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t gcm_camellia_info = { @@ -762,7 +762,7 @@ static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t ccm_camellia_info = { @@ -825,14 +825,14 @@ static const mbedtls_cipher_info_t camellia_256_ccm_info = { #if defined(MBEDTLS_DES_C) static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { ((void) operation); return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output ); } static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { ((void) operation); return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output ); @@ -840,19 +840,19 @@ static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, #if defined(MBEDTLS_CIPHER_MODE_CBC) static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) + unsigned char *iv, const unsigned char *input, unsigned char *output ) { return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input, - output ); + output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CBC) static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) + unsigned char *iv, const unsigned char *input, unsigned char *output ) { return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input, - output ); + output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -908,12 +908,12 @@ static void * des_ctx_alloc( void ) { mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) ); - if( des == NULL ) - return( NULL ); + if ( des == NULL ) + return ( NULL ); mbedtls_des_init( des ); - return( des ); + return ( des ); } static void des_ctx_free( void *ctx ) @@ -927,12 +927,12 @@ static void * des3_ctx_alloc( void ) mbedtls_des3_context *des3; des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) ); - if( des3 == NULL ) - return( NULL ); + if ( des3 == NULL ) + return ( NULL ); mbedtls_des3_init( des3 ); - return( des3 ); + return ( des3 ); } static void des3_ctx_free( void *ctx ) @@ -1079,39 +1079,39 @@ static const mbedtls_cipher_info_t des_ede3_cbc_info = { #if defined(MBEDTLS_BLOWFISH_C) static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input, - output ); + output ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, unsigned char *iv, const unsigned char *input, - unsigned char *output ) + size_t length, unsigned char *iv, const unsigned char *input, + unsigned char *output ) { return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv, - input, output ); + input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, size_t *iv_off, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length, - iv_off, iv, input, output ); + iv_off, iv, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ) { return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); + nonce_counter, stream_block, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -1126,12 +1126,12 @@ static void * blowfish_ctx_alloc( void ) mbedtls_blowfish_context *ctx; ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) ); - if( ctx == NULL ) - return( NULL ); + if ( ctx == NULL ) + return ( NULL ); mbedtls_blowfish_init( ctx ); - return( ctx ); + return ( ctx ); } static void blowfish_ctx_free( void *ctx ) @@ -1217,18 +1217,18 @@ static int arc4_crypt_stream_wrap( void *ctx, size_t length, const unsigned char *input, unsigned char *output ) { - return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) ); + return ( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) ); } static int arc4_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { /* we get key_bitlen in bits, arc4 expects it in bytes */ - if( key_bitlen % 8 != 0 ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( key_bitlen % 8 != 0 ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 ); - return( 0 ); + return ( 0 ); } static void * arc4_ctx_alloc( void ) @@ -1236,12 +1236,12 @@ static void * arc4_ctx_alloc( void ) mbedtls_arc4_context *ctx; ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) ); - if( ctx == NULL ) - return( NULL ); + if ( ctx == NULL ) + return ( NULL ); mbedtls_arc4_init( ctx ); - return( ctx ); + return ( ctx ); } static void arc4_ctx_free( void *ctx ) @@ -1290,7 +1290,7 @@ static int null_crypt_stream( void *ctx, size_t length, { ((void) ctx); memmove( output, input, length ); - return( 0 ); + return ( 0 ); } static int null_setkey( void *ctx, const unsigned char *key, @@ -1300,12 +1300,12 @@ static int null_setkey( void *ctx, const unsigned char *key, ((void) key); ((void) key_bitlen); - return( 0 ); + return ( 0 ); } static void * null_ctx_alloc( void ) { - return( (void *) 1 ); + return ( (void *) 1 ); } static void null_ctx_free( void *ctx ) @@ -1346,8 +1346,7 @@ static const mbedtls_cipher_info_t null_cipher_info = { }; #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */ -const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = -{ +const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = { #if defined(MBEDTLS_AES_C) { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info }, { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info }, diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cmac.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cmac.c index ee2fe056..3bfd1e1a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cmac.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/cmac.c @@ -66,8 +66,10 @@ #endif /* MBEDTLS_PLATFORM_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -92,21 +94,15 @@ static int cmac_multiply_by_u( unsigned char *output, unsigned char overflow = 0x00; int i; - if( blocksize == MBEDTLS_AES_BLOCK_SIZE ) - { + if ( blocksize == MBEDTLS_AES_BLOCK_SIZE ) { R_n = R_128; - } - else if( blocksize == MBEDTLS_DES3_BLOCK_SIZE ) - { + } else if ( blocksize == MBEDTLS_DES3_BLOCK_SIZE ) { R_n = R_64; - } - else - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + } else { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } - for( i = blocksize - 1; i >= 0; i-- ) - { + for ( i = blocksize - 1; i >= 0; i-- ) { output[i] = input[i] << 1 | overflow; overflow = input[i] >> 7; } @@ -127,7 +123,7 @@ static int cmac_multiply_by_u( unsigned char *output, output[ blocksize - 1 ] ^= R_n & mask; - return( 0 ); + return ( 0 ); } /* @@ -147,22 +143,22 @@ static int cmac_generate_subkeys( mbedtls_cipher_context_t *ctx, block_size = ctx->cipher_info->block_size; /* Calculate Ek(0) */ - if( ( ret = mbedtls_cipher_update( ctx, L, block_size, L, &olen ) ) != 0 ) + if ( ( ret = mbedtls_cipher_update( ctx, L, block_size, L, &olen ) ) != 0 ) goto exit; /* * Generate K1 and K2 */ - if( ( ret = cmac_multiply_by_u( K1, L , block_size ) ) != 0 ) + if ( ( ret = cmac_multiply_by_u( K1, L, block_size ) ) != 0 ) goto exit; - if( ( ret = cmac_multiply_by_u( K2, K1 , block_size ) ) != 0 ) + if ( ( ret = cmac_multiply_by_u( K2, K1, block_size ) ) != 0 ) goto exit; exit: mbedtls_zeroize( L, sizeof( L ) ); - return( ret ); + return ( ret ); } static void cmac_xor_block( unsigned char *output, const unsigned char *input1, @@ -171,7 +167,7 @@ static void cmac_xor_block( unsigned char *output, const unsigned char *input1, { size_t index; - for( index = 0; index < block_size; index++ ) + for ( index = 0; index < block_size; index++ ) output[ index ] = input1[ index ] ^ input2[ index ]; } @@ -188,11 +184,10 @@ static void cmac_pad( unsigned char padded_block[MBEDTLS_CIPHER_BLKSIZE_MAX], { size_t j; - for( j = 0; j < padded_block_len; j++ ) - { - if( j < last_block_len ) + for ( j = 0; j < padded_block_len; j++ ) { + if ( j < last_block_len ) padded_block[j] = last_block[j]; - else if( j == last_block_len ) + else if ( j == last_block_len ) padded_block[j] = 0x80; else padded_block[j] = 0x00; @@ -206,31 +201,30 @@ int mbedtls_cipher_cmac_starts( mbedtls_cipher_context_t *ctx, mbedtls_cmac_context_t *cmac_ctx; int retval; - if( ctx == NULL || ctx->cipher_info == NULL || key == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || key == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( ( retval = mbedtls_cipher_setkey( ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - return( retval ); + if ( ( retval = mbedtls_cipher_setkey( ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) + return ( retval ); type = ctx->cipher_info->type; - switch( type ) - { + switch ( type ) { case MBEDTLS_CIPHER_AES_128_ECB: case MBEDTLS_CIPHER_AES_192_ECB: case MBEDTLS_CIPHER_AES_256_ECB: case MBEDTLS_CIPHER_DES_EDE3_ECB: break; default: - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } /* Allocated and initialise in the cipher context memory for the CMAC * context */ cmac_ctx = mbedtls_calloc( 1, sizeof( mbedtls_cmac_context_t ) ); - if( cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); + if ( cmac_ctx == NULL ) + return ( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); ctx->cmac_ctx = cmac_ctx; @@ -247,9 +241,9 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, int n, j, ret = 0; size_t olen, block_size; - if( ctx == NULL || ctx->cipher_info == NULL || input == NULL || - ctx->cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || input == NULL || + ctx->cmac_ctx == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cmac_ctx = ctx->cmac_ctx; block_size = ctx->cipher_info->block_size; @@ -257,19 +251,17 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, /* Is there data still to process from the last call, that's greater in * size than a block? */ - if( cmac_ctx->unprocessed_len > 0 && - ilen > block_size - cmac_ctx->unprocessed_len ) - { + if ( cmac_ctx->unprocessed_len > 0 && + ilen > block_size - cmac_ctx->unprocessed_len ) { memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], input, block_size - cmac_ctx->unprocessed_len ); cmac_xor_block( state, cmac_ctx->unprocessed_block, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - { - goto exit; + if ( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, + &olen ) ) != 0 ) { + goto exit; } input += block_size - cmac_ctx->unprocessed_len; @@ -280,22 +272,20 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, /* n is the number of blocks including any final partial block */ n = ( ilen + block_size - 1 ) / block_size; - /* Iterate across the input data in block sized chunks */ - for( j = 0; j < n - 1; j++ ) - { + /* Iterate across the input data in block sized chunks */ + for ( j = 0; j < n - 1; j++ ) { cmac_xor_block( state, input, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - goto exit; + if ( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, + &olen ) ) != 0 ) + goto exit; ilen -= block_size; input += block_size; } /* If there is data left over that wasn't aligned to a block */ - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], input, ilen ); @@ -303,7 +293,7 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, } exit: - return( ret ); + return ( ret ); } int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, @@ -317,9 +307,9 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, int ret; size_t olen, block_size; - if( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL || - output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL || + output == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cmac_ctx = ctx->cmac_ctx; block_size = ctx->cipher_info->block_size; @@ -332,22 +322,18 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, last_block = cmac_ctx->unprocessed_block; /* Calculate last block */ - if( cmac_ctx->unprocessed_len < block_size ) - { + if ( cmac_ctx->unprocessed_len < block_size ) { cmac_pad( M_last, block_size, last_block, cmac_ctx->unprocessed_len ); cmac_xor_block( M_last, M_last, K2, block_size ); - } - else - { + } else { /* Last block is complete block */ cmac_xor_block( M_last, last_block, K1, block_size ); } cmac_xor_block( state, M_last, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, + &olen ) ) != 0 ) { goto exit; } @@ -364,15 +350,15 @@ exit: sizeof( cmac_ctx->unprocessed_block ) ); mbedtls_zeroize( state, MBEDTLS_CIPHER_BLKSIZE_MAX ); - return( ret ); + return ( ret ); } int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ) { mbedtls_cmac_context_t* cmac_ctx; - if( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cmac_ctx = ctx->cmac_ctx; @@ -383,7 +369,7 @@ int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ) mbedtls_zeroize( cmac_ctx->state, sizeof( cmac_ctx->state ) ); - return( 0 ); + return ( 0 ); } int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, @@ -394,20 +380,20 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, mbedtls_cipher_context_t ctx; int ret; - if( cipher_info == NULL || key == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( cipher_info == NULL || key == NULL || input == NULL || output == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); mbedtls_cipher_init( &ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) goto exit; ret = mbedtls_cipher_cmac_starts( &ctx, key, keylen ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; ret = mbedtls_cipher_cmac_update( &ctx, input, ilen ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; ret = mbedtls_cipher_cmac_finish( &ctx, output ); @@ -415,7 +401,7 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, exit: mbedtls_cipher_free( &ctx ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_AES_C) @@ -431,29 +417,25 @@ int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length, unsigned char zero_key[MBEDTLS_AES_BLOCK_SIZE]; unsigned char int_key[MBEDTLS_AES_BLOCK_SIZE]; - if( key == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( key == NULL || input == NULL || output == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { /* Failing at this point must be due to a build issue */ ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; goto exit; } - if( key_length == MBEDTLS_AES_BLOCK_SIZE ) - { + if ( key_length == MBEDTLS_AES_BLOCK_SIZE ) { /* Use key as is */ memcpy( int_key, key, MBEDTLS_AES_BLOCK_SIZE ); - } - else - { + } else { memset( zero_key, 0, MBEDTLS_AES_BLOCK_SIZE ); ret = mbedtls_cipher_cmac( cipher_info, zero_key, 128, key, key_length, int_key ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; } @@ -463,7 +445,7 @@ int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length, exit: mbedtls_zeroize( int_key, sizeof( int_key ) ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_AES_C */ @@ -731,55 +713,49 @@ static int cmac_test_subkeys( int verbose, unsigned char K2[MBEDTLS_CIPHER_BLKSIZE_MAX]; cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { /* Failing at this point must be due to a build issue */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } - for( i = 0; i < num_tests; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < num_tests; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " %s CMAC subkey #%u: ", testname, i + 1 ); mbedtls_cipher_init( &ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "test execution failed\n" ); goto cleanup; } - if( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "test execution failed\n" ); goto cleanup; } ret = cmac_generate_subkeys( &ctx, K1, K2 ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto cleanup; } - if( ( ret = memcmp( K1, subkeys, block_size ) ) != 0 || - ( ret = memcmp( K2, &subkeys[block_size], block_size ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = memcmp( K1, subkeys, block_size ) ) != 0 || + ( ret = memcmp( K2, &subkeys[block_size], block_size ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); mbedtls_cipher_free( &ctx ); @@ -791,7 +767,7 @@ cleanup: mbedtls_cipher_free( &ctx ); exit: - return( ret ); + return ( ret ); } static int cmac_test_wth_cipher( int verbose, @@ -810,39 +786,35 @@ static int cmac_test_wth_cipher( int verbose, unsigned char output[MBEDTLS_CIPHER_BLKSIZE_MAX]; cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { /* Failing at this point must be due to a build issue */ ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; goto exit; } - for( i = 0; i < num_tests; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < num_tests; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " %s CMAC #%u: ", testname, i + 1 ); - if( ( ret = mbedtls_cipher_cmac( cipher_info, key, keybits, messages, - message_lengths[i], output ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_cipher_cmac( cipher_info, key, keybits, messages, + message_lengths[i], output ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto exit; } - if( ( ret = memcmp( output, &expected_result[i * block_size], block_size ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = memcmp( output, &expected_result[i * block_size], block_size ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } exit: - return( ret ); + return ( ret ); } #if defined(MBEDTLS_AES_C) @@ -852,25 +824,21 @@ static int test_aes128_cmac_prf( int verbose ) int ret; unsigned char output[MBEDTLS_AES_BLOCK_SIZE]; - for( i = 0; i < NB_PRF_TESTS; i++ ) - { + for ( i = 0; i < NB_PRF_TESTS; i++ ) { mbedtls_printf( " AES CMAC 128 PRF #%u: ", i ); ret = mbedtls_aes_cmac_prf_128( PRFK, PRFKlen[i], PRFM, 20, output ); - if( ret != 0 || - memcmp( output, PRFT[i], MBEDTLS_AES_BLOCK_SIZE ) != 0 ) - { + if ( ret != 0 || + memcmp( output, PRFT[i], MBEDTLS_AES_BLOCK_SIZE ) != 0 ) { - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); - } - else if( verbose != 0 ) - { + return ( ret ); + } else if ( verbose != 0 ) { mbedtls_printf( "passed\n" ); } } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_AES_C */ @@ -880,152 +848,142 @@ int mbedtls_cmac_self_test( int verbose ) #if defined(MBEDTLS_AES_C) /* AES-128 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 128", - aes_128_key, - 128, - (const unsigned char*)aes_128_subkeys, - MBEDTLS_CIPHER_AES_128_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "AES 128", + aes_128_key, + 128, + (const unsigned char*)aes_128_subkeys, + MBEDTLS_CIPHER_AES_128_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } - if( ( ret = cmac_test_wth_cipher( verbose, - "AES 128", - aes_128_key, - 128, - test_message, - aes_message_lengths, - (const unsigned char*)aes_128_expected_result, - MBEDTLS_CIPHER_AES_128_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_wth_cipher( verbose, + "AES 128", + aes_128_key, + 128, + test_message, + aes_message_lengths, + (const unsigned char*)aes_128_expected_result, + MBEDTLS_CIPHER_AES_128_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } /* AES-192 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 192", - aes_192_key, - 192, - (const unsigned char*)aes_192_subkeys, - MBEDTLS_CIPHER_AES_192_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "AES 192", + aes_192_key, + 192, + (const unsigned char*)aes_192_subkeys, + MBEDTLS_CIPHER_AES_192_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } - if( ( ret = cmac_test_wth_cipher( verbose, - "AES 192", - aes_192_key, - 192, - test_message, - aes_message_lengths, - (const unsigned char*)aes_192_expected_result, - MBEDTLS_CIPHER_AES_192_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_wth_cipher( verbose, + "AES 192", + aes_192_key, + 192, + test_message, + aes_message_lengths, + (const unsigned char*)aes_192_expected_result, + MBEDTLS_CIPHER_AES_192_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } /* AES-256 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 256", - aes_256_key, - 256, - (const unsigned char*)aes_256_subkeys, - MBEDTLS_CIPHER_AES_256_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "AES 256", + aes_256_key, + 256, + (const unsigned char*)aes_256_subkeys, + MBEDTLS_CIPHER_AES_256_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } - if( ( ret = cmac_test_wth_cipher ( verbose, - "AES 256", - aes_256_key, - 256, - test_message, - aes_message_lengths, - (const unsigned char*)aes_256_expected_result, - MBEDTLS_CIPHER_AES_256_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_wth_cipher ( verbose, + "AES 256", + aes_256_key, + 256, + test_message, + aes_message_lengths, + (const unsigned char*)aes_256_expected_result, + MBEDTLS_CIPHER_AES_256_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_DES_C) /* 3DES 2 key */ - if( ( ret = cmac_test_subkeys( verbose, - "3DES 2 key", - des3_2key_key, - 192, - (const unsigned char*)des3_2key_subkeys, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "3DES 2 key", + des3_2key_key, + 192, + (const unsigned char*)des3_2key_subkeys, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } - if( ( ret = cmac_test_wth_cipher( verbose, - "3DES 2 key", - des3_2key_key, - 192, - test_message, - des3_message_lengths, - (const unsigned char*)des3_2key_expected_result, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_wth_cipher( verbose, + "3DES 2 key", + des3_2key_key, + 192, + test_message, + des3_message_lengths, + (const unsigned char*)des3_2key_expected_result, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } /* 3DES 3 key */ - if( ( ret = cmac_test_subkeys( verbose, - "3DES 3 key", - des3_3key_key, - 192, - (const unsigned char*)des3_3key_subkeys, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "3DES 3 key", + des3_3key_key, + 192, + (const unsigned char*)des3_3key_subkeys, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } - if( ( ret = cmac_test_wth_cipher( verbose, - "3DES 3 key", - des3_3key_key, - 192, - test_message, - des3_message_lengths, - (const unsigned char*)des3_3key_expected_result, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_wth_cipher( verbose, + "3DES 3 key", + des3_3key_key, + 192, + test_message, + des3_message_lengths, + (const unsigned char*)des3_3key_expected_result, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( ( ret = test_aes128_cmac_prf( verbose ) ) != 0 ) - return( ret ); + if ( ( ret = test_aes128_cmac_prf( verbose ) ) != 0 ) + return ( ret ); #endif /* MBEDTLS_AES_C */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ctr_drbg.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ctr_drbg.c index 386f8adb..e0837ca2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ctr_drbg.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ctr_drbg.c @@ -50,8 +50,10 @@ #endif /* MBEDTLS_SELF_TEST */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -71,12 +73,12 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ) * NIST tests to succeed (which require known length fixed entropy) */ int mbedtls_ctr_drbg_seed_entropy_len( - mbedtls_ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len, - size_t entropy_len ) + mbedtls_ctr_drbg_context *ctx, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len, + size_t entropy_len ) { int ret; unsigned char key[MBEDTLS_CTR_DRBG_KEYSIZE]; @@ -96,25 +98,25 @@ int mbedtls_ctr_drbg_seed_entropy_len( */ mbedtls_aes_setkey_enc( &ctx->aes_ctx, key, MBEDTLS_CTR_DRBG_KEYBITS ); - if( ( ret = mbedtls_ctr_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ctr_drbg_reseed( ctx, custom, len ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ) { - return( mbedtls_ctr_drbg_seed_entropy_len( ctx, f_entropy, p_entropy, custom, len, - MBEDTLS_CTR_DRBG_ENTROPY_LEN ) ); + return ( mbedtls_ctr_drbg_seed_entropy_len( ctx, f_entropy, p_entropy, custom, len, + MBEDTLS_CTR_DRBG_ENTROPY_LEN ) ); } void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; #if defined(MBEDTLS_THREADING_C) @@ -152,8 +154,8 @@ static int block_cipher_df( unsigned char *output, int i, j; size_t buf_len, use_len; - if( data_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if ( data_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); memset( buf, 0, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + MBEDTLS_CTR_DRBG_BLOCKSIZE + 16 ); mbedtls_aes_init( &aes_ctx ); @@ -177,7 +179,7 @@ static int block_cipher_df( unsigned char *output, buf_len = MBEDTLS_CTR_DRBG_BLOCKSIZE + 8 + data_len + 1; - for( i = 0; i < MBEDTLS_CTR_DRBG_KEYSIZE; i++ ) + for ( i = 0; i < MBEDTLS_CTR_DRBG_KEYSIZE; i++ ) key[i] = i; mbedtls_aes_setkey_enc( &aes_ctx, key, MBEDTLS_CTR_DRBG_KEYBITS ); @@ -185,15 +187,13 @@ static int block_cipher_df( unsigned char *output, /* * Reduce data to MBEDTLS_CTR_DRBG_SEEDLEN bytes of data */ - for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) - { + for ( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) { p = buf; memset( chain, 0, MBEDTLS_CTR_DRBG_BLOCKSIZE ); use_len = buf_len; - while( use_len > 0 ) - { - for( i = 0; i < MBEDTLS_CTR_DRBG_BLOCKSIZE; i++ ) + while ( use_len > 0 ) { + for ( i = 0; i < MBEDTLS_CTR_DRBG_BLOCKSIZE; i++ ) chain[i] ^= p[i]; p += MBEDTLS_CTR_DRBG_BLOCKSIZE; use_len -= ( use_len >= MBEDTLS_CTR_DRBG_BLOCKSIZE ) ? @@ -217,8 +217,7 @@ static int block_cipher_df( unsigned char *output, iv = tmp + MBEDTLS_CTR_DRBG_KEYSIZE; p = output; - for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) - { + for ( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) { mbedtls_aes_crypt_ecb( &aes_ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); memcpy( p, iv, MBEDTLS_CTR_DRBG_BLOCKSIZE ); p += MBEDTLS_CTR_DRBG_BLOCKSIZE; @@ -226,11 +225,11 @@ static int block_cipher_df( unsigned char *output, mbedtls_aes_free( &aes_ctx ); - return( 0 ); + return ( 0 ); } static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, - const unsigned char data[MBEDTLS_CTR_DRBG_SEEDLEN] ) + const unsigned char data[MBEDTLS_CTR_DRBG_SEEDLEN] ) { unsigned char tmp[MBEDTLS_CTR_DRBG_SEEDLEN]; unsigned char *p = tmp; @@ -238,13 +237,12 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, memset( tmp, 0, MBEDTLS_CTR_DRBG_SEEDLEN ); - for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) - { + for ( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) { /* * Increase counter */ - for( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) + for ( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) + if ( ++ctx->counter[i - 1] != 0 ) break; /* @@ -255,7 +253,7 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, p += MBEDTLS_CTR_DRBG_BLOCKSIZE; } - for( i = 0; i < MBEDTLS_CTR_DRBG_SEEDLEN; i++ ) + for ( i = 0; i < MBEDTLS_CTR_DRBG_SEEDLEN; i++ ) tmp[i] ^= data[i]; /* @@ -264,19 +262,18 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, mbedtls_aes_setkey_enc( &ctx->aes_ctx, tmp, MBEDTLS_CTR_DRBG_KEYBITS ); memcpy( ctx->counter, tmp + MBEDTLS_CTR_DRBG_KEYSIZE, MBEDTLS_CTR_DRBG_BLOCKSIZE ); - return( 0 ); + return ( 0 ); } void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) + const unsigned char *additional, size_t add_len ) { unsigned char add_input[MBEDTLS_CTR_DRBG_SEEDLEN]; - if( add_len > 0 ) - { + if ( add_len > 0 ) { /* MAX_INPUT would be more logical here, but we have to match * block_cipher_df()'s limits since we can't propagate errors */ - if( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + if ( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) add_len = MBEDTLS_CTR_DRBG_MAX_SEED_INPUT; block_cipher_df( add_input, additional, add_len ); @@ -285,23 +282,22 @@ void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, } int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, - const unsigned char *additional, size_t len ) + const unsigned char *additional, size_t len ) { unsigned char seed[MBEDTLS_CTR_DRBG_MAX_SEED_INPUT]; size_t seedlen = 0; - if( ctx->entropy_len + len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if ( ctx->entropy_len + len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); memset( seed, 0, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ); /* * Gather entropy_len bytes of entropy to seed state */ - if( 0 != ctx->f_entropy( ctx->p_entropy, seed, - ctx->entropy_len ) ) - { - return( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); + if ( 0 != ctx->f_entropy( ctx->p_entropy, seed, + ctx->entropy_len ) ) { + return ( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); } seedlen += ctx->entropy_len; @@ -309,8 +305,7 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, /* * Add additional data */ - if( additional && len ) - { + if ( additional && len ) { memcpy( seed + seedlen, additional, len ); seedlen += len; } @@ -326,12 +321,12 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, ctr_drbg_update_internal( ctx, seed ); ctx->reseed_counter = 1; - return( 0 ); + return ( 0 ); } int mbedtls_ctr_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, size_t add_len ) + unsigned char *output, size_t output_len, + const unsigned char *additional, size_t add_len ) { int ret = 0; mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; @@ -341,36 +336,33 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, int i; size_t use_len; - if( output_len > MBEDTLS_CTR_DRBG_MAX_REQUEST ) - return( MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG ); + if ( output_len > MBEDTLS_CTR_DRBG_MAX_REQUEST ) + return ( MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG ); - if( add_len > MBEDTLS_CTR_DRBG_MAX_INPUT ) - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if ( add_len > MBEDTLS_CTR_DRBG_MAX_INPUT ) + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); memset( add_input, 0, MBEDTLS_CTR_DRBG_SEEDLEN ); - if( ctx->reseed_counter > ctx->reseed_interval || - ctx->prediction_resistance ) - { - if( ( ret = mbedtls_ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); + if ( ctx->reseed_counter > ctx->reseed_interval || + ctx->prediction_resistance ) { + if ( ( ret = mbedtls_ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) + return ( ret ); add_len = 0; } - if( add_len > 0 ) - { + if ( add_len > 0 ) { block_cipher_df( add_input, additional, add_len ); ctr_drbg_update_internal( ctx, add_input ); } - while( output_len > 0 ) - { + while ( output_len > 0 ) { /* * Increase counter */ - for( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) + for ( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) + if ( ++ctx->counter[i - 1] != 0 ) break; /* @@ -379,7 +371,7 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, mbedtls_aes_crypt_ecb( &ctx->aes_ctx, MBEDTLS_AES_ENCRYPT, ctx->counter, tmp ); use_len = ( output_len > MBEDTLS_CTR_DRBG_BLOCKSIZE ) ? MBEDTLS_CTR_DRBG_BLOCKSIZE : - output_len; + output_len; /* * Copy random block to destination */ @@ -392,7 +384,7 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, ctx->reseed_counter++; - return( 0 ); + return ( 0 ); } int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_len ) @@ -401,18 +393,18 @@ int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_l mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = mbedtls_ctr_drbg_random_with_add( ctx, output, output_len, NULL, 0 ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_FS_IO) @@ -422,14 +414,13 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char FILE *f; unsigned char buf[ MBEDTLS_CTR_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "wb" ) ) == NULL ) + return ( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); - if( ( ret = mbedtls_ctr_drbg_random( ctx, buf, MBEDTLS_CTR_DRBG_MAX_INPUT ) ) != 0 ) + if ( ( ret = mbedtls_ctr_drbg_random( ctx, buf, MBEDTLS_CTR_DRBG_MAX_INPUT ) ) != 0 ) goto exit; - if( fwrite( buf, 1, MBEDTLS_CTR_DRBG_MAX_INPUT, f ) != MBEDTLS_CTR_DRBG_MAX_INPUT ) - { + if ( fwrite( buf, 1, MBEDTLS_CTR_DRBG_MAX_INPUT, f ) != MBEDTLS_CTR_DRBG_MAX_INPUT ) { ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR; goto exit; } @@ -438,7 +429,7 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char exit: fclose( f ); - return( ret ); + return ( ret ); } int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char *path ) @@ -447,74 +438,78 @@ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char size_t n; unsigned char buf[ MBEDTLS_CTR_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); n = (size_t) ftell( f ); fseek( f, 0, SEEK_SET ); - if( n > MBEDTLS_CTR_DRBG_MAX_INPUT ) - { + if ( n > MBEDTLS_CTR_DRBG_MAX_INPUT ) { fclose( f ); - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); } - if( fread( buf, 1, n, f ) != n ) - { + if ( fread( buf, 1, n, f ) != n ) { fclose( f ); - return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); } fclose( f ); mbedtls_ctr_drbg_update( ctx, buf, n ); - return( mbedtls_ctr_drbg_write_seed_file( ctx, path ) ); + return ( mbedtls_ctr_drbg_write_seed_file( ctx, path ) ); } #endif /* MBEDTLS_FS_IO */ #if defined(MBEDTLS_SELF_TEST) -static const unsigned char entropy_source_pr[96] = - { 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, - 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, - 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, - 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, - 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, - 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, - 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, - 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, - 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, - 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, - 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, - 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 }; +static const unsigned char entropy_source_pr[96] = { + 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, + 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, + 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, + 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, + 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, + 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, + 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, + 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, + 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, + 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, + 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, + 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 +}; -static const unsigned char entropy_source_nopr[64] = - { 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, - 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, - 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, - 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, - 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, - 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, - 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, - 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e }; +static const unsigned char entropy_source_nopr[64] = { + 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, + 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, + 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, + 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, + 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, + 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, + 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, + 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e +}; -static const unsigned char nonce_pers_pr[16] = - { 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, - 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c }; +static const unsigned char nonce_pers_pr[16] = { + 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, + 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c +}; -static const unsigned char nonce_pers_nopr[16] = - { 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, - 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f }; +static const unsigned char nonce_pers_nopr[16] = { + 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, + 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f +}; -static const unsigned char result_pr[16] = - { 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, - 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 }; +static const unsigned char result_pr[16] = { + 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, + 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 +}; -static const unsigned char result_nopr[16] = - { 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, - 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f }; +static const unsigned char result_nopr[16] = { + 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, + 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f +}; static size_t test_offset; static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, @@ -523,7 +518,7 @@ static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, const unsigned char *p = data; memcpy( buf, p + test_offset, len ); test_offset += len; - return( 0 ); + return ( 0 ); } #define CHK( c ) if( (c) != 0 ) \ @@ -546,12 +541,12 @@ int mbedtls_ctr_drbg_self_test( int verbose ) /* * Based on a NIST CTR_DRBG test vector (PR = True) */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CTR_DRBG (PR = TRUE) : " ); test_offset = 0; CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy, - (void *) entropy_source_pr, nonce_pers_pr, 16, 32 ) ); + (void *) entropy_source_pr, nonce_pers_pr, 16, 32 ) ); mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); @@ -559,20 +554,20 @@ int mbedtls_ctr_drbg_self_test( int verbose ) mbedtls_ctr_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); /* * Based on a NIST CTR_DRBG test vector (PR = FALSE) */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CTR_DRBG (PR = FALSE): " ); mbedtls_ctr_drbg_init( &ctx ); test_offset = 0; CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy, - (void *) entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); + (void *) entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) ); CHK( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) ); @@ -580,13 +575,13 @@ int mbedtls_ctr_drbg_self_test( int verbose ) mbedtls_ctr_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) - mbedtls_printf( "\n" ); + if ( verbose != 0 ) + mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/debug.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/debug.c index a9cd814b..8f29902e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/debug.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/debug.c @@ -86,7 +86,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, char str[DEBUG_BUF_SIZE]; int ret; - if( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || level > debug_threshold ) + if ( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || level > debug_threshold ) return; va_start( argp, format ); @@ -95,9 +95,8 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, ret = _vsnprintf_s( str, DEBUG_BUF_SIZE, _TRUNCATE, format, argp ); #else ret = _vsnprintf( str, DEBUG_BUF_SIZE, format, argp ); - if( ret < 0 || (size_t) ret == DEBUG_BUF_SIZE ) - { - str[DEBUG_BUF_SIZE-1] = '\0'; + if ( ret < 0 || (size_t) ret == DEBUG_BUF_SIZE ) { + str[DEBUG_BUF_SIZE - 1] = '\0'; ret = -1; } #endif @@ -106,8 +105,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, #endif va_end( argp ); - if( ret >= 0 && ret < DEBUG_BUF_SIZE - 1 ) - { + if ( ret >= 0 && ret < DEBUG_BUF_SIZE - 1 ) { str[ret] = '\n'; str[ret + 1] = '\0'; } @@ -116,12 +114,12 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, } void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, int ret ) + const char *file, int line, + const char *text, int ret ) { char str[DEBUG_BUF_SIZE]; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; /* @@ -129,42 +127,39 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, * the logs would be quickly flooded with WANT_READ, so ignore that. * Don't ignore WANT_WRITE however, since is is usually rare. */ - if( ret == MBEDTLS_ERR_SSL_WANT_READ ) + if ( ret == MBEDTLS_ERR_SSL_WANT_READ ) return; mbedtls_snprintf( str, sizeof( str ), "%s() returned %d (-0x%04x)\n", - text, ret, -ret ); + text, ret, -ret ); debug_send_line( ssl, level, file, line, str ); } void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, const char *text, - const unsigned char *buf, size_t len ) + const char *file, int line, const char *text, + const unsigned char *buf, size_t len ) { char str[DEBUG_BUF_SIZE]; char txt[17]; size_t i, idx = 0; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; mbedtls_snprintf( str + idx, sizeof( str ) - idx, "dumping '%s' (%u bytes)\n", - text, (unsigned int) len ); + text, (unsigned int) len ); debug_send_line( ssl, level, file, line, str ); idx = 0; memset( txt, 0, sizeof( txt ) ); - for( i = 0; i < len; i++ ) - { - if( i >= 4096 ) + for ( i = 0; i < len; i++ ) { + if ( i >= 4096 ) break; - if( i % 16 == 0 ) - { - if( i > 0 ) - { + if ( i % 16 == 0 ) { + if ( i > 0 ) { mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); debug_send_line( ssl, level, file, line, str ); @@ -173,18 +168,17 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, } idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, "%04x: ", - (unsigned int) i ); + (unsigned int) i ); } idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %02x", - (unsigned int) buf[i] ); + (unsigned int) buf[i] ); txt[i % 16] = ( buf[i] > 31 && buf[i] < 127 ) ? buf[i] : '.' ; } - if( len > 0 ) - { - for( /* i = i */; i % 16 != 0; i++ ) + if ( len > 0 ) { + for ( /* i = i */; i % 16 != 0; i++ ) idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " " ); mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); @@ -194,12 +188,12 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, #if defined(MBEDTLS_ECP_C) void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_ecp_point *X ) + const char *file, int line, + const char *text, const mbedtls_ecp_point *X ) { char str[DEBUG_BUF_SIZE]; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; mbedtls_snprintf( str, sizeof( str ), "%s(X)", text ); @@ -212,46 +206,42 @@ void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, #if defined(MBEDTLS_BIGNUM_C) void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_mpi *X ) + const char *file, int line, + const char *text, const mbedtls_mpi *X ) { char str[DEBUG_BUF_SIZE]; int j, k, zeros = 1; size_t i, n, idx = 0; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || X == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || X == NULL || level > debug_threshold ) return; - for( n = X->n - 1; n > 0; n-- ) - if( X->p[n] != 0 ) + for ( n = X->n - 1; n > 0; n-- ) + if ( X->p[n] != 0 ) break; - for( j = ( sizeof(mbedtls_mpi_uint) << 3 ) - 1; j >= 0; j-- ) - if( ( ( X->p[n] >> j ) & 1 ) != 0 ) + for ( j = ( sizeof(mbedtls_mpi_uint) << 3 ) - 1; j >= 0; j-- ) + if ( ( ( X->p[n] >> j ) & 1 ) != 0 ) break; mbedtls_snprintf( str + idx, sizeof( str ) - idx, "value of '%s' (%d bits) is:\n", - text, (int) ( ( n * ( sizeof(mbedtls_mpi_uint) << 3 ) ) + j + 1 ) ); + text, (int) ( ( n * ( sizeof(mbedtls_mpi_uint) << 3 ) ) + j + 1 ) ); debug_send_line( ssl, level, file, line, str ); idx = 0; - for( i = n + 1, j = 0; i > 0; i-- ) - { - if( zeros && X->p[i - 1] == 0 ) + for ( i = n + 1, j = 0; i > 0; i-- ) { + if ( zeros && X->p[i - 1] == 0 ) continue; - for( k = sizeof( mbedtls_mpi_uint ) - 1; k >= 0; k-- ) - { - if( zeros && ( ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ) == 0 ) + for ( k = sizeof( mbedtls_mpi_uint ) - 1; k >= 0; k-- ) { + if ( zeros && ( ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ) == 0 ) continue; else zeros = 0; - if( j % 16 == 0 ) - { - if( j > 0 ) - { + if ( j % 16 == 0 ) { + if ( j > 0 ) { mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); debug_send_line( ssl, level, file, line, str ); idx = 0; @@ -259,14 +249,14 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, } idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %02x", (unsigned int) - ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ); + ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ); j++; } } - if( zeros == 1 ) + if ( zeros == 1 ) idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " 00" ); mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); @@ -285,31 +275,29 @@ static void debug_print_pk( const mbedtls_ssl_context *ssl, int level, memset( items, 0, sizeof( items ) ); - if( mbedtls_pk_debug( pk, items ) != 0 ) - { + if ( mbedtls_pk_debug( pk, items ) != 0 ) { debug_send_line( ssl, level, file, line, - "invalid PK context\n" ); + "invalid PK context\n" ); return; } - for( i = 0; i < MBEDTLS_PK_DEBUG_MAX_ITEMS; i++ ) - { - if( items[i].type == MBEDTLS_PK_DEBUG_NONE ) + for ( i = 0; i < MBEDTLS_PK_DEBUG_MAX_ITEMS; i++ ) { + if ( items[i].type == MBEDTLS_PK_DEBUG_NONE ) return; mbedtls_snprintf( name, sizeof( name ), "%s%s", text, items[i].name ); name[sizeof( name ) - 1] = '\0'; - if( items[i].type == MBEDTLS_PK_DEBUG_MPI ) + if ( items[i].type == MBEDTLS_PK_DEBUG_MPI ) mbedtls_debug_print_mpi( ssl, level, file, line, name, items[i].value ); else #if defined(MBEDTLS_ECP_C) - if( items[i].type == MBEDTLS_PK_DEBUG_ECP ) - mbedtls_debug_print_ecp( ssl, level, file, line, name, items[i].value ); - else + if ( items[i].type == MBEDTLS_PK_DEBUG_ECP ) + mbedtls_debug_print_ecp( ssl, level, file, line, name, items[i].value ); + else #endif - debug_send_line( ssl, level, file, line, - "should not happen\n" ); + debug_send_line( ssl, level, file, line, + "should not happen\n" ); } } @@ -320,12 +308,10 @@ static void debug_print_line_by_line( const mbedtls_ssl_context *ssl, int level, const char *start, *cur; start = text; - for( cur = text; *cur != '\0'; cur++ ) - { - if( *cur == '\n' ) - { + for ( cur = text; *cur != '\0'; cur++ ) { + if ( *cur == '\n' ) { size_t len = cur - start + 1; - if( len > DEBUG_BUF_SIZE - 1 ) + if ( len > DEBUG_BUF_SIZE - 1 ) len = DEBUG_BUF_SIZE - 1; memcpy( str, start, len ); @@ -339,17 +325,16 @@ static void debug_print_line_by_line( const mbedtls_ssl_context *ssl, int level, } void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_x509_crt *crt ) + const char *file, int line, + const char *text, const mbedtls_x509_crt *crt ) { char str[DEBUG_BUF_SIZE]; int i = 0; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || crt == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || crt == NULL || level > debug_threshold ) return; - while( crt != NULL ) - { + while ( crt != NULL ) { char buf[1024]; mbedtls_snprintf( str, sizeof( str ), "%s #%d:\n", text, ++i ); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/des.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/des.c index 09f95cfc..8b8fec0a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/des.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/des.c @@ -49,8 +49,10 @@ #if !defined(MBEDTLS_DES_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -79,8 +81,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { /* * Expanded DES S-boxes */ -static const uint32_t SB1[64] = -{ +static const uint32_t SB1[64] = { 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, @@ -99,8 +100,7 @@ static const uint32_t SB1[64] = 0x00010004, 0x00010400, 0x00000000, 0x01010004 }; -static const uint32_t SB2[64] = -{ +static const uint32_t SB2[64] = { 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, @@ -119,8 +119,7 @@ static const uint32_t SB2[64] = 0x80000000, 0x80100020, 0x80108020, 0x00108000 }; -static const uint32_t SB3[64] = -{ +static const uint32_t SB3[64] = { 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, @@ -139,8 +138,7 @@ static const uint32_t SB3[64] = 0x00020208, 0x00000008, 0x08020008, 0x00020200 }; -static const uint32_t SB4[64] = -{ +static const uint32_t SB4[64] = { 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, @@ -159,8 +157,7 @@ static const uint32_t SB4[64] = 0x00000080, 0x00800000, 0x00002000, 0x00802080 }; -static const uint32_t SB5[64] = -{ +static const uint32_t SB5[64] = { 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, @@ -179,8 +176,7 @@ static const uint32_t SB5[64] = 0x00000000, 0x40080000, 0x02080100, 0x40000100 }; -static const uint32_t SB6[64] = -{ +static const uint32_t SB6[64] = { 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, @@ -199,8 +195,7 @@ static const uint32_t SB6[64] = 0x20404000, 0x20000000, 0x00400010, 0x20004010 }; -static const uint32_t SB7[64] = -{ +static const uint32_t SB7[64] = { 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, @@ -219,8 +214,7 @@ static const uint32_t SB7[64] = 0x04000002, 0x04000800, 0x00000800, 0x00200002 }; -static const uint32_t SB8[64] = -{ +static const uint32_t SB8[64] = { 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, @@ -242,16 +236,14 @@ static const uint32_t SB8[64] = /* * PC1: left and right halves bit-swap */ -static const uint32_t LHs[16] = -{ +static const uint32_t LHs[16] = { 0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001, 0x00010100, 0x00010101, 0x01000000, 0x01000001, 0x01000100, 0x01000101, 0x01010000, 0x01010001, 0x01010100, 0x01010101 }; -static const uint32_t RHs[16] = -{ +static const uint32_t RHs[16] = { 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001, 0x00010001, 0x01010001, @@ -313,7 +305,7 @@ void mbedtls_des_init( mbedtls_des_context *ctx ) void mbedtls_des_free( mbedtls_des_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_des_context ) ); @@ -326,28 +318,29 @@ void mbedtls_des3_init( mbedtls_des3_context *ctx ) void mbedtls_des3_free( mbedtls_des3_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_des3_context ) ); } static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, - 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, - 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, - 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, - 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, - 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, - 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, - 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, - 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, - 254 }; + 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, + 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, + 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, + 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, + 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, + 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, + 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, + 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, + 254 + }; void mbedtls_des_key_set_parity( unsigned char key[MBEDTLS_DES_KEY_SIZE] ) { int i; - for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + for ( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) key[i] = odd_parity_table[key[i] / 2]; } @@ -358,11 +351,11 @@ int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SI { int i; - for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) - if( key[i] != odd_parity_table[key[i] / 2] ) - return( 1 ); + for ( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + if ( key[i] != odd_parity_table[key[i] / 2] ) + return ( 1 ); - return( 0 ); + return ( 0 ); } /* @@ -388,8 +381,7 @@ int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SI #define WEAK_KEY_COUNT 16 -static const unsigned char weak_key_table[WEAK_KEY_COUNT][MBEDTLS_DES_KEY_SIZE] = -{ +static const unsigned char weak_key_table[WEAK_KEY_COUNT][MBEDTLS_DES_KEY_SIZE] = { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, @@ -413,11 +405,11 @@ int mbedtls_des_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) { int i; - for( i = 0; i < WEAK_KEY_COUNT; i++ ) - if( memcmp( weak_key_table[i], key, MBEDTLS_DES_KEY_SIZE) == 0 ) - return( 1 ); + for ( i = 0; i < WEAK_KEY_COUNT; i++ ) + if ( memcmp( weak_key_table[i], key, MBEDTLS_DES_KEY_SIZE) == 0 ) + return ( 1 ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_DES_SETKEY_ALT) @@ -432,18 +424,22 @@ void mbedtls_des_setkey( uint32_t SK[32], const unsigned char key[MBEDTLS_DES_KE /* * Permuted Choice 1 */ - T = ((Y >> 4) ^ X) & 0x0F0F0F0F; X ^= T; Y ^= (T << 4); - T = ((Y ) ^ X) & 0x10101010; X ^= T; Y ^= (T ); + T = ((Y >> 4) ^ X) & 0x0F0F0F0F; + X ^= T; + Y ^= (T << 4); + T = ((Y ) ^ X) & 0x10101010; + X ^= T; + Y ^= (T ); X = (LHs[ (X ) & 0xF] << 3) | (LHs[ (X >> 8) & 0xF ] << 2) - | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) - | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) - | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); + | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) + | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) + | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); Y = (RHs[ (Y >> 1) & 0xF] << 3) | (RHs[ (Y >> 9) & 0xF ] << 2) - | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) - | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) - | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); + | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) + | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) + | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); X &= 0x0FFFFFFF; Y &= 0x0FFFFFFF; @@ -451,42 +447,38 @@ void mbedtls_des_setkey( uint32_t SK[32], const unsigned char key[MBEDTLS_DES_KE /* * calculate subkeys */ - for( i = 0; i < 16; i++ ) - { - if( i < 2 || i == 8 || i == 15 ) - { + for ( i = 0; i < 16; i++ ) { + if ( i < 2 || i == 8 || i == 15 ) { X = ((X << 1) | (X >> 27)) & 0x0FFFFFFF; Y = ((Y << 1) | (Y >> 27)) & 0x0FFFFFFF; - } - else - { + } else { X = ((X << 2) | (X >> 26)) & 0x0FFFFFFF; Y = ((Y << 2) | (Y >> 26)) & 0x0FFFFFFF; } *SK++ = ((X << 4) & 0x24000000) | ((X << 28) & 0x10000000) - | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) - | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) - | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) - | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) - | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) - | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) - | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) - | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) - | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) - | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); + | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) + | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) + | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) + | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) + | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) + | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) + | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) + | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) + | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) + | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); *SK++ = ((X << 15) & 0x20000000) | ((X << 17) & 0x10000000) - | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) - | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) - | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) - | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) - | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) - | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) - | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) - | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) - | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) - | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); + | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) + | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) + | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) + | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) + | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) + | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) + | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) + | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) + | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) + | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); } } #endif /* !MBEDTLS_DES_SETKEY_ALT */ @@ -498,7 +490,7 @@ int mbedtls_des_setkey_enc( mbedtls_des_context *ctx, const unsigned char key[MB { mbedtls_des_setkey( ctx->sk, key ); - return( 0 ); + return ( 0 ); } /* @@ -510,26 +502,24 @@ int mbedtls_des_setkey_dec( mbedtls_des_context *ctx, const unsigned char key[MB mbedtls_des_setkey( ctx->sk, key ); - for( i = 0; i < 16; i += 2 ) - { + for ( i = 0; i < 16; i += 2 ) { SWAP( ctx->sk[i ], ctx->sk[30 - i] ); SWAP( ctx->sk[i + 1], ctx->sk[31 - i] ); } - return( 0 ); + return ( 0 ); } static void des3_set2key( uint32_t esk[96], uint32_t dsk[96], - const unsigned char key[MBEDTLS_DES_KEY_SIZE*2] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) { int i; mbedtls_des_setkey( esk, key ); mbedtls_des_setkey( dsk + 32, key + 8 ); - for( i = 0; i < 32; i += 2 ) - { + for ( i = 0; i < 32; i += 2 ) { dsk[i ] = esk[30 - i]; dsk[i + 1] = esk[31 - i]; @@ -548,28 +538,28 @@ static void des3_set2key( uint32_t esk[96], * Triple-DES key schedule (112-bit, encryption) */ int mbedtls_des3_set2key_enc( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) { uint32_t sk[96]; des3_set2key( ctx->sk, sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } /* * Triple-DES key schedule (112-bit, decryption) */ int mbedtls_des3_set2key_dec( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) { uint32_t sk[96]; des3_set2key( sk, ctx->sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } static void des3_set3key( uint32_t esk[96], @@ -582,8 +572,7 @@ static void des3_set3key( uint32_t esk[96], mbedtls_des_setkey( dsk + 32, key + 8 ); mbedtls_des_setkey( esk + 64, key + 16 ); - for( i = 0; i < 32; i += 2 ) - { + for ( i = 0; i < 32; i += 2 ) { dsk[i ] = esk[94 - i]; dsk[i + 1] = esk[95 - i]; @@ -599,28 +588,28 @@ static void des3_set3key( uint32_t esk[96], * Triple-DES key schedule (168-bit, encryption) */ int mbedtls_des3_set3key_enc( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) { uint32_t sk[96]; des3_set3key( ctx->sk, sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } /* * Triple-DES key schedule (168-bit, decryption) */ int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) { uint32_t sk[96]; des3_set3key( sk, ctx->sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } /* @@ -628,8 +617,8 @@ int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, */ #if !defined(MBEDTLS_DES_CRYPT_ECB_ALT) int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) + const unsigned char input[8], + unsigned char output[8] ) { int i; uint32_t X, Y, T, *SK; @@ -641,8 +630,7 @@ int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, DES_IP( X, Y ); - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( Y, X ); DES_ROUND( X, Y ); } @@ -652,7 +640,7 @@ int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, PUT_UINT32_BE( Y, output, 0 ); PUT_UINT32_BE( X, output, 4 ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_DES_CRYPT_ECB_ALT */ @@ -661,23 +649,21 @@ int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, * DES-CBC buffer encryption/decryption */ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[8]; - if( length % 8 ) - return( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); + if ( length % 8 ) + return ( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) + if ( mode == MBEDTLS_DES_ENCRYPT ) { + while ( length > 0 ) { + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_des_crypt_ecb( ctx, output, output ); @@ -687,15 +673,12 @@ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, output += 8; length -= 8; } - } - else /* MBEDTLS_DES_DECRYPT */ - { - while( length > 0 ) - { + } else { /* MBEDTLS_DES_DECRYPT */ + while ( length > 0 ) { memcpy( temp, input, 8 ); mbedtls_des_crypt_ecb( ctx, input, output ); - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 8 ); @@ -706,7 +689,7 @@ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -715,8 +698,8 @@ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, */ #if !defined(MBEDTLS_DES3_CRYPT_ECB_ALT) int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) + const unsigned char input[8], + unsigned char output[8] ) { int i; uint32_t X, Y, T, *SK; @@ -728,20 +711,17 @@ int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, DES_IP( X, Y ); - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( Y, X ); DES_ROUND( X, Y ); } - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( X, Y ); DES_ROUND( Y, X ); } - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( Y, X ); DES_ROUND( X, Y ); } @@ -751,7 +731,7 @@ int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, PUT_UINT32_BE( Y, output, 0 ); PUT_UINT32_BE( X, output, 4 ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_DES3_CRYPT_ECB_ALT */ @@ -760,23 +740,21 @@ int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, * 3DES-CBC buffer encryption/decryption */ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[8]; - if( length % 8 ) - return( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); + if ( length % 8 ) + return ( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) + if ( mode == MBEDTLS_DES_ENCRYPT ) { + while ( length > 0 ) { + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_des3_crypt_ecb( ctx, output, output ); @@ -786,15 +764,12 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, output += 8; length -= 8; } - } - else /* MBEDTLS_DES_DECRYPT */ - { - while( length > 0 ) - { + } else { /* MBEDTLS_DES_DECRYPT */ + while ( length > 0 ) { memcpy( temp, input, 8 ); mbedtls_des3_crypt_ecb( ctx, input, output ); - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 8 ); @@ -805,7 +780,7 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -817,47 +792,40 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, * * http://csrc.nist.gov/groups/STM/cavp/documents/des/tripledes-vectors.zip */ -static const unsigned char des3_test_keys[24] = -{ +static const unsigned char des3_test_keys[24] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23 }; -static const unsigned char des3_test_buf[8] = -{ +static const unsigned char des3_test_buf[8] = { 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 }; -static const unsigned char des3_test_ecb_dec[3][8] = -{ +static const unsigned char des3_test_ecb_dec[3][8] = { { 0xCD, 0xD6, 0x4F, 0x2F, 0x94, 0x27, 0xC1, 0x5D }, { 0x69, 0x96, 0xC8, 0xFA, 0x47, 0xA2, 0xAB, 0xEB }, { 0x83, 0x25, 0x39, 0x76, 0x44, 0x09, 0x1A, 0x0A } }; -static const unsigned char des3_test_ecb_enc[3][8] = -{ +static const unsigned char des3_test_ecb_enc[3][8] = { { 0x6A, 0x2A, 0x19, 0xF4, 0x1E, 0xCA, 0x85, 0x4B }, { 0x03, 0xE6, 0x9F, 0x5B, 0xFA, 0x58, 0xEB, 0x42 }, { 0xDD, 0x17, 0xE8, 0xB8, 0xB4, 0x37, 0xD2, 0x32 } }; #if defined(MBEDTLS_CIPHER_MODE_CBC) -static const unsigned char des3_test_iv[8] = -{ +static const unsigned char des3_test_iv[8] = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, }; -static const unsigned char des3_test_cbc_dec[3][8] = -{ +static const unsigned char des3_test_cbc_dec[3][8] = { { 0x12, 0x9F, 0x40, 0xB9, 0xD2, 0x00, 0x56, 0xB3 }, { 0x47, 0x0E, 0xFC, 0x9A, 0x6B, 0x8E, 0xE3, 0x93 }, { 0xC5, 0xCE, 0xCF, 0x63, 0xEC, 0xEC, 0x51, 0x4C } }; -static const unsigned char des3_test_cbc_enc[3][8] = -{ +static const unsigned char des3_test_cbc_enc[3][8] = { { 0x54, 0xF1, 0x5A, 0xF6, 0xEB, 0xE3, 0xA4, 0xB4 }, { 0x35, 0x76, 0x11, 0x56, 0x5F, 0xA1, 0x8E, 0x4D }, { 0xCB, 0x19, 0x1F, 0x85, 0xD1, 0xED, 0x84, 0x39 } @@ -883,140 +851,129 @@ int mbedtls_des_self_test( int verbose ) /* * ECB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " DES%c-ECB-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); + ( u == 0 ) ? ' ' : '3', 56 + u * 56, + ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); memcpy( buf, des3_test_buf, 8 ); - switch( i ) - { - case 0: - mbedtls_des_setkey_dec( &ctx, des3_test_keys ); - break; + switch ( i ) { + case 0: + mbedtls_des_setkey_dec( &ctx, des3_test_keys ); + break; - case 1: - mbedtls_des_setkey_enc( &ctx, des3_test_keys ); - break; + case 1: + mbedtls_des_setkey_enc( &ctx, des3_test_keys ); + break; - case 2: - mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); - break; + case 2: + mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); + break; - case 3: - mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); - break; + case 3: + mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); + break; - case 4: - mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); - break; + case 4: + mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); + break; - case 5: - mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); - break; + case 5: + mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); + break; - default: - return( 1 ); + default: + return ( 1 ); } - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) + for ( j = 0; j < 10000; j++ ) { + if ( u == 0 ) mbedtls_des_crypt_ecb( &ctx, buf, buf ); else mbedtls_des3_crypt_ecb( &ctx3, buf, buf ); } - if( ( v == MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || - ( v != MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) + if ( ( v == MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || + ( v != MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CBC) /* * CBC mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " DES%c-CBC-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); + ( u == 0 ) ? ' ' : '3', 56 + u * 56, + ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, des3_test_iv, 8 ); memcpy( prv, des3_test_iv, 8 ); memcpy( buf, des3_test_buf, 8 ); - switch( i ) - { - case 0: - mbedtls_des_setkey_dec( &ctx, des3_test_keys ); - break; + switch ( i ) { + case 0: + mbedtls_des_setkey_dec( &ctx, des3_test_keys ); + break; - case 1: - mbedtls_des_setkey_enc( &ctx, des3_test_keys ); - break; + case 1: + mbedtls_des_setkey_enc( &ctx, des3_test_keys ); + break; - case 2: - mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); - break; + case 2: + mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); + break; - case 3: - mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); - break; + case 3: + mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); + break; - case 4: - mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); - break; + case 4: + mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); + break; - case 5: - mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); - break; + case 5: + mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); + break; - default: - return( 1 ); + default: + return ( 1 ); } - if( v == MBEDTLS_DES_DECRYPT ) - { - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) + if ( v == MBEDTLS_DES_DECRYPT ) { + for ( j = 0; j < 10000; j++ ) { + if ( u == 0 ) mbedtls_des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); else mbedtls_des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); } - } - else - { - for( j = 0; j < 10000; j++ ) - { + } else { + for ( j = 0; j < 10000; j++ ) { unsigned char tmp[8]; - if( u == 0 ) + if ( u == 0 ) mbedtls_des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); else mbedtls_des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); @@ -1029,31 +986,30 @@ int mbedtls_des_self_test( int verbose ) memcpy( buf, prv, 8 ); } - if( ( v == MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || - ( v != MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) + if ( ( v == MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || + ( v != MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_des_free( &ctx ); mbedtls_des3_free( &ctx3 ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/dhm.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/dhm.c index a4715d17..7ff61a33 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/dhm.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/dhm.c @@ -58,8 +58,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -71,21 +73,21 @@ static int dhm_read_bignum( mbedtls_mpi *X, { int ret, n; - if( end - *p < 2 ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( end - *p < 2 ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); n = ( (*p)[0] << 8 ) | (*p)[1]; (*p) += 2; - if( (int)( end - *p ) < n ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( (int)( end - *p ) < n ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( ( ret = mbedtls_mpi_read_binary( X, *p, n ) ) != 0 ) - return( MBEDTLS_ERR_DHM_READ_PARAMS_FAILED + ret ); + if ( ( ret = mbedtls_mpi_read_binary( X, *p, n ) ) != 0 ) + return ( MBEDTLS_ERR_DHM_READ_PARAMS_FAILED + ret ); (*p) += n; - return( 0 ); + return ( 0 ); } /* @@ -102,20 +104,21 @@ static int dhm_check_range( const mbedtls_mpi *param, const mbedtls_mpi *P ) mbedtls_mpi L, U; int ret = MBEDTLS_ERR_DHM_BAD_INPUT_DATA; - mbedtls_mpi_init( &L ); mbedtls_mpi_init( &U ); + mbedtls_mpi_init( &L ); + mbedtls_mpi_init( &U ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &L, 2 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &U, P, 2 ) ); - if( mbedtls_mpi_cmp_mpi( param, &L ) >= 0 && - mbedtls_mpi_cmp_mpi( param, &U ) <= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( param, &L ) >= 0 && + mbedtls_mpi_cmp_mpi( param, &U ) <= 0 ) { ret = 0; } cleanup: - mbedtls_mpi_free( &L ); mbedtls_mpi_free( &U ); - return( ret ); + mbedtls_mpi_free( &L ); + mbedtls_mpi_free( &U ); + return ( ret ); } void mbedtls_dhm_init( mbedtls_dhm_context *ctx ) @@ -127,62 +130,60 @@ void mbedtls_dhm_init( mbedtls_dhm_context *ctx ) * Parse the ServerKeyExchange parameters */ int mbedtls_dhm_read_params( mbedtls_dhm_context *ctx, - unsigned char **p, - const unsigned char *end ) + unsigned char **p, + const unsigned char *end ) { int ret; - if( ( ret = dhm_read_bignum( &ctx->P, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->G, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->GY, p, end ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_read_bignum( &ctx->P, p, end ) ) != 0 || + ( ret = dhm_read_bignum( &ctx->G, p, end ) ) != 0 || + ( ret = dhm_read_bignum( &ctx->GY, p, end ) ) != 0 ) + return ( ret ); - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) + return ( ret ); ctx->len = mbedtls_mpi_size( &ctx->P ); - return( 0 ); + return ( 0 ); } /* * Setup and write the ServerKeyExchange parameters */ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *output, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret, count = 0; size_t n1, n2, n3; unsigned char *p; - if( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); /* * Generate X as large as possible ( < P ) */ - do - { + do { mbedtls_mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &ctx->X, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED ); + } while ( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); /* * Calculate GX = G^X mod P */ MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); + &ctx->P, &ctx->RP ) ); - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) + return ( ret ); /* * export P, G, GX @@ -197,8 +198,8 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, n3 = mbedtls_mpi_size( &ctx->GX ); p = output; - DHM_MPI_EXPORT( &ctx->P , n1 ); - DHM_MPI_EXPORT( &ctx->G , n2 ); + DHM_MPI_EXPORT( &ctx->P, n1 ); + DHM_MPI_EXPORT( &ctx->G, n2 ); DHM_MPI_EXPORT( &ctx->GX, n3 ); *olen = p - output; @@ -207,74 +208,72 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, cleanup: - if( ret != 0 ) - return( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* * Import the peer's public value G^Y */ int mbedtls_dhm_read_public( mbedtls_dhm_context *ctx, - const unsigned char *input, size_t ilen ) + const unsigned char *input, size_t ilen ) { int ret; - if( ctx == NULL || ilen < 1 || ilen > ctx->len ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( ctx == NULL || ilen < 1 || ilen > ctx->len ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( ( ret = mbedtls_mpi_read_binary( &ctx->GY, input, ilen ) ) != 0 ) - return( MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED + ret ); + if ( ( ret = mbedtls_mpi_read_binary( &ctx->GY, input, ilen ) ) != 0 ) + return ( MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* * Create own private value X and export G^X */ int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size, - unsigned char *output, size_t olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *output, size_t olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret, count = 0; - if( ctx == NULL || olen < 1 || olen > ctx->len ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( ctx == NULL || olen < 1 || olen > ctx->len ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); /* * generate X and calculate GX = G^X mod P */ - do - { + do { mbedtls_mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &ctx->X, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED ); + } while ( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); + &ctx->P, &ctx->RP ) ); - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) + return ( ret ); MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &ctx->GX, output, olen ) ); cleanup: - if( ret != 0 ) - return( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -284,7 +283,7 @@ cleanup: * Berlin Heidelberg, 1996. p. 104-113. */ static int dhm_update_blinding( mbedtls_dhm_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, count; @@ -292,28 +291,26 @@ static int dhm_update_blinding( mbedtls_dhm_context *ctx, * Don't use any blinding the first time a particular X is used, * but remember it to use blinding next time. */ - if( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->pX ) != 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->pX ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &ctx->pX, &ctx->X ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &ctx->Vi, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &ctx->Vf, 1 ) ); - return( 0 ); + return ( 0 ); } /* * Ok, we need blinding. Can we re-use existing values? * If yes, just update them by squaring them. */ - if( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ) - { + if ( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->P ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->Vf, &ctx->Vf, &ctx->Vf ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->Vf, &ctx->Vf, &ctx->P ) ); - return( 0 ); + return ( 0 ); } /* @@ -322,62 +319,57 @@ static int dhm_update_blinding( mbedtls_dhm_context *ctx, /* Vi = random( 2, P-1 ) */ count = 0; - do - { + do { mbedtls_mpi_fill_random( &ctx->Vi, mbedtls_mpi_size( &ctx->P ), f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &ctx->Vi, &ctx->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &ctx->Vi, &ctx->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &ctx->Vi, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); - } - while( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) <= 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + } while ( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) <= 0 ); /* Vf = Vi^-X mod P */ MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->Vf, &ctx->Vi, &ctx->P ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->Vf, &ctx->Vf, &ctx->X, &ctx->P, &ctx->RP ) ); cleanup: - return( ret ); + return ( ret ); } /* * Derive and export the shared secret (G^Y)^X mod P */ int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx, - unsigned char *output, size_t output_size, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *output, size_t output_size, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_mpi GYb; - if( ctx == NULL || output_size < ctx->len ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( ctx == NULL || output_size < ctx->len ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) + return ( ret ); mbedtls_mpi_init( &GYb ); /* Blind peer's value */ - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { MBEDTLS_MPI_CHK( dhm_update_blinding( ctx, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &GYb, &ctx->GY, &ctx->Vi ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &GYb, &GYb, &ctx->P ) ); - } - else + } else MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &GYb, &ctx->GY ) ); /* Do modular exponentiation */ MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->K, &GYb, &ctx->X, - &ctx->P, &ctx->RP ) ); + &ctx->P, &ctx->RP ) ); /* Unblind secret value */ - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->K, &ctx->K, &ctx->Vf ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->K, &ctx->K, &ctx->P ) ); } @@ -389,10 +381,10 @@ int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx, cleanup: mbedtls_mpi_free( &GYb ); - if( ret != 0 ) - return( MBEDTLS_ERR_DHM_CALC_SECRET_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_DHM_CALC_SECRET_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -400,9 +392,15 @@ cleanup: */ void mbedtls_dhm_free( mbedtls_dhm_context *ctx ) { - mbedtls_mpi_free( &ctx->pX); mbedtls_mpi_free( &ctx->Vf ); mbedtls_mpi_free( &ctx->Vi ); - mbedtls_mpi_free( &ctx->RP ); mbedtls_mpi_free( &ctx->K ); mbedtls_mpi_free( &ctx->GY ); - mbedtls_mpi_free( &ctx->GX ); mbedtls_mpi_free( &ctx->X ); mbedtls_mpi_free( &ctx->G ); + mbedtls_mpi_free( &ctx->pX); + mbedtls_mpi_free( &ctx->Vf ); + mbedtls_mpi_free( &ctx->Vi ); + mbedtls_mpi_free( &ctx->RP ); + mbedtls_mpi_free( &ctx->K ); + mbedtls_mpi_free( &ctx->GY ); + mbedtls_mpi_free( &ctx->GX ); + mbedtls_mpi_free( &ctx->X ); + mbedtls_mpi_free( &ctx->G ); mbedtls_mpi_free( &ctx->P ); mbedtls_zeroize( ctx, sizeof( mbedtls_dhm_context ) ); @@ -413,7 +411,7 @@ void mbedtls_dhm_free( mbedtls_dhm_context *ctx ) * Parse DHM parameters */ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, - size_t dhminlen ) + size_t dhminlen ) { int ret; size_t len; @@ -424,22 +422,20 @@ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, mbedtls_pem_init( &pem ); /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( dhminlen == 0 || dhmin[dhminlen - 1] != '\0' ) + if ( dhminlen == 0 || dhmin[dhminlen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN DH PARAMETERS-----", - "-----END DH PARAMETERS-----", - dhmin, NULL, 0, &dhminlen ); + "-----BEGIN DH PARAMETERS-----", + "-----END DH PARAMETERS-----", + dhmin, NULL, 0, &dhminlen ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ dhminlen = pem.buflen; - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) goto exit; p = ( ret == 0 ) ? pem.buf : (unsigned char *) dhmin; @@ -455,39 +451,34 @@ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, * privateValueLength INTEGER OPTIONAL * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + ret; goto exit; } end = p + len; - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->P ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->G ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->P ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->G ) ) != 0 ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + ret; goto exit; } - if( p != end ) - { + if ( p != end ) { /* This might be the optional privateValueLength. * If so, we can cleanly discard it */ mbedtls_mpi rec; mbedtls_mpi_init( &rec ); ret = mbedtls_asn1_get_mpi( &p, end, &rec ); mbedtls_mpi_free( &rec ); - if ( ret != 0 ) - { + if ( ret != 0 ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + ret; goto exit; } - if ( p != end ) - { + if ( p != end ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; goto exit; } } @@ -500,10 +491,10 @@ exit: #if defined(MBEDTLS_PEM_PARSE_C) mbedtls_pem_free( &pem ); #endif - if( ret != 0 ) + if ( ret != 0 ) mbedtls_dhm_free( dhm ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_FS_IO) @@ -519,41 +510,38 @@ static int load_file( const char *path, unsigned char **buf, size_t *n ) FILE *f; long size; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { + if ( ( size = ftell( f ) ) == -1 ) { fclose( f ); - return( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); } fseek( f, 0, SEEK_SET ); *n = (size_t) size; - if( *n + 1 == 0 || - ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) - { + if ( *n + 1 == 0 || + ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) { fclose( f ); - return( MBEDTLS_ERR_DHM_ALLOC_FAILED ); + return ( MBEDTLS_ERR_DHM_ALLOC_FAILED ); } - if( fread( *buf, 1, *n, f ) != *n ) - { + if ( fread( *buf, 1, *n, f ) != *n ) { fclose( f ); mbedtls_free( *buf ); - return( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); } fclose( f ); (*buf)[*n] = '\0'; - if( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) + if ( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) ++*n; - return( 0 ); + return ( 0 ); } /* @@ -565,15 +553,15 @@ int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path ) size_t n; unsigned char *buf; - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_dhm_parse_dhm( dhm, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ #endif /* MBEDTLS_ASN1_PARSE_C */ @@ -581,11 +569,11 @@ int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path ) #if defined(MBEDTLS_SELF_TEST) static const char mbedtls_test_dhm_params[] = -"-----BEGIN DH PARAMETERS-----\r\n" -"MIGHAoGBAJ419DBEOgmQTzo5qXl5fQcN9TN455wkOL7052HzxxRVMyhYmwQcgJvh\r\n" -"1sa18fyfR9OiVEMYglOpkqVoGLN7qd5aQNNi5W7/C+VBdHTBJcGZJyyP5B3qcz32\r\n" -"9mLJKudlVudV0Qxk5qUJaPZ/xupz0NyoVpviuiBOI1gNi8ovSXWzAgEC\r\n" -"-----END DH PARAMETERS-----\r\n"; + "-----BEGIN DH PARAMETERS-----\r\n" + "MIGHAoGBAJ419DBEOgmQTzo5qXl5fQcN9TN455wkOL7052HzxxRVMyhYmwQcgJvh\r\n" + "1sa18fyfR9OiVEMYglOpkqVoGLN7qd5aQNNi5W7/C+VBdHTBJcGZJyyP5B3qcz32\r\n" + "9mLJKudlVudV0Qxk5qUJaPZ/xupz0NyoVpviuiBOI1gNi8ovSXWzAgEC\r\n" + "-----END DH PARAMETERS-----\r\n"; static const size_t mbedtls_test_dhm_params_len = sizeof( mbedtls_test_dhm_params ); @@ -599,27 +587,26 @@ int mbedtls_dhm_self_test( int verbose ) mbedtls_dhm_init( &dhm ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " DHM parameter load: " ); - if( ( ret = mbedtls_dhm_parse_dhm( &dhm, - (const unsigned char *) mbedtls_test_dhm_params, - mbedtls_test_dhm_params_len ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_dhm_parse_dhm( &dhm, + (const unsigned char *) mbedtls_test_dhm_params, + mbedtls_test_dhm_params_len ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n\n" ); exit: mbedtls_dhm_free( &dhm ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdh.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdh.c index c0a81473..17658c18 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdh.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdh.c @@ -42,8 +42,8 @@ * Generate public key: simple wrapper around mbedtls_ecp_gen_keypair */ int mbedtls_ecdh_gen_public( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { return mbedtls_ecp_gen_keypair( grp, d, Q, f_rng, p_rng ); } @@ -52,9 +52,9 @@ int mbedtls_ecdh_gen_public( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp * Compute shared secret (SEC1 3.3.1) */ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, - const mbedtls_ecp_point *Q, const mbedtls_mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + const mbedtls_ecp_point *Q, const mbedtls_mpi *d, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_ecp_point P; @@ -68,8 +68,7 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, &P, d, Q, f_rng, p_rng ) ); - if( mbedtls_ecp_is_zero( &P ) ) - { + if ( mbedtls_ecp_is_zero( &P ) ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -79,7 +78,7 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, cleanup: mbedtls_ecp_point_free( &P ); - return( ret ); + return ( ret ); } /* @@ -95,7 +94,7 @@ void mbedtls_ecdh_init( mbedtls_ecdh_context *ctx ) */ void mbedtls_ecdh_free( mbedtls_ecdh_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_ecp_group_free( &ctx->grp ); @@ -116,33 +115,33 @@ void mbedtls_ecdh_free( mbedtls_ecdh_context *ctx ) * } ServerECDHParams; */ int mbedtls_ecdh_make_params( mbedtls_ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; size_t grp_len, pt_len; - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->grp.pbits == 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) + != 0 ) + return ( ret ); - if( ( ret = mbedtls_ecp_tls_write_group( &ctx->grp, &grp_len, buf, blen ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_write_group( &ctx->grp, &grp_len, buf, blen ) ) + != 0 ) + return ( ret ); buf += grp_len; blen -= grp_len; - if( ( ret = mbedtls_ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - &pt_len, buf, blen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, + &pt_len, buf, blen ) ) != 0 ) + return ( ret ); *olen = grp_len + pt_len; - return( 0 ); + return ( 0 ); } /* @@ -153,109 +152,108 @@ int mbedtls_ecdh_make_params( mbedtls_ecdh_context *ctx, size_t *olen, * } ServerECDHParams; */ int mbedtls_ecdh_read_params( mbedtls_ecdh_context *ctx, - const unsigned char **buf, const unsigned char *end ) + const unsigned char **buf, const unsigned char *end ) { int ret; - if( ( ret = mbedtls_ecp_tls_read_group( &ctx->grp, buf, end - *buf ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_read_group( &ctx->grp, buf, end - *buf ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, buf, end - *buf ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, buf, end - *buf ) ) + != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* * Get parameters from a keypair */ int mbedtls_ecdh_get_params( mbedtls_ecdh_context *ctx, const mbedtls_ecp_keypair *key, - mbedtls_ecdh_side side ) + mbedtls_ecdh_side side ) { int ret; - if( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 ) + return ( ret ); /* If it's not our key, just import the public part as Qp */ - if( side == MBEDTLS_ECDH_THEIRS ) - return( mbedtls_ecp_copy( &ctx->Qp, &key->Q ) ); + if ( side == MBEDTLS_ECDH_THEIRS ) + return ( mbedtls_ecp_copy( &ctx->Qp, &key->Q ) ); /* Our key: import public (as Q) and private parts */ - if( side != MBEDTLS_ECDH_OURS ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( side != MBEDTLS_ECDH_OURS ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 || - ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 || + ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* * Setup and export the client public value */ int mbedtls_ecdh_make_public( mbedtls_ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->grp.pbits == 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) + != 0 ) + return ( ret ); return mbedtls_ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - olen, buf, blen ); + olen, buf, blen ); } /* * Parse and import the client's public value */ int mbedtls_ecdh_read_public( mbedtls_ecdh_context *ctx, - const unsigned char *buf, size_t blen ) + const unsigned char *buf, size_t blen ) { int ret; const unsigned char *p = buf; - if( ctx == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, &p, blen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, &p, blen ) ) != 0 ) + return ( ret ); - if( (size_t)( p - buf ) != blen ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( (size_t)( p - buf ) != blen ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - return( 0 ); + return ( 0 ); } /* * Derive and export the shared secret */ int mbedtls_ecdh_calc_secret( mbedtls_ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; - if( ctx == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecdh_compute_shared( &ctx->grp, &ctx->z, &ctx->Qp, &ctx->d, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ecdh_compute_shared( &ctx->grp, &ctx->z, &ctx->Qp, &ctx->d, + f_rng, p_rng ) ) != 0 ) { + return ( ret ); } - if( mbedtls_mpi_size( &ctx->z ) > blen ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( mbedtls_mpi_size( &ctx->z ) > blen ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); *olen = ctx->grp.pbits / 8 + ( ( ctx->grp.pbits % 8 ) != 0 ); return mbedtls_mpi_write_binary( &ctx->z, buf, *olen ); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdsa.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdsa.c index 4156f3c3..9fc6595f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdsa.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecdsa.c @@ -54,15 +54,15 @@ static int derive_mpi( const mbedtls_ecp_group *grp, mbedtls_mpi *x, size_t use_size = blen > n_size ? n_size : blen; MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( x, buf, use_size ) ); - if( use_size * 8 > grp->nbits ) + if ( use_size * 8 > grp->nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( x, use_size * 8 - grp->nbits ) ); /* While at it, reduce modulo N */ - if( mbedtls_mpi_cmp_mpi( x, &grp->N ) >= 0 ) + if ( mbedtls_mpi_cmp_mpi( x, &grp->N ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( x, x, &grp->N ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -70,40 +70,38 @@ cleanup: * Obviously, compared to SEC1 4.1.3, we skip step 4 (hash message) */ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, - const mbedtls_mpi *d, const unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const mbedtls_mpi *d, const unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, key_tries, sign_tries, blind_tries; mbedtls_ecp_point R; mbedtls_mpi k, e, t; /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( grp->N.p == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); mbedtls_ecp_point_init( &R ); - mbedtls_mpi_init( &k ); mbedtls_mpi_init( &e ); mbedtls_mpi_init( &t ); + mbedtls_mpi_init( &k ); + mbedtls_mpi_init( &e ); + mbedtls_mpi_init( &t ); sign_tries = 0; - do - { + do { /* * Steps 1-3: generate a suitable ephemeral keypair * and set r = xR mod n */ key_tries = 0; - do - { + do { MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair( grp, &k, &R, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( r, &R.X, &grp->N ) ); - if( key_tries++ > 10 ) - { + if ( key_tries++ > 10 ) { ret = MBEDTLS_ERR_ECP_RANDOM_FAILED; goto cleanup; } - } - while( mbedtls_mpi_cmp_int( r, 0 ) == 0 ); + } while ( mbedtls_mpi_cmp_int( r, 0 ) == 0 ); /* * Step 5: derive MPI from hashed message @@ -115,18 +113,16 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, * avoiding a potential timing leak. */ blind_tries = 0; - do - { + do { size_t n_size = ( grp->nbits + 7 ) / 8; MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &t, n_size, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &t, 8 * n_size - grp->nbits ) ); /* See mbedtls_ecp_gen_keypair() */ - if( ++blind_tries > 30 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( &t, 1 ) < 0 || - mbedtls_mpi_cmp_mpi( &t, &grp->N ) >= 0 ); + if ( ++blind_tries > 30 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( &t, 1 ) < 0 || + mbedtls_mpi_cmp_mpi( &t, &grp->N ) >= 0 ); /* * Step 6: compute s = (e + r * d) / k = t (e + rd) / (kt) mod n @@ -139,19 +135,19 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( s, s, &e ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( s, s, &grp->N ) ); - if( sign_tries++ > 10 ) - { + if ( sign_tries++ > 10 ) { ret = MBEDTLS_ERR_ECP_RANDOM_FAILED; goto cleanup; } - } - while( mbedtls_mpi_cmp_int( s, 0 ) == 0 ); + } while ( mbedtls_mpi_cmp_int( s, 0 ) == 0 ); cleanup: mbedtls_ecp_point_free( &R ); - mbedtls_mpi_free( &k ); mbedtls_mpi_free( &e ); mbedtls_mpi_free( &t ); + mbedtls_mpi_free( &k ); + mbedtls_mpi_free( &e ); + mbedtls_mpi_free( &t ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_ECDSA_DETERMINISTIC) @@ -159,8 +155,8 @@ cleanup: * Deterministic signature wrapper */ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, - const mbedtls_mpi *d, const unsigned char *buf, size_t blen, - mbedtls_md_type_t md_alg ) + const mbedtls_mpi *d, const unsigned char *buf, size_t blen, + mbedtls_md_type_t md_alg ) { int ret; mbedtls_hmac_drbg_context rng_ctx; @@ -169,8 +165,8 @@ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi const mbedtls_md_info_t *md_info; mbedtls_mpi h; - if( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); mbedtls_mpi_init( &h ); mbedtls_hmac_drbg_init( &rng_ctx ); @@ -182,13 +178,13 @@ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi mbedtls_hmac_drbg_seed_buf( &rng_ctx, md_info, data, 2 * grp_len ); ret = mbedtls_ecdsa_sign( grp, r, s, d, buf, blen, - mbedtls_hmac_drbg_random, &rng_ctx ); + mbedtls_hmac_drbg_random, &rng_ctx ); cleanup: mbedtls_hmac_drbg_free( &rng_ctx ); mbedtls_mpi_free( &h ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECDSA_DETERMINISTIC */ @@ -197,26 +193,28 @@ cleanup: * Obviously, compared to SEC1 4.1.3, we skip step 2 (hash message) */ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, - const unsigned char *buf, size_t blen, - const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s) + const unsigned char *buf, size_t blen, + const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s) { int ret; mbedtls_mpi e, s_inv, u1, u2; mbedtls_ecp_point R; mbedtls_ecp_point_init( &R ); - mbedtls_mpi_init( &e ); mbedtls_mpi_init( &s_inv ); mbedtls_mpi_init( &u1 ); mbedtls_mpi_init( &u2 ); + mbedtls_mpi_init( &e ); + mbedtls_mpi_init( &s_inv ); + mbedtls_mpi_init( &u1 ); + mbedtls_mpi_init( &u2 ); /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( grp->N.p == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Step 1: make sure r and s are in range 1..n-1 */ - if( mbedtls_mpi_cmp_int( r, 1 ) < 0 || mbedtls_mpi_cmp_mpi( r, &grp->N ) >= 0 || - mbedtls_mpi_cmp_int( s, 1 ) < 0 || mbedtls_mpi_cmp_mpi( s, &grp->N ) >= 0 ) - { + if ( mbedtls_mpi_cmp_int( r, 1 ) < 0 || mbedtls_mpi_cmp_mpi( r, &grp->N ) >= 0 || + mbedtls_mpi_cmp_int( s, 1 ) < 0 || mbedtls_mpi_cmp_mpi( s, &grp->N ) >= 0 ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } @@ -250,8 +248,7 @@ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, */ MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( grp, &R, &u1, &grp->G, &u2, Q ) ); - if( mbedtls_ecp_is_zero( &R ) ) - { + if ( mbedtls_ecp_is_zero( &R ) ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } @@ -265,17 +262,19 @@ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, /* * Step 8: check if v (that is, R.X) is equal to r */ - if( mbedtls_mpi_cmp_mpi( &R.X, r ) != 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &R.X, r ) != 0 ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } cleanup: mbedtls_ecp_point_free( &R ); - mbedtls_mpi_free( &e ); mbedtls_mpi_free( &s_inv ); mbedtls_mpi_free( &u1 ); mbedtls_mpi_free( &u2 ); + mbedtls_mpi_free( &e ); + mbedtls_mpi_free( &s_inv ); + mbedtls_mpi_free( &u1 ); + mbedtls_mpi_free( &u2 ); - return( ret ); + return ( ret ); } /* @@ -294,22 +293,22 @@ static int ecdsa_signature_to_asn1( const mbedtls_mpi *r, const mbedtls_mpi *s, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &p, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &p, buf, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); memcpy( sig, p, len ); *slen = len; - return( 0 ); + return ( 0 ); } /* * Compute and write signature */ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + const unsigned char *hash, size_t hlen, + unsigned char *sig, size_t *slen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_mpi r, s; @@ -322,12 +321,12 @@ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t (void) p_rng; MBEDTLS_MPI_CHK( mbedtls_ecdsa_sign_det( &ctx->grp, &r, &s, &ctx->d, - hash, hlen, md_alg ) ); + hash, hlen, md_alg ) ); #else (void) md_alg; MBEDTLS_MPI_CHK( mbedtls_ecdsa_sign( &ctx->grp, &r, &s, &ctx->d, - hash, hlen, f_rng, p_rng ) ); + hash, hlen, f_rng, p_rng ) ); #endif MBEDTLS_MPI_CHK( ecdsa_signature_to_asn1( &r, &s, sig, slen ) ); @@ -336,18 +335,18 @@ cleanup: mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); - return( ret ); + return ( ret ); } #if ! defined(MBEDTLS_DEPRECATED_REMOVED) && \ defined(MBEDTLS_ECDSA_DETERMINISTIC) int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - mbedtls_md_type_t md_alg ) + const unsigned char *hash, size_t hlen, + unsigned char *sig, size_t *slen, + mbedtls_md_type_t md_alg ) { - return( mbedtls_ecdsa_write_signature( ctx, md_alg, hash, hlen, sig, slen, - NULL, NULL ) ); + return ( mbedtls_ecdsa_write_signature( ctx, md_alg, hash, hlen, sig, slen, + NULL, NULL ) ); } #endif @@ -355,8 +354,8 @@ int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, * Read and check signature */ int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - const unsigned char *sig, size_t slen ) + const unsigned char *hash, size_t hlen, + const unsigned char *sig, size_t slen ) { int ret; unsigned char *p = (unsigned char *) sig; @@ -367,49 +366,46 @@ int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx, mbedtls_mpi_init( &r ); mbedtls_mpi_init( &s ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { ret += MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } - if( p + len != end ) - { + if ( p + len != end ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; goto cleanup; } - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &r ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &s ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &r ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &s ) ) != 0 ) { ret += MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } - if( ( ret = mbedtls_ecdsa_verify( &ctx->grp, hash, hlen, - &ctx->Q, &r, &s ) ) != 0 ) + if ( ( ret = mbedtls_ecdsa_verify( &ctx->grp, hash, hlen, + &ctx->Q, &r, &s ) ) != 0 ) goto cleanup; - if( p != end ) + if ( p != end ) ret = MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH; cleanup: mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); - return( ret ); + return ( ret ); } /* * Generate key pair */ int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - return( mbedtls_ecp_group_load( &ctx->grp, gid ) || - mbedtls_ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ); + return ( mbedtls_ecp_group_load( &ctx->grp, gid ) || + mbedtls_ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ); } /* @@ -419,14 +415,13 @@ int mbedtls_ecdsa_from_keypair( mbedtls_ecdsa_context *ctx, const mbedtls_ecp_ke { int ret; - if( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 || - ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 || - ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 || + ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 || + ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 ) { mbedtls_ecdsa_free( ctx ); } - return( ret ); + return ( ret ); } /* diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecjpake.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecjpake.c index 1fa1c2d8..37246523 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecjpake.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecjpake.c @@ -52,7 +52,7 @@ static const char * const ecjpake_id[] = { */ void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; ctx->md_info = NULL; @@ -75,7 +75,7 @@ void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ) */ void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; ctx->md_info = NULL; @@ -106,18 +106,18 @@ int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, ctx->role = role; - if( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL ) - return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); + if ( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL ) + return ( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &ctx->grp, curve ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->s, secret, len ) ); cleanup: - if( ret != 0 ) + if ( ret != 0 ) mbedtls_ecjpake_free( ctx ); - return( ret ); + return ( ret ); } /* @@ -125,14 +125,13 @@ cleanup: */ int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx ) { - if( ctx->md_info == NULL || - ctx->grp.id == MBEDTLS_ECP_DP_NONE || - ctx->s.p == NULL ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx->md_info == NULL || + ctx->grp.id == MBEDTLS_ECP_DP_NONE || + ctx->s.p == NULL ) { + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } - return( 0 ); + return ( 0 ); } /* @@ -148,13 +147,13 @@ static int ecjpake_write_len_point( unsigned char **p, size_t len; /* Need at least 4 for length plus 1 for point */ - if( end < *p || end - *p < 5 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < *p || end - *p < 5 ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); ret = mbedtls_ecp_point_write_binary( grp, P, pf, &len, *p + 4, end - ( *p + 4 ) ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); (*p)[0] = (unsigned char)( ( len >> 24 ) & 0xFF ); (*p)[1] = (unsigned char)( ( len >> 16 ) & 0xFF ); @@ -163,7 +162,7 @@ static int ecjpake_write_len_point( unsigned char **p, *p += 4 + len; - return( 0 ); + return ( 0 ); } /* @@ -196,16 +195,16 @@ static int ecjpake_hash( const mbedtls_md_info_t *md_info, MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, V ) ); MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, X ) ); - if( end - p < 4 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end - p < 4 ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); *p++ = (unsigned char)( ( id_len >> 24 ) & 0xFF ); *p++ = (unsigned char)( ( id_len >> 16 ) & 0xFF ); *p++ = (unsigned char)( ( id_len >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( id_len ) & 0xFF ); - if( end < p || (size_t)( end - p ) < id_len ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < p || (size_t)( end - p ) < id_len ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); memcpy( p, id, id_len ); p += id_len; @@ -215,11 +214,11 @@ static int ecjpake_hash( const mbedtls_md_info_t *md_info, /* Turn it into an integer mod n */ MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( h, hash, - mbedtls_md_get_size( md_info ) ) ); + mbedtls_md_get_size( md_info ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( h, h, &grp->N ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -250,21 +249,19 @@ static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, * opaque r<1..2^8-1>; * } ECSchnorrZKP; */ - if( end < *p ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_point( grp, &V, p, end - *p ) ); - if( end < *p || (size_t)( end - *p ) < 1 ) - { + if ( end < *p || (size_t)( end - *p ) < 1 ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } r_len = *(*p)++; - if( end < *p || (size_t)( end - *p ) < r_len ) - { + if ( end < *p || (size_t)( end - *p ) < r_len ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -277,10 +274,9 @@ static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, */ MBEDTLS_MPI_CHK( ecjpake_hash( md_info, grp, pf, G, &V, X, id, &h ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( (mbedtls_ecp_group *) grp, - &VV, &h, X, &r, G ) ); + &VV, &h, X, &r, G ) ); - if( mbedtls_ecp_point_cmp( &VV, &V ) != 0 ) - { + if ( mbedtls_ecp_point_cmp( &VV, &V ) != 0 ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } @@ -291,7 +287,7 @@ cleanup: mbedtls_mpi_free( &r ); mbedtls_mpi_free( &h ); - return( ret ); + return ( ret ); } /* @@ -299,7 +295,7 @@ cleanup: */ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, const mbedtls_ecp_group *grp, - const int pf, + const int pf, const mbedtls_ecp_point *G, const mbedtls_mpi *x, const mbedtls_ecp_point *X, @@ -315,8 +311,8 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, mbedtls_mpi h; /* later recycled to hold r */ size_t len; - if( end < *p ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); mbedtls_ecp_point_init( &V ); mbedtls_mpi_init( &v ); @@ -324,7 +320,7 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, /* Compute signature */ MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair_base( (mbedtls_ecp_group *) grp, - G, &v, &V, f_rng, p_rng ) ); + G, &v, &V, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( ecjpake_hash( md_info, grp, pf, G, &V, X, id, &h ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &h, &h, x ) ); /* x*h */ MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &h, &v, &h ) ); /* v - x*h */ @@ -332,12 +328,11 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, /* Write it out */ MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( grp, &V, - pf, &len, *p, end - *p ) ); + pf, &len, *p, end - *p ) ); *p += len; len = mbedtls_mpi_size( &h ); /* actually r */ - if( end < *p || (size_t)( end - *p ) < 1 + len || len > 255 ) - { + if ( end < *p || (size_t)( end - *p ) < 1 + len || len > 255 ) { ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; goto cleanup; } @@ -351,7 +346,7 @@ cleanup: mbedtls_mpi_free( &v ); mbedtls_mpi_free( &h ); - return( ret ); + return ( ret ); } /* @@ -369,8 +364,8 @@ static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, { int ret; - if( end < *p ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * struct { @@ -379,8 +374,7 @@ static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, * } ECJPAKEKeyKP; */ MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_point( grp, X, p, end - *p ) ); - if( mbedtls_ecp_is_zero( X ) ) - { + if ( mbedtls_ecp_is_zero( X ) ) { ret = MBEDTLS_ERR_ECP_INVALID_KEY; goto cleanup; } @@ -388,7 +382,7 @@ static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, MBEDTLS_MPI_CHK( ecjpake_zkp_read( md_info, grp, pf, G, X, id, p, end ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -410,14 +404,14 @@ static int ecjpake_kkp_write( const mbedtls_md_info_t *md_info, int ret; size_t len; - if( end < *p ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); /* Generate key (7.4.2.3.1) and write it out */ MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair_base( (mbedtls_ecp_group *) grp, G, x, X, - f_rng, p_rng ) ); + f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( grp, X, - pf, &len, *p, end - *p ) ); + pf, &len, *p, end - *p ) ); *p += len; /* Generate and write proof */ @@ -425,7 +419,7 @@ static int ecjpake_kkp_write( const mbedtls_md_info_t *md_info, p, end, f_rng, p_rng ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -454,11 +448,11 @@ static int ecjpake_kkpp_read( const mbedtls_md_info_t *md_info, MBEDTLS_MPI_CHK( ecjpake_kkp_read( md_info, grp, pf, G, Xa, id, &p, end ) ); MBEDTLS_MPI_CHK( ecjpake_kkp_read( md_info, grp, pf, G, Xb, id, &p, end ) ); - if( p != end ) + if ( p != end ) ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; cleanup: - return( ret ); + return ( ret ); } /* @@ -485,14 +479,14 @@ static int ecjpake_kkpp_write( const mbedtls_md_info_t *md_info, const unsigned char *end = buf + len; MBEDTLS_MPI_CHK( ecjpake_kkp_write( md_info, grp, pf, G, xm1, Xa, id, - &p, end, f_rng, p_rng ) ); + &p, end, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( ecjpake_kkp_write( md_info, grp, pf, G, xm2, Xb, id, - &p, end, f_rng, p_rng ) ); + &p, end, f_rng, p_rng ) ); *olen = p - buf; cleanup: - return( ret ); + return ( ret ); } /* @@ -502,24 +496,24 @@ int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx, const unsigned char *buf, size_t len ) { - return( ecjpake_kkpp_read( ctx->md_info, &ctx->grp, ctx->point_format, - &ctx->grp.G, - &ctx->Xp1, &ctx->Xp2, ID_PEER, - buf, len ) ); + return ( ecjpake_kkpp_read( ctx->md_info, &ctx->grp, ctx->point_format, + &ctx->grp.G, + &ctx->Xp1, &ctx->Xp2, ID_PEER, + buf, len ) ); } /* * Generate and write the first round message */ int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { - return( ecjpake_kkpp_write( ctx->md_info, &ctx->grp, ctx->point_format, - &ctx->grp.G, - &ctx->xm1, &ctx->Xm1, &ctx->xm2, &ctx->Xm2, - ID_MINE, buf, len, olen, f_rng, p_rng ) ); + return ( ecjpake_kkpp_write( ctx->md_info, &ctx->grp, ctx->point_format, + &ctx->grp.G, + &ctx->xm1, &ctx->Xm1, &ctx->xm2, &ctx->Xm2, + ID_MINE, buf, len, olen, f_rng, p_rng ) ); } /* @@ -542,15 +536,15 @@ static int ecjpake_ecp_add3( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: mbedtls_mpi_free( &one ); - return( ret ); + return ( ret ); } /* * Read and process second round message (C: 7.4.2.5, S: 7.4.2.6) */ int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { int ret; const unsigned char *p = buf; @@ -576,22 +570,19 @@ int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, * ECJPAKEKeyKP ecjpake_key_kp; * } Client/ServerECJPAKEParams; */ - if( ctx->role == MBEDTLS_ECJPAKE_CLIENT ) - { + if ( ctx->role == MBEDTLS_ECJPAKE_CLIENT ) { MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_group( &grp, &p, len ) ); - if( grp.id != ctx->grp.id ) - { + if ( grp.id != ctx->grp.id ) { ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; goto cleanup; } } MBEDTLS_MPI_CHK( ecjpake_kkp_read( ctx->md_info, &ctx->grp, - ctx->point_format, - &G, &ctx->Xp, ID_PEER, &p, end ) ); + ctx->point_format, + &G, &ctx->Xp, ID_PEER, &p, end ) ); - if( p != end ) - { + if ( p != end ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -600,7 +591,7 @@ cleanup: mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &G ); - return( ret ); + return ( ret ); } /* @@ -631,16 +622,16 @@ static int ecjpake_mul_secret( mbedtls_mpi *R, int sign, cleanup: mbedtls_mpi_free( &b ); - return( ret ); + return ( ret ); } /* * Generate and write the second round message (S: 7.4.2.5, C: 7.4.2.6) */ int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_ecp_point G; /* C: GA, S: GB */ @@ -675,20 +666,17 @@ int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, * ECJPAKEKeyKP ecjpake_key_kp; * } Client/ServerECJPAKEParams; */ - if( ctx->role == MBEDTLS_ECJPAKE_SERVER ) - { - if( end < p ) - { + if ( ctx->role == MBEDTLS_ECJPAKE_SERVER ) { + if ( end < p ) { ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; goto cleanup; } MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_group( &ctx->grp, &ec_len, - p, end - p ) ); + p, end - p ) ); p += ec_len; } - if( end < p ) - { + if ( end < p ) { ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; goto cleanup; } @@ -708,16 +696,16 @@ cleanup: mbedtls_ecp_point_free( &Xm ); mbedtls_mpi_free( &xm ); - return( ret ); + return ( ret ); } /* * Derive PMS (7.4.2.7 / 7.4.2.8) */ int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_ecp_point K; @@ -726,8 +714,8 @@ int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, size_t x_bytes; *olen = mbedtls_md_get_size( ctx->md_info ); - if( len < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( len < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); mbedtls_ecp_point_init( &K ); mbedtls_mpi_init( &m_xm2_s ); @@ -758,7 +746,7 @@ cleanup: mbedtls_mpi_free( &m_xm2_s ); mbedtls_mpi_free( &one ); - return( ret ); + return ( ret ); } #undef ID_MINE @@ -779,7 +767,7 @@ cleanup: int mbedtls_ecjpake_self_test( int verbose ) { (void) verbose; - return( 0 ); + return ( 0 ); } #else @@ -929,7 +917,7 @@ static int ecjpake_test_load( mbedtls_ecjpake_context *ctx, &ctx->grp.G, NULL, NULL ) ); cleanup: - return( ret ); + return ( ret ); } /* For tests we don't need a secure RNG; @@ -939,8 +927,7 @@ static int ecjpake_lgc( void *p, unsigned char *out, size_t len ) static uint32_t x = 42; (void) p; - while( len > 0 ) - { + while ( len > 0 ) { size_t use_len = len > 4 ? 4 : len; x = 1664525 * x + 1013904223; memcpy( out, &x, use_len ); @@ -948,7 +935,7 @@ static int ecjpake_lgc( void *p, unsigned char *out, size_t len ) len -= use_len; } - return( 0 ); + return ( 0 ); } #define TEST_ASSERT( x ) \ @@ -976,23 +963,23 @@ int mbedtls_ecjpake_self_test( int verbose ) mbedtls_ecjpake_init( &cli ); mbedtls_ecjpake_init( &srv ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECJPAKE test #0 (setup): " ); TEST_ASSERT( mbedtls_ecjpake_setup( &cli, MBEDTLS_ECJPAKE_CLIENT, - MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, - ecjpake_test_password, - sizeof( ecjpake_test_password ) ) == 0 ); + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, + ecjpake_test_password, + sizeof( ecjpake_test_password ) ) == 0 ); TEST_ASSERT( mbedtls_ecjpake_setup( &srv, MBEDTLS_ECJPAKE_SERVER, - MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, - ecjpake_test_password, - sizeof( ecjpake_test_password ) ) == 0 ); + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, + ecjpake_test_password, + sizeof( ecjpake_test_password ) ) == 0 ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECJPAKE test #1 (random handshake): " ); TEST_ASSERT( mbedtls_ecjpake_write_round_one( &cli, @@ -1024,38 +1011,38 @@ int mbedtls_ecjpake_self_test( int verbose ) TEST_ASSERT( len == pmslen ); TEST_ASSERT( memcmp( buf, pms, len ) == 0 ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECJPAKE test #2 (reference handshake): " ); /* Simulate generation of round one */ MBEDTLS_MPI_CHK( ecjpake_test_load( &cli, - ecjpake_test_x1, sizeof( ecjpake_test_x1 ), - ecjpake_test_x2, sizeof( ecjpake_test_x2 ) ) ); + ecjpake_test_x1, sizeof( ecjpake_test_x1 ), + ecjpake_test_x2, sizeof( ecjpake_test_x2 ) ) ); MBEDTLS_MPI_CHK( ecjpake_test_load( &srv, - ecjpake_test_x3, sizeof( ecjpake_test_x3 ), - ecjpake_test_x4, sizeof( ecjpake_test_x4 ) ) ); + ecjpake_test_x3, sizeof( ecjpake_test_x3 ), + ecjpake_test_x4, sizeof( ecjpake_test_x4 ) ) ); /* Read round one */ TEST_ASSERT( mbedtls_ecjpake_read_round_one( &srv, - ecjpake_test_cli_one, - sizeof( ecjpake_test_cli_one ) ) == 0 ); + ecjpake_test_cli_one, + sizeof( ecjpake_test_cli_one ) ) == 0 ); TEST_ASSERT( mbedtls_ecjpake_read_round_one( &cli, - ecjpake_test_srv_one, - sizeof( ecjpake_test_srv_one ) ) == 0 ); + ecjpake_test_srv_one, + sizeof( ecjpake_test_srv_one ) ) == 0 ); /* Skip generation of round two, read round two */ TEST_ASSERT( mbedtls_ecjpake_read_round_two( &cli, - ecjpake_test_srv_two, - sizeof( ecjpake_test_srv_two ) ) == 0 ); + ecjpake_test_srv_two, + sizeof( ecjpake_test_srv_two ) ) == 0 ); TEST_ASSERT( mbedtls_ecjpake_read_round_two( &srv, - ecjpake_test_cli_two, - sizeof( ecjpake_test_cli_two ) ) == 0 ); + ecjpake_test_cli_two, + sizeof( ecjpake_test_cli_two ) ) == 0 ); /* Server derives PMS */ TEST_ASSERT( mbedtls_ecjpake_derive_secret( &srv, @@ -1073,25 +1060,24 @@ int mbedtls_ecjpake_self_test( int verbose ) TEST_ASSERT( len == sizeof( ecjpake_test_pms ) ); TEST_ASSERT( memcmp( buf, ecjpake_test_pms, len ) == 0 ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: mbedtls_ecjpake_free( &cli ); mbedtls_ecjpake_free( &srv ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( ret ); + return ( ret ); } #undef TEST_ASSERT diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp.c index f51f2251..2e78e072 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp.c @@ -68,8 +68,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #if defined(MBEDTLS_SELF_TEST) @@ -101,8 +103,7 @@ static unsigned long add_count, dbl_count, mul_count; /* * Curve types: internal for now, might be exposed later */ -typedef enum -{ +typedef enum { ECP_TYPE_NONE = 0, ECP_TYPE_SHORT_WEIERSTRASS, /* y^2 = x^3 + a x + b */ ECP_TYPE_MONTGOMERY, /* y^2 = x^3 + a x^2 + x */ @@ -120,8 +121,7 @@ typedef enum * * Reminder: update profiles in x509_crt.c when adding a new curves! */ -static const mbedtls_ecp_curve_info ecp_supported_curves[] = -{ +static const mbedtls_ecp_curve_info ecp_supported_curves[] = { #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) { MBEDTLS_ECP_DP_SECP521R1, 25, 521, "secp521r1" }, #endif @@ -168,7 +168,7 @@ static mbedtls_ecp_group_id ecp_supported_grp_id[ECP_NB_CURVES]; */ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_list( void ) { - return( ecp_supported_curves ); + return ( ecp_supported_curves ); } /* @@ -178,15 +178,13 @@ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ) { static int init_done = 0; - if( ! init_done ) - { + if ( ! init_done ) { size_t i = 0; const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { ecp_supported_grp_id[i++] = curve_info->grp_id; } ecp_supported_grp_id[i] = MBEDTLS_ECP_DP_NONE; @@ -194,7 +192,7 @@ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ) init_done = 1; } - return( ecp_supported_grp_id ); + return ( ecp_supported_grp_id ); } /* @@ -204,15 +202,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_gr { const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->grp_id == grp_id ) - return( curve_info ); + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { + if ( curve_info->grp_id == grp_id ) + return ( curve_info ); } - return( NULL ); + return ( NULL ); } /* @@ -222,15 +219,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t tls_i { const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->tls_id == tls_id ) - return( curve_info ); + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { + if ( curve_info->tls_id == tls_id ) + return ( curve_info ); } - return( NULL ); + return ( NULL ); } /* @@ -240,15 +236,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name { const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { - if( strcmp( curve_info->name, name ) == 0 ) - return( curve_info ); + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { + if ( strcmp( curve_info->name, name ) == 0 ) + return ( curve_info ); } - return( NULL ); + return ( NULL ); } /* @@ -256,13 +251,13 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name */ static inline ecp_curve_type ecp_get_type( const mbedtls_ecp_group *grp ) { - if( grp->G.X.p == NULL ) - return( ECP_TYPE_NONE ); + if ( grp->G.X.p == NULL ) + return ( ECP_TYPE_NONE ); - if( grp->G.Y.p == NULL ) - return( ECP_TYPE_MONTGOMERY ); + if ( grp->G.Y.p == NULL ) + return ( ECP_TYPE_MONTGOMERY ); else - return( ECP_TYPE_SHORT_WEIERSTRASS ); + return ( ECP_TYPE_SHORT_WEIERSTRASS ); } /* @@ -270,7 +265,7 @@ static inline ecp_curve_type ecp_get_type( const mbedtls_ecp_group *grp ) */ void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ) { - if( pt == NULL ) + if ( pt == NULL ) return; mbedtls_mpi_init( &pt->X ); @@ -283,7 +278,7 @@ void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ) */ void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ) { - if( grp == NULL ) + if ( grp == NULL ) return; memset( grp, 0, sizeof( mbedtls_ecp_group ) ); @@ -294,7 +289,7 @@ void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ) */ void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ) { - if( key == NULL ) + if ( key == NULL ) return; mbedtls_ecp_group_init( &key->grp ); @@ -307,7 +302,7 @@ void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ) */ void mbedtls_ecp_point_free( mbedtls_ecp_point *pt ) { - if( pt == NULL ) + if ( pt == NULL ) return; mbedtls_mpi_free( &( pt->X ) ); @@ -322,11 +317,10 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) { size_t i; - if( grp == NULL ) + if ( grp == NULL ) return; - if( grp->h != 1 ) - { + if ( grp->h != 1 ) { mbedtls_mpi_free( &grp->P ); mbedtls_mpi_free( &grp->A ); mbedtls_mpi_free( &grp->B ); @@ -334,9 +328,8 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) mbedtls_mpi_free( &grp->N ); } - if( grp->T != NULL ) - { - for( i = 0; i < grp->T_size; i++ ) + if ( grp->T != NULL ) { + for ( i = 0; i < grp->T_size; i++ ) mbedtls_ecp_point_free( &grp->T[i] ); mbedtls_free( grp->T ); } @@ -349,7 +342,7 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) */ void mbedtls_ecp_keypair_free( mbedtls_ecp_keypair *key ) { - if( key == NULL ) + if ( key == NULL ) return; mbedtls_ecp_group_free( &key->grp ); @@ -369,7 +362,7 @@ int mbedtls_ecp_copy( mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &P->Z, &Q->Z ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -387,12 +380,12 @@ int mbedtls_ecp_set_zero( mbedtls_ecp_point *pt ) { int ret; - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->X , 1 ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Y , 1 ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Z , 0 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->X, 1 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Y, 1 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Z, 0 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -400,7 +393,7 @@ cleanup: */ int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ) { - return( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ); + return ( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ); } /* @@ -409,21 +402,20 @@ int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ) int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ) { - if( mbedtls_mpi_cmp_mpi( &P->X, &Q->X ) == 0 && - mbedtls_mpi_cmp_mpi( &P->Y, &Q->Y ) == 0 && - mbedtls_mpi_cmp_mpi( &P->Z, &Q->Z ) == 0 ) - { - return( 0 ); + if ( mbedtls_mpi_cmp_mpi( &P->X, &Q->X ) == 0 && + mbedtls_mpi_cmp_mpi( &P->Y, &Q->Y ) == 0 && + mbedtls_mpi_cmp_mpi( &P->Z, &Q->Z ) == 0 ) { + return ( 0 ); } - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } /* * Import a non-zero point from ASCII strings */ int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, - const char *x, const char *y ) + const char *x, const char *y ) { int ret; @@ -432,99 +424,94 @@ int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &P->Z, 1 ) ); cleanup: - return( ret ); + return ( ret ); } /* * Export a point into unsigned binary data (SEC1 2.3.3) */ int mbedtls_ecp_point_write_binary( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *P, - int format, size_t *olen, - unsigned char *buf, size_t buflen ) + int format, size_t *olen, + unsigned char *buf, size_t buflen ) { int ret = 0; size_t plen; - if( format != MBEDTLS_ECP_PF_UNCOMPRESSED && - format != MBEDTLS_ECP_PF_COMPRESSED ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( format != MBEDTLS_ECP_PF_UNCOMPRESSED && + format != MBEDTLS_ECP_PF_COMPRESSED ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Common case: P == 0 */ - if( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) - { - if( buflen < 1 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) { + if ( buflen < 1 ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); buf[0] = 0x00; *olen = 1; - return( 0 ); + return ( 0 ); } plen = mbedtls_mpi_size( &grp->P ); - if( format == MBEDTLS_ECP_PF_UNCOMPRESSED ) - { + if ( format == MBEDTLS_ECP_PF_UNCOMPRESSED ) { *olen = 2 * plen + 1; - if( buflen < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( buflen < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); buf[0] = 0x04; MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &P->X, buf + 1, plen ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &P->Y, buf + 1 + plen, plen ) ); - } - else if( format == MBEDTLS_ECP_PF_COMPRESSED ) - { + } else if ( format == MBEDTLS_ECP_PF_COMPRESSED ) { *olen = plen + 1; - if( buflen < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( buflen < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); buf[0] = 0x02 + mbedtls_mpi_get_bit( &P->Y, 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &P->X, buf + 1, plen ) ); } cleanup: - return( ret ); + return ( ret ); } /* * Import a point from unsigned binary data (SEC1 2.3.4) */ int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, - const unsigned char *buf, size_t ilen ) + const unsigned char *buf, size_t ilen ) { int ret; size_t plen; - if( ilen < 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ilen < 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( buf[0] == 0x00 ) - { - if( ilen == 1 ) - return( mbedtls_ecp_set_zero( pt ) ); + if ( buf[0] == 0x00 ) { + if ( ilen == 1 ) + return ( mbedtls_ecp_set_zero( pt ) ); else - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } plen = mbedtls_mpi_size( &grp->P ); - if( buf[0] != 0x04 ) - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + if ( buf[0] != 0x04 ) + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); - if( ilen != 2 * plen + 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ilen != 2 * plen + 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &pt->X, buf + 1, plen ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &pt->Y, buf + 1 + plen, plen ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Z, 1 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -534,7 +521,7 @@ cleanup: * } ECPoint; */ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, - const unsigned char **buf, size_t buf_len ) + const unsigned char **buf, size_t buf_len ) { unsigned char data_len; const unsigned char *buf_start; @@ -542,12 +529,12 @@ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point /* * We must have at least two bytes (1 for length, at least one for data) */ - if( buf_len < 2 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( buf_len < 2 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); data_len = *(*buf)++; - if( data_len < 1 || data_len > buf_len - 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( data_len < 1 || data_len > buf_len - 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Save buffer start for read_binary and update buf @@ -565,28 +552,28 @@ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point * } ECPoint; */ int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ) + int format, size_t *olen, + unsigned char *buf, size_t blen ) { int ret; /* * buffer length must be at least one, for our length byte */ - if( blen < 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( blen < 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_point_write_binary( grp, pt, format, - olen, buf + 1, blen - 1) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_point_write_binary( grp, pt, format, + olen, buf + 1, blen - 1) ) != 0 ) + return ( ret ); /* * write length to the first byte and update total length */ - buf[0] = (unsigned char) *olen; + buf[0] = (unsigned char) * olen; ++*olen; - return( 0 ); + return ( 0 ); } /* @@ -600,14 +587,14 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **bu /* * We expect at least three bytes (see below) */ - if( len < 3 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( len < 3 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * First byte is curve_type; only named_curve is handled */ - if( *(*buf)++ != MBEDTLS_ECP_TLS_NAMED_CURVE ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( *(*buf)++ != MBEDTLS_ECP_TLS_NAMED_CURVE ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Next two bytes are the namedcurve value @@ -616,8 +603,8 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **bu tls_id <<= 8; tls_id |= *(*buf)++; - if( ( curve_info = mbedtls_ecp_curve_info_from_tls_id( tls_id ) ) == NULL ) - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + if ( ( curve_info = mbedtls_ecp_curve_info_from_tls_id( tls_id ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); return mbedtls_ecp_group_load( grp, curve_info->grp_id ); } @@ -626,19 +613,19 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **bu * Write the ECParameters record corresponding to a group (RFC 4492) */ int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, size_t *olen, - unsigned char *buf, size_t blen ) + unsigned char *buf, size_t blen ) { const mbedtls_ecp_curve_info *curve_info; - if( ( curve_info = mbedtls_ecp_curve_info_from_grp_id( grp->id ) ) == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ( curve_info = mbedtls_ecp_curve_info_from_grp_id( grp->id ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * We are going to write 3 bytes (see below) */ *olen = 3; - if( blen < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( blen < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); /* * First byte is curve_type, always named_curve @@ -651,7 +638,7 @@ int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, size_t *olen, buf[0] = curve_info->tls_id >> 8; buf[1] = curve_info->tls_id & 0xFF; - return( 0 ); + return ( 0 ); } /* @@ -664,28 +651,27 @@ static int ecp_modp( mbedtls_mpi *N, const mbedtls_ecp_group *grp ) { int ret; - if( grp->modp == NULL ) - return( mbedtls_mpi_mod_mpi( N, N, &grp->P ) ); + if ( grp->modp == NULL ) + return ( mbedtls_mpi_mod_mpi( N, N, &grp->P ) ); /* N->s < 0 is a much faster test, which fails only if N is 0 */ - if( ( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) || - mbedtls_mpi_bitlen( N ) > 2 * grp->pbits ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) || + mbedtls_mpi_bitlen( N ) > 2 * grp->pbits ) { + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } MBEDTLS_MPI_CHK( grp->modp( N ) ); /* N->s < 0 is a much faster test, which fails only if N is 0 */ - while( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) + while ( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( N, N, &grp->P ) ); - while( mbedtls_mpi_cmp_mpi( N, &grp->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( N, &grp->P ) >= 0 ) /* we known P, N and the result are positive */ MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( N, N, &grp->P ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -745,23 +731,28 @@ static int ecp_normalize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *p int ret; mbedtls_mpi Zi, ZZi; - if( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ) - return( 0 ); + if ( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ) + return ( 0 ); - mbedtls_mpi_init( &Zi ); mbedtls_mpi_init( &ZZi ); + mbedtls_mpi_init( &Zi ); + mbedtls_mpi_init( &ZZi ); /* * X = X / Z^2 mod p */ MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &Zi, &pt->Z, &grp->P ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ZZi ) ); MOD_MUL( pt->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); + MOD_MUL( ZZi ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ZZi ) ); + MOD_MUL( pt->X ); /* * Y = Y / Z^3 mod p */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ZZi ) ); MOD_MUL( pt->Y ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &Zi ) ); MOD_MUL( pt->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ZZi ) ); + MOD_MUL( pt->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &Zi ) ); + MOD_MUL( pt->Y ); /* * Z = 1 @@ -770,9 +761,10 @@ static int ecp_normalize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *p cleanup: - mbedtls_mpi_free( &Zi ); mbedtls_mpi_free( &ZZi ); + mbedtls_mpi_free( &Zi ); + mbedtls_mpi_free( &ZZi ); - return( ret ); + return ( ret ); } /* @@ -793,51 +785,55 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp, size_t i; mbedtls_mpi *c, u, Zi, ZZi; - if( t_len < 2 ) - return( ecp_normalize_jac( grp, *T ) ); + if ( t_len < 2 ) + return ( ecp_normalize_jac( grp, *T ) ); - if( ( c = mbedtls_calloc( t_len, sizeof( mbedtls_mpi ) ) ) == NULL ) - return( MBEDTLS_ERR_ECP_ALLOC_FAILED ); + if ( ( c = mbedtls_calloc( t_len, sizeof( mbedtls_mpi ) ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_ALLOC_FAILED ); - mbedtls_mpi_init( &u ); mbedtls_mpi_init( &Zi ); mbedtls_mpi_init( &ZZi ); + mbedtls_mpi_init( &u ); + mbedtls_mpi_init( &Zi ); + mbedtls_mpi_init( &ZZi ); /* * c[i] = Z_0 * ... * Z_i */ MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &c[0], &T[0]->Z ) ); - for( i = 1; i < t_len; i++ ) - { - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &c[i], &c[i-1], &T[i]->Z ) ); + for ( i = 1; i < t_len; i++ ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &c[i], &c[i - 1], &T[i]->Z ) ); MOD_MUL( c[i] ); } /* * u = 1 / (Z_0 * ... * Z_n) mod P */ - MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &u, &c[t_len-1], &grp->P ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &u, &c[t_len - 1], &grp->P ) ); - for( i = t_len - 1; ; i-- ) - { + for ( i = t_len - 1; ; i-- ) { /* * Zi = 1 / Z_i mod p * u = 1 / (Z_0 * ... * Z_i) mod P */ - if( i == 0 ) { + if ( i == 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Zi, &u ) ); - } - else - { - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Zi, &u, &c[i-1] ) ); MOD_MUL( Zi ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &u, &u, &T[i]->Z ) ); MOD_MUL( u ); + } else { + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Zi, &u, &c[i - 1] ) ); + MOD_MUL( Zi ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &u, &u, &T[i]->Z ) ); + MOD_MUL( u ); } /* * proceed as in normalize() */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->X, &T[i]->X, &ZZi ) ); MOD_MUL( T[i]->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &ZZi ) ); MOD_MUL( T[i]->Y ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &Zi ) ); MOD_MUL( T[i]->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); + MOD_MUL( ZZi ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->X, &T[i]->X, &ZZi ) ); + MOD_MUL( T[i]->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &ZZi ) ); + MOD_MUL( T[i]->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &Zi ) ); + MOD_MUL( T[i]->Y ); /* * Post-precessing: reclaim some memory by shrinking coordinates @@ -849,18 +845,20 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( mbedtls_mpi_shrink( &T[i]->Y, grp->P.n ) ); mbedtls_mpi_free( &T[i]->Z ); - if( i == 0 ) + if ( i == 0 ) break; } cleanup: - mbedtls_mpi_free( &u ); mbedtls_mpi_free( &Zi ); mbedtls_mpi_free( &ZZi ); - for( i = 0; i < t_len; i++ ) + mbedtls_mpi_free( &u ); + mbedtls_mpi_free( &Zi ); + mbedtls_mpi_free( &ZZi ); + for ( i = 0; i < t_len; i++ ) mbedtls_mpi_free( &c[i] ); mbedtls_free( c ); - return( ret ); + return ( ret ); } /* @@ -868,8 +866,8 @@ cleanup: * "inv" must be 0 (don't invert) or 1 (invert) or the result will be invalid */ static int ecp_safe_invert_jac( const mbedtls_ecp_group *grp, - mbedtls_ecp_point *Q, - unsigned char inv ) + mbedtls_ecp_point *Q, + unsigned char inv ) { int ret; unsigned char nonzero; @@ -885,7 +883,7 @@ static int ecp_safe_invert_jac( const mbedtls_ecp_group *grp, cleanup: mbedtls_mpi_free( &mQY ); - return( ret ); + return ( ret ); } /* @@ -912,67 +910,94 @@ static int ecp_double_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, dbl_count++; #endif - mbedtls_mpi_init( &M ); mbedtls_mpi_init( &S ); mbedtls_mpi_init( &T ); mbedtls_mpi_init( &U ); + mbedtls_mpi_init( &M ); + mbedtls_mpi_init( &S ); + mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &U ); /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { + if ( grp->A.p == NULL ) { /* M = 3(X + Z^2)(X - Z^2) */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &T, &P->X, &S ) ); MOD_ADD( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U, &P->X, &S ) ); MOD_SUB( U ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &U ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); MOD_ADD( M ); - } - else - { + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &T, &P->X, &S ) ); + MOD_ADD( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U, &P->X, &S ) ); + MOD_SUB( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &U ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); + MOD_ADD( M ); + } else { /* M = 3.X^2 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &P->X ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); MOD_ADD( M ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &P->X ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); + MOD_ADD( M ); /* Optimize away for "koblitz" curves with A = 0 */ - if( mbedtls_mpi_cmp_int( &grp->A, 0 ) != 0 ) - { + if ( mbedtls_mpi_cmp_int( &grp->A, 0 ) != 0 ) { /* M += A.Z^4 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &S, &S ) ); MOD_MUL( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &grp->A ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &M, &M, &S ) ); MOD_ADD( M ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &S, &S ) ); + MOD_MUL( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &grp->A ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &M, &M, &S ) ); + MOD_ADD( M ); } } /* S = 4.X.Y^2 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &P->Y, &P->Y ) ); MOD_MUL( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T, 1 ) ); MOD_ADD( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &T ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &S, 1 ) ); MOD_ADD( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &P->Y, &P->Y ) ); + MOD_MUL( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T, 1 ) ); + MOD_ADD( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &T ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &S, 1 ) ); + MOD_ADD( S ); /* U = 8.Y^4 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &T, &T ) ); MOD_MUL( U ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); MOD_ADD( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &T, &T ) ); + MOD_MUL( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); + MOD_ADD( U ); /* T = M^2 - 2.S */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &M, &M ) ); MOD_MUL( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); MOD_SUB( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); MOD_SUB( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &M, &M ) ); + MOD_MUL( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); + MOD_SUB( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); + MOD_SUB( T ); /* S = M(S - T) - U */ - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &T ) ); MOD_SUB( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &S, &M ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &U ) ); MOD_SUB( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &T ) ); + MOD_SUB( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &S, &M ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &U ) ); + MOD_SUB( S ); /* U = 2.Y.Z */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &P->Y, &P->Z ) ); MOD_MUL( U ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); MOD_ADD( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &P->Y, &P->Z ) ); + MOD_MUL( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); + MOD_ADD( U ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->X, &T ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->Y, &S ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->Z, &U ) ); cleanup: - mbedtls_mpi_free( &M ); mbedtls_mpi_free( &S ); mbedtls_mpi_free( &T ); mbedtls_mpi_free( &U ); + mbedtls_mpi_free( &M ); + mbedtls_mpi_free( &S ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &U ); - return( ret ); + return ( ret ); } /* @@ -1006,55 +1031,74 @@ static int ecp_add_mixed( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, /* * Trivial cases: P == 0 or Q == 0 (case 1) */ - if( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) - return( mbedtls_ecp_copy( R, Q ) ); + if ( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) + return ( mbedtls_ecp_copy( R, Q ) ); - if( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 0 ) == 0 ) - return( mbedtls_ecp_copy( R, P ) ); + if ( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 0 ) == 0 ) + return ( mbedtls_ecp_copy( R, P ) ); /* * Make sure Q coordinates are normalized */ - if( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 1 ) != 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 1 ) != 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - mbedtls_mpi_init( &T1 ); mbedtls_mpi_init( &T2 ); mbedtls_mpi_init( &T3 ); mbedtls_mpi_init( &T4 ); - mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); + mbedtls_mpi_init( &T1 ); + mbedtls_mpi_init( &T2 ); + mbedtls_mpi_init( &T3 ); + mbedtls_mpi_init( &T4 ); + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &P->Z, &P->Z ) ); MOD_MUL( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T1, &P->Z ) ); MOD_MUL( T2 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &T1, &Q->X ) ); MOD_MUL( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T2, &Q->Y ) ); MOD_MUL( T2 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T1, &T1, &P->X ) ); MOD_SUB( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T2, &T2, &P->Y ) ); MOD_SUB( T2 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &P->Z, &P->Z ) ); + MOD_MUL( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T1, &P->Z ) ); + MOD_MUL( T2 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &T1, &Q->X ) ); + MOD_MUL( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T2, &Q->Y ) ); + MOD_MUL( T2 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T1, &T1, &P->X ) ); + MOD_SUB( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T2, &T2, &P->Y ) ); + MOD_SUB( T2 ); /* Special cases (2) and (3) */ - if( mbedtls_mpi_cmp_int( &T1, 0 ) == 0 ) - { - if( mbedtls_mpi_cmp_int( &T2, 0 ) == 0 ) - { + if ( mbedtls_mpi_cmp_int( &T1, 0 ) == 0 ) { + if ( mbedtls_mpi_cmp_int( &T2, 0 ) == 0 ) { ret = ecp_double_jac( grp, R, P ); goto cleanup; - } - else - { + } else { ret = mbedtls_ecp_set_zero( R ); goto cleanup; } } - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Z, &P->Z, &T1 ) ); MOD_MUL( Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T1, &T1 ) ); MOD_MUL( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T3, &T1 ) ); MOD_MUL( T4 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &P->X ) ); MOD_MUL( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T1, &T3, 2 ) ); MOD_ADD( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &T2, &T2 ) ); MOD_MUL( X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); MOD_SUB( X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T4 ) ); MOD_SUB( X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T3, &T3, &X ) ); MOD_SUB( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &T2 ) ); MOD_MUL( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T4, &P->Y ) ); MOD_MUL( T4 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &Y, &T3, &T4 ) ); MOD_SUB( Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Z, &P->Z, &T1 ) ); + MOD_MUL( Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T1, &T1 ) ); + MOD_MUL( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T3, &T1 ) ); + MOD_MUL( T4 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &P->X ) ); + MOD_MUL( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T1, &T3, 2 ) ); + MOD_ADD( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &T2, &T2 ) ); + MOD_MUL( X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); + MOD_SUB( X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T4 ) ); + MOD_SUB( X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T3, &T3, &X ) ); + MOD_SUB( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &T2 ) ); + MOD_MUL( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T4, &P->Y ) ); + MOD_MUL( T4 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &Y, &T3, &T4 ) ); + MOD_SUB( Y ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->X, &X ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->Y, &Y ) ); @@ -1062,10 +1106,15 @@ static int ecp_add_mixed( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: - mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 ); mbedtls_mpi_free( &T3 ); mbedtls_mpi_free( &T4 ); - mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); + mbedtls_mpi_free( &T1 ); + mbedtls_mpi_free( &T2 ); + mbedtls_mpi_free( &T3 ); + mbedtls_mpi_free( &T4 ); + mbedtls_mpi_free( &X ); + mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &Z ); - return( ret ); + return ( ret ); } /* @@ -1076,43 +1125,48 @@ cleanup: * This countermeasure was first suggested in [2]. */ static int ecp_randomize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; mbedtls_mpi l, ll; size_t p_size = ( grp->pbits + 7 ) / 8; int count = 0; - mbedtls_mpi_init( &l ); mbedtls_mpi_init( &ll ); + mbedtls_mpi_init( &l ); + mbedtls_mpi_init( &ll ); /* Generate l such that 1 < l < p */ - do - { + do { mbedtls_mpi_fill_random( &l, p_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &l, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); /* Z = l * Z */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Z, &pt->Z, &l ) ); MOD_MUL( pt->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Z, &pt->Z, &l ) ); + MOD_MUL( pt->Z ); /* X = l^2 * X */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &l, &l ) ); MOD_MUL( ll ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ll ) ); MOD_MUL( pt->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &l, &l ) ); + MOD_MUL( ll ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ll ) ); + MOD_MUL( pt->X ); /* Y = l^3 * Y */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &ll, &l ) ); MOD_MUL( ll ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ll ) ); MOD_MUL( pt->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &ll, &l ) ); + MOD_MUL( ll ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ll ) ); + MOD_MUL( pt->Y ); cleanup: - mbedtls_mpi_free( &l ); mbedtls_mpi_free( &ll ); + mbedtls_mpi_free( &l ); + mbedtls_mpi_free( &ll ); - return( ret ); + return ( ret ); } /* @@ -1154,17 +1208,16 @@ static void ecp_comb_fixed( unsigned char x[], size_t d, size_t i, j; unsigned char c, cc, adjust; - memset( x, 0, d+1 ); + memset( x, 0, d + 1 ); /* First get the classical comb values (except for x_d = 0) */ - for( i = 0; i < d; i++ ) - for( j = 0; j < w; j++ ) + for ( i = 0; i < d; i++ ) + for ( j = 0; j < w; j++ ) x[i] |= mbedtls_mpi_get_bit( m, i + d * j ) << j; /* Now make sure x_1 .. x_d are odd */ c = 0; - for( i = 1; i <= d; i++ ) - { + for ( i = 1; i <= d; i++ ) { /* Add carry and update it */ cc = x[i] & c; x[i] = x[i] ^ c; @@ -1172,9 +1225,9 @@ static void ecp_comb_fixed( unsigned char x[], size_t d, /* Adjust if needed, avoiding branches */ adjust = 1 - ( x[i] & 0x01 ); - c |= x[i] & ( x[i-1] * adjust ); - x[i] = x[i] ^ ( x[i-1] * adjust ); - x[i-1] |= adjust << 7; + c |= x[i] & ( x[i - 1] * adjust ); + x[i] = x[i] ^ ( x[i - 1] * adjust ); + x[i - 1] |= adjust << 7; } } @@ -1204,11 +1257,10 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( mbedtls_ecp_copy( &T[0], P ) ); k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { + for ( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) { cur = T + i; MBEDTLS_MPI_CHK( mbedtls_ecp_copy( cur, T + ( i >> 1 ) ) ); - for( j = 0; j < d; j++ ) + for ( j = 0; j < d; j++ ) MBEDTLS_MPI_CHK( ecp_double_jac( grp, cur, cur ) ); TT[k++] = cur; @@ -1221,11 +1273,9 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp, * Be careful to update T[2^l] only after using it! */ k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { + for ( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) { j = i; - while( j-- ) - { + while ( j-- ) { MBEDTLS_MPI_CHK( ecp_add_mixed( grp, &T[i + j], &T[j], &T[i] ) ); TT[k++] = &T[i + j]; } @@ -1234,7 +1284,7 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( ecp_normalize_jac_many( grp, TT, k ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1251,8 +1301,7 @@ static int ecp_select_comb( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, ii = ( i & 0x7Fu ) >> 1; /* Read the whole table to thwart cache-based timing attacks */ - for( j = 0; j < t_len; j++ ) - { + for ( j = 0; j < t_len; j++ ) { MBEDTLS_MPI_CHK( mbedtls_mpi_safe_cond_assign( &R->X, &T[j].X, j == ii ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_safe_cond_assign( &R->Y, &T[j].Y, j == ii ) ); } @@ -1261,7 +1310,7 @@ static int ecp_select_comb( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, MBEDTLS_MPI_CHK( ecp_safe_invert_jac( grp, R, i >> 7 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1286,11 +1335,10 @@ static int ecp_mul_comb_core( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R i = d; MBEDTLS_MPI_CHK( ecp_select_comb( grp, R, T, t_len, x[i] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &R->Z, 1 ) ); - if( f_rng != 0 ) + if ( f_rng != 0 ) MBEDTLS_MPI_CHK( ecp_randomize_jac( grp, R, f_rng, p_rng ) ); - while( i-- != 0 ) - { + while ( i-- != 0 ) { MBEDTLS_MPI_CHK( ecp_double_jac( grp, R, R ) ); MBEDTLS_MPI_CHK( ecp_select_comb( grp, &Txi, T, t_len, x[i] ) ); MBEDTLS_MPI_CHK( ecp_add_mixed( grp, R, R, &Txi ) ); @@ -1299,7 +1347,7 @@ static int ecp_mul_comb_core( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R cleanup: mbedtls_ecp_point_free( &Txi ); - return( ret ); + return ( ret ); } /* @@ -1322,8 +1370,8 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, mbedtls_mpi_init( &mm ); /* we need N to be odd to trnaform m in an odd number, check now */ - if( mbedtls_mpi_get_bit( &grp->N, 0 ) != 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( mbedtls_mpi_get_bit( &grp->N, 0 ) != 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Minimize the number of multiplications, that is minimize @@ -1340,7 +1388,7 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, #if MBEDTLS_ECP_FIXED_POINT_OPTIM == 1 p_eq_g = ( mbedtls_mpi_cmp_mpi( &P->Y, &grp->G.Y ) == 0 && mbedtls_mpi_cmp_mpi( &P->X, &grp->G.X ) == 0 ); - if( p_eq_g ) + if ( p_eq_g ) w++; #else p_eq_g = 0; @@ -1350,9 +1398,9 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, * Make sure w is within bounds. * (The last test is useful only for very small curves in the test suite.) */ - if( w > MBEDTLS_ECP_WINDOW_SIZE ) + if ( w > MBEDTLS_ECP_WINDOW_SIZE ) w = MBEDTLS_ECP_WINDOW_SIZE; - if( w >= grp->nbits ) + if ( w >= grp->nbits ) w = 2; /* Other sizes that depend on w */ @@ -1365,19 +1413,16 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, */ T = p_eq_g ? grp->T : NULL; - if( T == NULL ) - { + if ( T == NULL ) { T = mbedtls_calloc( pre_len, sizeof( mbedtls_ecp_point ) ); - if( T == NULL ) - { + if ( T == NULL ) { ret = MBEDTLS_ERR_ECP_ALLOC_FAILED; goto cleanup; } MBEDTLS_MPI_CHK( ecp_precompute_comb( grp, T, P, w, d ) ); - if( p_eq_g ) - { + if ( p_eq_g ) { grp->T = T; grp->T_size = pre_len; } @@ -1406,9 +1451,8 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: - if( T != NULL && ! p_eq_g ) - { - for( i = 0; i < pre_len; i++ ) + if ( T != NULL && ! p_eq_g ) { + for ( i = 0; i < pre_len; i++ ) mbedtls_ecp_point_free( &T[i] ); mbedtls_free( T ); } @@ -1416,10 +1460,10 @@ cleanup: mbedtls_mpi_free( &M ); mbedtls_mpi_free( &mm ); - if( ret != 0 ) + if ( ret != 0 ) mbedtls_ecp_point_free( R ); - return( ret ); + return ( ret ); } #endif /* ECP_SHORTWEIERSTRASS */ @@ -1442,11 +1486,12 @@ static int ecp_normalize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P int ret; MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &P->Z, &P->Z, &grp->P ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &P->Z ) ); MOD_MUL( P->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &P->Z ) ); + MOD_MUL( P->X ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &P->Z, 1 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1458,7 +1503,7 @@ cleanup: * Cost: 2M */ static int ecp_randomize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; mbedtls_mpi l; @@ -1468,25 +1513,25 @@ static int ecp_randomize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P mbedtls_mpi_init( &l ); /* Generate l such that 1 < l < p */ - do - { + do { mbedtls_mpi_fill_random( &l, p_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &l, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &l ) ); MOD_MUL( P->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->Z, &P->Z, &l ) ); MOD_MUL( P->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &l ) ); + MOD_MUL( P->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->Z, &P->Z, &l ) ); + MOD_MUL( P->Z ); cleanup: mbedtls_mpi_free( &l ); - return( ret ); + return ( ret ); } /* @@ -1512,35 +1557,65 @@ static int ecp_double_add_mxz( const mbedtls_ecp_group *grp, int ret; mbedtls_mpi A, AA, B, BB, E, C, D, DA, CB; - mbedtls_mpi_init( &A ); mbedtls_mpi_init( &AA ); mbedtls_mpi_init( &B ); - mbedtls_mpi_init( &BB ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &C ); - mbedtls_mpi_init( &D ); mbedtls_mpi_init( &DA ); mbedtls_mpi_init( &CB ); + mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &AA ); + mbedtls_mpi_init( &B ); + mbedtls_mpi_init( &BB ); + mbedtls_mpi_init( &E ); + mbedtls_mpi_init( &C ); + mbedtls_mpi_init( &D ); + mbedtls_mpi_init( &DA ); + mbedtls_mpi_init( &CB ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &A, &P->X, &P->Z ) ); MOD_ADD( A ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &AA, &A, &A ) ); MOD_MUL( AA ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &B, &P->X, &P->Z ) ); MOD_SUB( B ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &BB, &B, &B ) ); MOD_MUL( BB ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &E, &AA, &BB ) ); MOD_SUB( E ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &C, &Q->X, &Q->Z ) ); MOD_ADD( C ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &D, &Q->X, &Q->Z ) ); MOD_SUB( D ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &DA, &D, &A ) ); MOD_MUL( DA ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &CB, &C, &B ) ); MOD_MUL( CB ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &S->X, &DA, &CB ) ); MOD_MUL( S->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->X, &S->X, &S->X ) ); MOD_MUL( S->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S->Z, &DA, &CB ) ); MOD_SUB( S->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, &S->Z, &S->Z ) ); MOD_MUL( S->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, d, &S->Z ) ); MOD_MUL( S->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->X, &AA, &BB ) ); MOD_MUL( R->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &grp->A, &E ) ); MOD_MUL( R->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &R->Z, &BB, &R->Z ) ); MOD_ADD( R->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &E, &R->Z ) ); MOD_MUL( R->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &A, &P->X, &P->Z ) ); + MOD_ADD( A ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &AA, &A, &A ) ); + MOD_MUL( AA ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &B, &P->X, &P->Z ) ); + MOD_SUB( B ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &BB, &B, &B ) ); + MOD_MUL( BB ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &E, &AA, &BB ) ); + MOD_SUB( E ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &C, &Q->X, &Q->Z ) ); + MOD_ADD( C ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &D, &Q->X, &Q->Z ) ); + MOD_SUB( D ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &DA, &D, &A ) ); + MOD_MUL( DA ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &CB, &C, &B ) ); + MOD_MUL( CB ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &S->X, &DA, &CB ) ); + MOD_MUL( S->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->X, &S->X, &S->X ) ); + MOD_MUL( S->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S->Z, &DA, &CB ) ); + MOD_SUB( S->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, &S->Z, &S->Z ) ); + MOD_MUL( S->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, d, &S->Z ) ); + MOD_MUL( S->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->X, &AA, &BB ) ); + MOD_MUL( R->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &grp->A, &E ) ); + MOD_MUL( R->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &R->Z, &BB, &R->Z ) ); + MOD_ADD( R->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &E, &R->Z ) ); + MOD_MUL( R->Z ); cleanup: - mbedtls_mpi_free( &A ); mbedtls_mpi_free( &AA ); mbedtls_mpi_free( &B ); - mbedtls_mpi_free( &BB ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &C ); - mbedtls_mpi_free( &D ); mbedtls_mpi_free( &DA ); mbedtls_mpi_free( &CB ); + mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &AA ); + mbedtls_mpi_free( &B ); + mbedtls_mpi_free( &BB ); + mbedtls_mpi_free( &E ); + mbedtls_mpi_free( &C ); + mbedtls_mpi_free( &D ); + mbedtls_mpi_free( &DA ); + mbedtls_mpi_free( &CB ); - return( ret ); + return ( ret ); } /* @@ -1558,7 +1633,8 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, mbedtls_ecp_point RP; mbedtls_mpi PX; - mbedtls_ecp_point_init( &RP ); mbedtls_mpi_init( &PX ); + mbedtls_ecp_point_init( &RP ); + mbedtls_mpi_init( &PX ); /* Save PX and read from P before writing to R, in case P == R */ MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &PX, &P->X ) ); @@ -1573,13 +1649,12 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, MOD_ADD( RP.X ); /* Randomize coordinates of the starting point */ - if( f_rng != NULL ) + if ( f_rng != NULL ) MBEDTLS_MPI_CHK( ecp_randomize_mxz( grp, &RP, f_rng, p_rng ) ); /* Loop invariant: R = result so far, RP = R + P */ i = mbedtls_mpi_bitlen( m ); /* one past the (zero-based) most significant bit */ - while( i-- > 0 ) - { + while ( i-- > 0 ) { b = mbedtls_mpi_get_bit( m, i ); /* * if (b) R = 2R + P else R = 2R, @@ -1598,9 +1673,10 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, MBEDTLS_MPI_CHK( ecp_normalize_mxz( grp, R ) ); cleanup: - mbedtls_ecp_point_free( &RP ); mbedtls_mpi_free( &PX ); + mbedtls_ecp_point_free( &RP ); + mbedtls_mpi_free( &PX ); - return( ret ); + return ( ret ); } #endif /* ECP_MONTGOMERY */ @@ -1609,28 +1685,28 @@ cleanup: * Multiplication R = m * P */ int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; /* Common sanity checks */ - if( mbedtls_mpi_cmp_int( &P->Z, 1 ) != 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( &P->Z, 1 ) != 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_check_privkey( grp, m ) ) != 0 || - ( ret = mbedtls_ecp_check_pubkey( grp, P ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_check_privkey( grp, m ) ) != 0 || + ( ret = mbedtls_ecp_check_pubkey( grp, P ) ) != 0 ) + return ( ret ); #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - return( ecp_mul_mxz( grp, R, m, P, f_rng, p_rng ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) + return ( ecp_mul_mxz( grp, R, m, P, f_rng, p_rng ) ); #endif #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_mul_comb( grp, R, m, P, f_rng, p_rng ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) + return ( ecp_mul_comb( grp, R, m, P, f_rng, p_rng ) ); #endif - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } #if defined(ECP_SHORTWEIERSTRASS) @@ -1644,42 +1720,47 @@ static int ecp_check_pubkey_sw( const mbedtls_ecp_group *grp, const mbedtls_ecp_ mbedtls_mpi YY, RHS; /* pt coordinates must be normalized for our checks */ - if( mbedtls_mpi_cmp_int( &pt->X, 0 ) < 0 || - mbedtls_mpi_cmp_int( &pt->Y, 0 ) < 0 || - mbedtls_mpi_cmp_mpi( &pt->X, &grp->P ) >= 0 || - mbedtls_mpi_cmp_mpi( &pt->Y, &grp->P ) >= 0 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_cmp_int( &pt->X, 0 ) < 0 || + mbedtls_mpi_cmp_int( &pt->Y, 0 ) < 0 || + mbedtls_mpi_cmp_mpi( &pt->X, &grp->P ) >= 0 || + mbedtls_mpi_cmp_mpi( &pt->Y, &grp->P ) >= 0 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); - mbedtls_mpi_init( &YY ); mbedtls_mpi_init( &RHS ); + mbedtls_mpi_init( &YY ); + mbedtls_mpi_init( &RHS ); /* * YY = Y^2 * RHS = X (X^2 + A) + B = X^3 + A X + B */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); MOD_MUL( YY ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); MOD_MUL( RHS ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); + MOD_MUL( YY ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); + MOD_MUL( RHS ); /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &RHS, &RHS, 3 ) ); MOD_SUB( RHS ); - } - else - { - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->A ) ); MOD_ADD( RHS ); + if ( grp->A.p == NULL ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &RHS, &RHS, 3 ) ); + MOD_SUB( RHS ); + } else { + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->A ) ); + MOD_ADD( RHS ); } - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); MOD_MUL( RHS ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->B ) ); MOD_ADD( RHS ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); + MOD_MUL( RHS ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->B ) ); + MOD_ADD( RHS ); - if( mbedtls_mpi_cmp_mpi( &YY, &RHS ) != 0 ) + if ( mbedtls_mpi_cmp_mpi( &YY, &RHS ) != 0 ) ret = MBEDTLS_ERR_ECP_INVALID_KEY; cleanup: - mbedtls_mpi_free( &YY ); mbedtls_mpi_free( &RHS ); + mbedtls_mpi_free( &YY ); + mbedtls_mpi_free( &RHS ); - return( ret ); + return ( ret ); } #endif /* ECP_SHORTWEIERSTRASS */ @@ -1694,23 +1775,18 @@ static int mbedtls_ecp_mul_shortcuts( mbedtls_ecp_group *grp, { int ret; - if( mbedtls_mpi_cmp_int( m, 1 ) == 0 ) - { + if ( mbedtls_mpi_cmp_int( m, 1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) ); - } - else if( mbedtls_mpi_cmp_int( m, -1 ) == 0 ) - { + } else if ( mbedtls_mpi_cmp_int( m, -1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) ); - if( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 ) + if ( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &R->Y, &grp->P, &R->Y ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, R, m, P, NULL, NULL ) ); } cleanup: - return( ret ); + return ( ret ); } /* @@ -1718,14 +1794,14 @@ cleanup: * NOT constant-time */ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - const mbedtls_mpi *n, const mbedtls_ecp_point *Q ) + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + const mbedtls_mpi *n, const mbedtls_ecp_point *Q ) { int ret; mbedtls_ecp_point mP; - if( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS ) - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + if ( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS ) + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); mbedtls_ecp_point_init( &mP ); @@ -1738,7 +1814,7 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: mbedtls_ecp_point_free( &mP ); - return( ret ); + return ( ret ); } @@ -1749,10 +1825,10 @@ cleanup: static int ecp_check_pubkey_mx( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt ) { /* [Curve25519 p. 5] Just check X is the correct number of bytes */ - if( mbedtls_mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); - return( 0 ); + return ( 0 ); } #endif /* ECP_MONTGOMERY */ @@ -1762,18 +1838,18 @@ static int ecp_check_pubkey_mx( const mbedtls_ecp_group *grp, const mbedtls_ecp_ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt ) { /* Must use affine coordinates */ - if( mbedtls_mpi_cmp_int( &pt->Z, 1 ) != 0 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_cmp_int( &pt->Z, 1 ) != 0 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - return( ecp_check_pubkey_mx( grp, pt ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) + return ( ecp_check_pubkey_mx( grp, pt ) ); #endif #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_check_pubkey_sw( grp, pt ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) + return ( ecp_check_pubkey_sw( grp, pt ) ); #endif - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } /* @@ -1782,58 +1858,55 @@ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_po int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *d ) { #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - { + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) { /* see [Curve25519] page 5 */ - if( mbedtls_mpi_get_bit( d, 0 ) != 0 || - mbedtls_mpi_get_bit( d, 1 ) != 0 || - mbedtls_mpi_get_bit( d, 2 ) != 0 || - mbedtls_mpi_bitlen( d ) - 1 != grp->nbits ) /* mbedtls_mpi_bitlen is one-based! */ - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_get_bit( d, 0 ) != 0 || + mbedtls_mpi_get_bit( d, 1 ) != 0 || + mbedtls_mpi_get_bit( d, 2 ) != 0 || + mbedtls_mpi_bitlen( d ) - 1 != grp->nbits ) /* mbedtls_mpi_bitlen is one-based! */ + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); else - return( 0 ); + return ( 0 ); } #endif /* ECP_MONTGOMERY */ #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - { + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) { /* see SEC1 3.2 */ - if( mbedtls_mpi_cmp_int( d, 1 ) < 0 || - mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_cmp_int( d, 1 ) < 0 || + mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); else - return( 0 ); + return ( 0 ); } #endif /* ECP_SHORTWEIERSTRASS */ - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } /* * Generate a keypair with configurable base point */ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, - const mbedtls_ecp_point *G, - mbedtls_mpi *d, mbedtls_ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + const mbedtls_ecp_point *G, + mbedtls_mpi *d, mbedtls_ecp_point *Q, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; size_t n_size = ( grp->nbits + 7 ) / 8; #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - { + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) { /* [M225] page 5 */ size_t b; do { MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( d, n_size, f_rng, p_rng ) ); - } while( mbedtls_mpi_bitlen( d ) == 0); + } while ( mbedtls_mpi_bitlen( d ) == 0); /* Make sure the most significant bit is nbits */ b = mbedtls_mpi_bitlen( d ) - 1; /* mbedtls_mpi_bitlen is one-based */ - if( b > grp->nbits ) + if ( b > grp->nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( d, b - grp->nbits ) ); else MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, grp->nbits, 1 ) ); @@ -1842,53 +1915,48 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 0, 0 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 1, 0 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 2, 0 ) ); - } - else + } else #endif /* ECP_MONTGOMERY */ #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - { - /* SEC1 3.2.1: Generate d such that 1 <= n < N */ - int count = 0; - unsigned char rnd[MBEDTLS_ECP_MAX_BYTES]; - - /* - * Match the procedure given in RFC 6979 (deterministic ECDSA): - * - use the same byte ordering; - * - keep the leftmost nbits bits of the generated octet string; - * - try until result is in the desired range. - * This also avoids any biais, which is especially important for ECDSA. - */ - do - { - MBEDTLS_MPI_CHK( f_rng( p_rng, rnd, n_size ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( d, rnd, n_size ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( d, 8 * n_size - grp->nbits ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) { + /* SEC1 3.2.1: Generate d such that 1 <= n < N */ + int count = 0; + unsigned char rnd[MBEDTLS_ECP_MAX_BYTES]; /* - * Each try has at worst a probability 1/2 of failing (the msb has - * a probability 1/2 of being 0, and then the result will be < N), - * so after 30 tries failure probability is a most 2**(-30). - * - * For most curves, 1 try is enough with overwhelming probability, - * since N starts with a lot of 1s in binary, but some curves - * such as secp224k1 are actually very close to the worst case. + * Match the procedure given in RFC 6979 (deterministic ECDSA): + * - use the same byte ordering; + * - keep the leftmost nbits bits of the generated octet string; + * - try until result is in the desired range. + * This also avoids any biais, which is especially important for ECDSA. */ - if( ++count > 30 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( d, 1 ) < 0 || - mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ); - } - else + do { + MBEDTLS_MPI_CHK( f_rng( p_rng, rnd, n_size ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( d, rnd, n_size ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( d, 8 * n_size - grp->nbits ) ); + + /* + * Each try has at worst a probability 1/2 of failing (the msb has + * a probability 1/2 of being 0, and then the result will be < N), + * so after 30 tries failure probability is a most 2**(-30). + * + * For most curves, 1 try is enough with overwhelming probability, + * since N starts with a lot of 1s in binary, but some curves + * such as secp224k1 are actually very close to the worst case. + */ + if ( ++count > 30 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( d, 1 ) < 0 || + mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ); + } else #endif /* ECP_SHORTWEIERSTRASS */ - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); cleanup: - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); - return( mbedtls_ecp_mul( grp, Q, d, G, f_rng, p_rng ) ); + return ( mbedtls_ecp_mul( grp, Q, d, G, f_rng, p_rng ) ); } /* @@ -1899,21 +1967,21 @@ int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *grp, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - return( mbedtls_ecp_gen_keypair_base( grp, &grp->G, d, Q, f_rng, p_rng ) ); + return ( mbedtls_ecp_gen_keypair_base( grp, &grp->G, d, Q, f_rng, p_rng ) ); } /* * Generate a keypair, prettier wrapper */ int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; - if( ( ret = mbedtls_ecp_group_load( &key->grp, grp_id ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_group_load( &key->grp, grp_id ) ) != 0 ) + return ( ret ); - return( mbedtls_ecp_gen_keypair( &key->grp, &key->d, &key->Q, f_rng, p_rng ) ); + return ( mbedtls_ecp_gen_keypair( &key->grp, &key->d, &key->Q, f_rng, p_rng ) ); } /* @@ -1925,13 +1993,12 @@ int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ec mbedtls_ecp_point Q; mbedtls_ecp_group grp; - if( pub->grp.id == MBEDTLS_ECP_DP_NONE || - pub->grp.id != prv->grp.id || - mbedtls_mpi_cmp_mpi( &pub->Q.X, &prv->Q.X ) || - mbedtls_mpi_cmp_mpi( &pub->Q.Y, &prv->Q.Y ) || - mbedtls_mpi_cmp_mpi( &pub->Q.Z, &prv->Q.Z ) ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( pub->grp.id == MBEDTLS_ECP_DP_NONE || + pub->grp.id != prv->grp.id || + mbedtls_mpi_cmp_mpi( &pub->Q.X, &prv->Q.X ) || + mbedtls_mpi_cmp_mpi( &pub->Q.Y, &prv->Q.Y ) || + mbedtls_mpi_cmp_mpi( &pub->Q.Z, &prv->Q.Z ) ) { + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } mbedtls_ecp_point_init( &Q ); @@ -1943,10 +2010,9 @@ int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ec /* Also checks d is valid */ MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &Q, &prv->d, &prv->grp.G, NULL, NULL ) ); - if( mbedtls_mpi_cmp_mpi( &Q.X, &prv->Q.X ) || - mbedtls_mpi_cmp_mpi( &Q.Y, &prv->Q.Y ) || - mbedtls_mpi_cmp_mpi( &Q.Z, &prv->Q.Z ) ) - { + if ( mbedtls_mpi_cmp_mpi( &Q.X, &prv->Q.X ) || + mbedtls_mpi_cmp_mpi( &Q.Y, &prv->Q.Y ) || + mbedtls_mpi_cmp_mpi( &Q.Z, &prv->Q.Z ) ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -1955,7 +2021,7 @@ cleanup: mbedtls_ecp_point_free( &Q ); mbedtls_ecp_group_free( &grp ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SELF_TEST) @@ -1972,8 +2038,7 @@ int mbedtls_ecp_self_test( int verbose ) mbedtls_mpi m; unsigned long add_c_prev, dbl_c_prev, mul_c_prev; /* exponents especially adapted for secp192r1 */ - const char *exponents[] = - { + const char *exponents[] = { "000000000000000000000000000000000000000000000001", /* one */ "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830", /* N - 1 */ "5EA6F389A38B8BC81E767753B15AA5569E1782E30ABE7D25", /* random */ @@ -1994,7 +2059,7 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &grp, mbedtls_ecp_curve_list()->grp_id ) ); #endif - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECP test #1 (constant op_count, base point G): " ); /* Do a dummy multiplication first to trigger precomputation */ @@ -2007,8 +2072,7 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[0] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { + for ( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) { add_c_prev = add_count; dbl_c_prev = dbl_count; mul_c_prev = mul_count; @@ -2019,11 +2083,10 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[i] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) + if ( add_count != add_c_prev || + dbl_count != dbl_c_prev || + mul_count != mul_c_prev ) { + if ( verbose != 0 ) mbedtls_printf( "failed (%u)\n", (unsigned int) i ); ret = 1; @@ -2031,10 +2094,10 @@ int mbedtls_ecp_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECP test #2 (constant op_count, other point): " ); /* We computed P = 2G last time, use it */ @@ -2044,8 +2107,7 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[0] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { + for ( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) { add_c_prev = add_count; dbl_c_prev = dbl_count; mul_c_prev = mul_count; @@ -2056,11 +2118,10 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[i] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) + if ( add_count != add_c_prev || + dbl_count != dbl_c_prev || + mul_count != mul_c_prev ) { + if ( verbose != 0 ) mbedtls_printf( "failed (%u)\n", (unsigned int) i ); ret = 1; @@ -2068,12 +2129,12 @@ int mbedtls_ecp_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: - if( ret < 0 && verbose != 0 ) + if ( ret < 0 && verbose != 0 ) mbedtls_printf( "Unexpected error, return code = %08X\n", ret ); mbedtls_ecp_group_free( &grp ); @@ -2081,10 +2142,10 @@ cleanup: mbedtls_ecp_point_free( &P ); mbedtls_mpi_free( &m ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp_curves.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp_curves.c index 9a6e8eb1..d9e9412e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp_curves.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ecp_curves.c @@ -581,7 +581,7 @@ static int ecp_group_load( mbedtls_ecp_group *grp, const mbedtls_mpi_uint *n, size_t nlen) { ecp_mpi_load( &grp->P, p, plen ); - if( a != NULL ) + if ( a != NULL ) ecp_mpi_load( &grp->A, a, alen ); ecp_mpi_load( &grp->B, b, blen ); ecp_mpi_load( &grp->N, n, nlen ); @@ -595,7 +595,7 @@ static int ecp_group_load( mbedtls_ecp_group *grp, grp->h = 1; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_ECP_NIST_OPTIM) @@ -678,10 +678,10 @@ static int ecp_use_curve25519( mbedtls_ecp_group *grp ) grp->nbits = 254; cleanup: - if( ret != 0 ) + if ( ret != 0 ) mbedtls_ecp_group_free( grp ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ @@ -694,80 +694,79 @@ int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id id ) grp->id = id; - switch( id ) - { + switch ( id ) { #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) case MBEDTLS_ECP_DP_SECP192R1: NIST_MODP( p192 ); - return( LOAD_GROUP( secp192r1 ) ); + return ( LOAD_GROUP( secp192r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) case MBEDTLS_ECP_DP_SECP224R1: NIST_MODP( p224 ); - return( LOAD_GROUP( secp224r1 ) ); + return ( LOAD_GROUP( secp224r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) case MBEDTLS_ECP_DP_SECP256R1: NIST_MODP( p256 ); - return( LOAD_GROUP( secp256r1 ) ); + return ( LOAD_GROUP( secp256r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) case MBEDTLS_ECP_DP_SECP384R1: NIST_MODP( p384 ); - return( LOAD_GROUP( secp384r1 ) ); + return ( LOAD_GROUP( secp384r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) case MBEDTLS_ECP_DP_SECP521R1: NIST_MODP( p521 ); - return( LOAD_GROUP( secp521r1 ) ); + return ( LOAD_GROUP( secp521r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) case MBEDTLS_ECP_DP_SECP192K1: grp->modp = ecp_mod_p192k1; - return( LOAD_GROUP_A( secp192k1 ) ); + return ( LOAD_GROUP_A( secp192k1 ) ); #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) case MBEDTLS_ECP_DP_SECP224K1: grp->modp = ecp_mod_p224k1; - return( LOAD_GROUP_A( secp224k1 ) ); + return ( LOAD_GROUP_A( secp224k1 ) ); #endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) case MBEDTLS_ECP_DP_SECP256K1: grp->modp = ecp_mod_p256k1; - return( LOAD_GROUP_A( secp256k1 ) ); + return ( LOAD_GROUP_A( secp256k1 ) ); #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) case MBEDTLS_ECP_DP_BP256R1: - return( LOAD_GROUP_A( brainpoolP256r1 ) ); + return ( LOAD_GROUP_A( brainpoolP256r1 ) ); #endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) case MBEDTLS_ECP_DP_BP384R1: - return( LOAD_GROUP_A( brainpoolP384r1 ) ); + return ( LOAD_GROUP_A( brainpoolP384r1 ) ); #endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) case MBEDTLS_ECP_DP_BP512R1: - return( LOAD_GROUP_A( brainpoolP512r1 ) ); + return ( LOAD_GROUP_A( brainpoolP512r1 ) ); #endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) case MBEDTLS_ECP_DP_CURVE25519: grp->modp = ecp_mod_p255; - return( ecp_use_curve25519( grp ) ); + return ( ecp_use_curve25519( grp ) ); #endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ default: mbedtls_ecp_group_free( grp ); - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); } } @@ -800,10 +799,11 @@ static inline void add64( mbedtls_mpi_uint *dst, mbedtls_mpi_uint *src, mbedtls_ { unsigned char i; mbedtls_mpi_uint c = 0; - for( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++, src++ ) - { - *dst += c; c = ( *dst < c ); - *dst += *src; c += ( *dst < *src ); + for ( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++, src++ ) { + *dst += c; + c = ( *dst < c ); + *dst += *src; + c += ( *dst < *src ); } *carry += c; } @@ -812,8 +812,7 @@ static inline void add64( mbedtls_mpi_uint *dst, mbedtls_mpi_uint *src, mbedtls_ static inline void carry64( mbedtls_mpi_uint *dst, mbedtls_mpi_uint *carry ) { unsigned char i; - for( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++ ) - { + for ( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++ ) { *dst += *carry; *carry = ( *dst < *carry ); } @@ -840,12 +839,19 @@ static int ecp_mod_p192( mbedtls_mpi *N ) p = N->p; end = p + N->n; - ADD( 3 ); ADD( 5 ); NEXT; // A0 += A3 + A5 - ADD( 3 ); ADD( 4 ); ADD( 5 ); NEXT; // A1 += A3 + A4 + A5 - ADD( 4 ); ADD( 5 ); LAST; // A2 += A4 + A5 + ADD( 3 ); + ADD( 5 ); + NEXT; // A0 += A3 + A5 + ADD( 3 ); + ADD( 4 ); + ADD( 5 ); + NEXT; // A1 += A3 + A4 + A5 + ADD( 4 ); + ADD( 5 ); + LAST; // A2 += A4 + A5 cleanup: - return( ret ); + return ( ret ); } #undef WIDTH @@ -961,11 +967,11 @@ static inline int fix_negative( mbedtls_mpi *N, signed char c, mbedtls_mpi *C, s #if !defined(MBEDTLS_HAVE_INT64) ((void) bits); #else - if( bits == 224 ) - C->p[ C->n - 1 ] = ((mbedtls_mpi_uint) -c) << 32; + if ( bits == 224 ) + C->p[ C->n - 1 ] = ((mbedtls_mpi_uint) - c) << 32; else #endif - C->p[ C->n - 1 ] = (mbedtls_mpi_uint) -c; + C->p[ C->n - 1 ] = (mbedtls_mpi_uint) - c; /* N = - ( C - N ) */ MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( N, C, N ) ); @@ -973,7 +979,7 @@ static inline int fix_negative( mbedtls_mpi *N, signed char c, mbedtls_mpi *C, s cleanup: - return( ret ); + return ( ret ); } #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) @@ -984,16 +990,33 @@ static int ecp_mod_p224( mbedtls_mpi *N ) { INIT( 224 ); - SUB( 7 ); SUB( 11 ); NEXT; // A0 += -A7 - A11 - SUB( 8 ); SUB( 12 ); NEXT; // A1 += -A8 - A12 - SUB( 9 ); SUB( 13 ); NEXT; // A2 += -A9 - A13 - SUB( 10 ); ADD( 7 ); ADD( 11 ); NEXT; // A3 += -A10 + A7 + A11 - SUB( 11 ); ADD( 8 ); ADD( 12 ); NEXT; // A4 += -A11 + A8 + A12 - SUB( 12 ); ADD( 9 ); ADD( 13 ); NEXT; // A5 += -A12 + A9 + A13 - SUB( 13 ); ADD( 10 ); LAST; // A6 += -A13 + A10 + SUB( 7 ); + SUB( 11 ); + NEXT; // A0 += -A7 - A11 + SUB( 8 ); + SUB( 12 ); + NEXT; // A1 += -A8 - A12 + SUB( 9 ); + SUB( 13 ); + NEXT; // A2 += -A9 - A13 + SUB( 10 ); + ADD( 7 ); + ADD( 11 ); + NEXT; // A3 += -A10 + A7 + A11 + SUB( 11 ); + ADD( 8 ); + ADD( 12 ); + NEXT; // A4 += -A11 + A8 + A12 + SUB( 12 ); + ADD( 9 ); + ADD( 13 ); + NEXT; // A5 += -A12 + A9 + A13 + SUB( 13 ); + ADD( 10 ); + LAST; // A6 += -A13 + A10 cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ @@ -1005,32 +1028,79 @@ static int ecp_mod_p256( mbedtls_mpi *N ) { INIT( 256 ); - ADD( 8 ); ADD( 9 ); - SUB( 11 ); SUB( 12 ); SUB( 13 ); SUB( 14 ); NEXT; // A0 + ADD( 8 ); + ADD( 9 ); + SUB( 11 ); + SUB( 12 ); + SUB( 13 ); + SUB( 14 ); + NEXT; // A0 - ADD( 9 ); ADD( 10 ); - SUB( 12 ); SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A1 + ADD( 9 ); + ADD( 10 ); + SUB( 12 ); + SUB( 13 ); + SUB( 14 ); + SUB( 15 ); + NEXT; // A1 - ADD( 10 ); ADD( 11 ); - SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A2 + ADD( 10 ); + ADD( 11 ); + SUB( 13 ); + SUB( 14 ); + SUB( 15 ); + NEXT; // A2 - ADD( 11 ); ADD( 11 ); ADD( 12 ); ADD( 12 ); ADD( 13 ); - SUB( 15 ); SUB( 8 ); SUB( 9 ); NEXT; // A3 + ADD( 11 ); + ADD( 11 ); + ADD( 12 ); + ADD( 12 ); + ADD( 13 ); + SUB( 15 ); + SUB( 8 ); + SUB( 9 ); + NEXT; // A3 - ADD( 12 ); ADD( 12 ); ADD( 13 ); ADD( 13 ); ADD( 14 ); - SUB( 9 ); SUB( 10 ); NEXT; // A4 + ADD( 12 ); + ADD( 12 ); + ADD( 13 ); + ADD( 13 ); + ADD( 14 ); + SUB( 9 ); + SUB( 10 ); + NEXT; // A4 - ADD( 13 ); ADD( 13 ); ADD( 14 ); ADD( 14 ); ADD( 15 ); - SUB( 10 ); SUB( 11 ); NEXT; // A5 + ADD( 13 ); + ADD( 13 ); + ADD( 14 ); + ADD( 14 ); + ADD( 15 ); + SUB( 10 ); + SUB( 11 ); + NEXT; // A5 - ADD( 14 ); ADD( 14 ); ADD( 15 ); ADD( 15 ); ADD( 14 ); ADD( 13 ); - SUB( 8 ); SUB( 9 ); NEXT; // A6 + ADD( 14 ); + ADD( 14 ); + ADD( 15 ); + ADD( 15 ); + ADD( 14 ); + ADD( 13 ); + SUB( 8 ); + SUB( 9 ); + NEXT; // A6 - ADD( 15 ); ADD( 15 ); ADD( 15 ); ADD( 8 ); - SUB( 10 ); SUB( 11 ); SUB( 12 ); SUB( 13 ); LAST; // A7 + ADD( 15 ); + ADD( 15 ); + ADD( 15 ); + ADD( 8 ); + SUB( 10 ); + SUB( 11 ); + SUB( 12 ); + SUB( 13 ); + LAST; // A7 cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ @@ -1042,44 +1112,98 @@ static int ecp_mod_p384( mbedtls_mpi *N ) { INIT( 384 ); - ADD( 12 ); ADD( 21 ); ADD( 20 ); - SUB( 23 ); NEXT; // A0 + ADD( 12 ); + ADD( 21 ); + ADD( 20 ); + SUB( 23 ); + NEXT; // A0 - ADD( 13 ); ADD( 22 ); ADD( 23 ); - SUB( 12 ); SUB( 20 ); NEXT; // A2 + ADD( 13 ); + ADD( 22 ); + ADD( 23 ); + SUB( 12 ); + SUB( 20 ); + NEXT; // A2 - ADD( 14 ); ADD( 23 ); - SUB( 13 ); SUB( 21 ); NEXT; // A2 + ADD( 14 ); + ADD( 23 ); + SUB( 13 ); + SUB( 21 ); + NEXT; // A2 - ADD( 15 ); ADD( 12 ); ADD( 20 ); ADD( 21 ); - SUB( 14 ); SUB( 22 ); SUB( 23 ); NEXT; // A3 + ADD( 15 ); + ADD( 12 ); + ADD( 20 ); + ADD( 21 ); + SUB( 14 ); + SUB( 22 ); + SUB( 23 ); + NEXT; // A3 - ADD( 21 ); ADD( 21 ); ADD( 16 ); ADD( 13 ); ADD( 12 ); ADD( 20 ); ADD( 22 ); - SUB( 15 ); SUB( 23 ); SUB( 23 ); NEXT; // A4 + ADD( 21 ); + ADD( 21 ); + ADD( 16 ); + ADD( 13 ); + ADD( 12 ); + ADD( 20 ); + ADD( 22 ); + SUB( 15 ); + SUB( 23 ); + SUB( 23 ); + NEXT; // A4 - ADD( 22 ); ADD( 22 ); ADD( 17 ); ADD( 14 ); ADD( 13 ); ADD( 21 ); ADD( 23 ); - SUB( 16 ); NEXT; // A5 + ADD( 22 ); + ADD( 22 ); + ADD( 17 ); + ADD( 14 ); + ADD( 13 ); + ADD( 21 ); + ADD( 23 ); + SUB( 16 ); + NEXT; // A5 - ADD( 23 ); ADD( 23 ); ADD( 18 ); ADD( 15 ); ADD( 14 ); ADD( 22 ); - SUB( 17 ); NEXT; // A6 + ADD( 23 ); + ADD( 23 ); + ADD( 18 ); + ADD( 15 ); + ADD( 14 ); + ADD( 22 ); + SUB( 17 ); + NEXT; // A6 - ADD( 19 ); ADD( 16 ); ADD( 15 ); ADD( 23 ); - SUB( 18 ); NEXT; // A7 + ADD( 19 ); + ADD( 16 ); + ADD( 15 ); + ADD( 23 ); + SUB( 18 ); + NEXT; // A7 - ADD( 20 ); ADD( 17 ); ADD( 16 ); - SUB( 19 ); NEXT; // A8 + ADD( 20 ); + ADD( 17 ); + ADD( 16 ); + SUB( 19 ); + NEXT; // A8 - ADD( 21 ); ADD( 18 ); ADD( 17 ); - SUB( 20 ); NEXT; // A9 + ADD( 21 ); + ADD( 18 ); + ADD( 17 ); + SUB( 20 ); + NEXT; // A9 - ADD( 22 ); ADD( 19 ); ADD( 18 ); - SUB( 21 ); NEXT; // A10 + ADD( 22 ); + ADD( 19 ); + ADD( 18 ); + SUB( 21 ); + NEXT; // A10 - ADD( 23 ); ADD( 20 ); ADD( 19 ); - SUB( 22 ); LAST; // A11 + ADD( 23 ); + ADD( 20 ); + ADD( 19 ); + SUB( 22 ); + LAST; // A11 cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ @@ -1121,13 +1245,13 @@ static int ecp_mod_p521( mbedtls_mpi *N ) * we need to hold bits 513 to 1056, which is 34 limbs, that is * P521_WIDTH + 1. Otherwise P521_WIDTH is enough. */ - if( N->n < P521_WIDTH ) - return( 0 ); + if ( N->n < P521_WIDTH ) + return ( 0 ); /* M = A1 */ M.s = 1; M.n = N->n - ( P521_WIDTH - 1 ); - if( M.n > P521_WIDTH + 1 ) + if ( M.n > P521_WIDTH + 1 ) M.n = P521_WIDTH + 1; M.p = Mp; memcpy( Mp, N->p + P521_WIDTH - 1, M.n * sizeof( mbedtls_mpi_uint ) ); @@ -1135,14 +1259,14 @@ static int ecp_mod_p521( mbedtls_mpi *N ) /* N = A0 */ N->p[P521_WIDTH - 1] &= P521_MASK; - for( i = P521_WIDTH; i < N->n; i++ ) + for ( i = P521_WIDTH; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + A1 */ MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( N, N, &M ) ); cleanup: - return( ret ); + return ( ret ); } #undef P521_WIDTH @@ -1167,13 +1291,13 @@ static int ecp_mod_p255( mbedtls_mpi *N ) mbedtls_mpi M; mbedtls_mpi_uint Mp[P255_WIDTH + 2]; - if( N->n < P255_WIDTH ) - return( 0 ); + if ( N->n < P255_WIDTH ) + return ( 0 ); /* M = A1 */ M.s = 1; M.n = N->n - ( P255_WIDTH - 1 ); - if( M.n > P255_WIDTH + 1 ) + if ( M.n > P255_WIDTH + 1 ) M.n = P255_WIDTH + 1; M.p = Mp; memset( Mp, 0, sizeof Mp ); @@ -1183,7 +1307,7 @@ static int ecp_mod_p255( mbedtls_mpi *N ) /* N = A0 */ MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( N, 255, 0 ) ); - for( i = P255_WIDTH; i < N->n; i++ ) + for ( i = P255_WIDTH; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + 19 * A1 */ @@ -1191,7 +1315,7 @@ static int ecp_mod_p255( mbedtls_mpi *N ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( N, N, &M ) ); cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ @@ -1215,8 +1339,8 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t mbedtls_mpi M, R; mbedtls_mpi_uint Mp[P_KOBLITZ_MAX + P_KOBLITZ_R]; - if( N->n < p_limbs ) - return( 0 ); + if ( N->n < p_limbs ) + return ( 0 ); /* Init R */ R.s = 1; @@ -1229,18 +1353,18 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t /* M = A1 */ M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) + if ( M.n > p_limbs + adjust ) M.n = p_limbs + adjust; memset( Mp, 0, sizeof Mp ); memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( mbedtls_mpi_uint ) ); - if( shift != 0 ) + if ( shift != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &M, shift ) ); M.n += R.n - adjust; /* Make room for multiplication by R */ /* N = A0 */ - if( mask != 0 ) + if ( mask != 0 ) N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) + for ( i = p_limbs; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + R * A1 */ @@ -1251,18 +1375,18 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t /* M = A1 */ M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) + if ( M.n > p_limbs + adjust ) M.n = p_limbs + adjust; memset( Mp, 0, sizeof Mp ); memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( mbedtls_mpi_uint ) ); - if( shift != 0 ) + if ( shift != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &M, shift ) ); M.n += R.n - adjust; /* Make room for multiplication by R */ /* N = A0 */ - if( mask != 0 ) + if ( mask != 0 ) N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) + for ( i = p_limbs; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + R * A1 */ @@ -1270,7 +1394,7 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( N, N, &M ) ); cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED) || MBEDTLS_ECP_DP_SECP224K1_ENABLED) || @@ -1284,9 +1408,10 @@ cleanup: static int ecp_mod_p192k1( mbedtls_mpi *N ) { static mbedtls_mpi_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xC9, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; + BYTES_TO_T_UINT_8( 0xC9, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) + }; - return( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); + return ( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); } #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ @@ -1298,12 +1423,13 @@ static int ecp_mod_p192k1( mbedtls_mpi *N ) static int ecp_mod_p224k1( mbedtls_mpi *N ) { static mbedtls_mpi_uint Rp[] = { - BYTES_TO_T_UINT_8( 0x93, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; + BYTES_TO_T_UINT_8( 0x93, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) + }; #if defined(MBEDTLS_HAVE_INT64) - return( ecp_mod_koblitz( N, Rp, 4, 1, 32, 0xFFFFFFFF ) ); + return ( ecp_mod_koblitz( N, Rp, 4, 1, 32, 0xFFFFFFFF ) ); #else - return( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); + return ( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); #endif } @@ -1317,8 +1443,9 @@ static int ecp_mod_p224k1( mbedtls_mpi *N ) static int ecp_mod_p256k1( mbedtls_mpi *N ) { static mbedtls_mpi_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xD1, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - return( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); + BYTES_TO_T_UINT_8( 0xD1, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) + }; + return ( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); } #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy.c index d4d1b27b..79d3b938 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy.c @@ -60,8 +60,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #define ENTROPY_MAX_LOOP 256 /**< Maximum amount to loop before error */ @@ -129,19 +131,18 @@ void mbedtls_entropy_free( mbedtls_entropy_context *ctx ) } int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, - mbedtls_entropy_f_source_ptr f_source, void *p_source, - size_t threshold, int strong ) + mbedtls_entropy_f_source_ptr f_source, void *p_source, + size_t threshold, int strong ) { int index, ret = 0; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif index = ctx->source_count; - if( index >= MBEDTLS_ENTROPY_MAX_SOURCES ) - { + if ( index >= MBEDTLS_ENTROPY_MAX_SOURCES ) { ret = MBEDTLS_ERR_ENTROPY_MAX_SOURCES; goto exit; } @@ -155,11 +156,11 @@ int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* @@ -173,8 +174,7 @@ static int entropy_update( mbedtls_entropy_context *ctx, unsigned char source_id size_t use_len = len; const unsigned char *p = data; - if( use_len > MBEDTLS_ENTROPY_BLOCK_SIZE ) - { + if ( use_len > MBEDTLS_ENTROPY_BLOCK_SIZE ) { #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) mbedtls_sha512( data, len, tmp, 0 ); #else @@ -195,27 +195,27 @@ static int entropy_update( mbedtls_entropy_context *ctx, unsigned char source_id mbedtls_sha256_update( &ctx->accumulator, p, use_len ); #endif - return( 0 ); + return ( 0 ); } int mbedtls_entropy_update_manual( mbedtls_entropy_context *ctx, - const unsigned char *data, size_t len ) + const unsigned char *data, size_t len ) { int ret; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = entropy_update( ctx, MBEDTLS_ENTROPY_SOURCE_MANUAL, data, len ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* @@ -227,38 +227,35 @@ static int entropy_gather_internal( mbedtls_entropy_context *ctx ) unsigned char buf[MBEDTLS_ENTROPY_MAX_GATHER]; size_t olen; - if( ctx->source_count == 0 ) - return( MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED ); + if ( ctx->source_count == 0 ) + return ( MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED ); /* * Run through our entropy sources */ - for( i = 0; i < ctx->source_count; i++ ) - { - if( ctx->source[i].strong == MBEDTLS_ENTROPY_SOURCE_STRONG ) + for ( i = 0; i < ctx->source_count; i++ ) { + if ( ctx->source[i].strong == MBEDTLS_ENTROPY_SOURCE_STRONG ) have_one_strong = 1; olen = 0; - if( ( ret = ctx->source[i].f_source( ctx->source[i].p_source, - buf, MBEDTLS_ENTROPY_MAX_GATHER, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = ctx->source[i].f_source( ctx->source[i].p_source, + buf, MBEDTLS_ENTROPY_MAX_GATHER, &olen ) ) != 0 ) { + return ( ret ); } /* * Add if we actually gathered something */ - if( olen > 0 ) - { + if ( olen > 0 ) { entropy_update( ctx, (unsigned char) i, buf, olen ); ctx->source[i].size += olen; } } - if( have_one_strong == 0 ) - return( MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE ); + if ( have_one_strong == 0 ) + return ( MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE ); - return( 0 ); + return ( 0 ); } /* @@ -269,18 +266,18 @@ int mbedtls_entropy_gather( mbedtls_entropy_context *ctx ) int ret; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = entropy_gather_internal( ctx ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) @@ -289,46 +286,42 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) mbedtls_entropy_context *ctx = (mbedtls_entropy_context *) data; unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; - if( len > MBEDTLS_ENTROPY_BLOCK_SIZE ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( len > MBEDTLS_ENTROPY_BLOCK_SIZE ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); #if defined(MBEDTLS_ENTROPY_NV_SEED) /* Update the NV entropy seed before generating any entropy for outside * use. */ - if( ctx->initial_entropy_run == 0 ) - { + if ( ctx->initial_entropy_run == 0 ) { ctx->initial_entropy_run = 1; - if( ( ret = mbedtls_entropy_update_nv_seed( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_entropy_update_nv_seed( ctx ) ) != 0 ) + return ( ret ); } #endif #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif /* * Always gather extra entropy before a call */ - do - { - if( count++ > ENTROPY_MAX_LOOP ) - { + do { + if ( count++ > ENTROPY_MAX_LOOP ) { ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; goto exit; } - if( ( ret = entropy_gather_internal( ctx ) ) != 0 ) + if ( ( ret = entropy_gather_internal( ctx ) ) != 0 ) goto exit; done = 1; - for( i = 0; i < ctx->source_count; i++ ) - if( ctx->source[i].size < ctx->source[i].threshold ) + for ( i = 0; i < ctx->source_count; i++ ) + if ( ctx->source[i].size < ctx->source[i].threshold ) done = 0; - } - while( ! done ); + } while ( ! done ); memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); @@ -362,7 +355,7 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) mbedtls_sha256( buf, MBEDTLS_ENTROPY_BLOCK_SIZE, buf, 0 ); #endif /* MBEDTLS_ENTROPY_SHA512_ACCUMULATOR */ - for( i = 0; i < ctx->source_count; i++ ) + for ( i = 0; i < ctx->source_count; i++ ) ctx->source[i].size = 0; memcpy( output, buf, len ); @@ -371,11 +364,11 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_ENTROPY_NV_SEED) @@ -385,17 +378,17 @@ int mbedtls_entropy_update_nv_seed( mbedtls_entropy_context *ctx ) unsigned char buf[ MBEDTLS_ENTROPY_MAX_SEED_SIZE ]; /* Read new seed and write it to NV */ - if( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) + return ( ret ); - if( mbedtls_nv_seed_write( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + if ( mbedtls_nv_seed_write( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); /* Manually update the remaining stream with a separator value to diverge */ memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); mbedtls_entropy_update_manual( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ENTROPY_NV_SEED */ @@ -406,14 +399,13 @@ int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *p FILE *f; unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + if ( ( f = fopen( path, "wb" ) ) == NULL ) + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); - if( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) + if ( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) goto exit; - if( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != MBEDTLS_ENTROPY_BLOCK_SIZE ) - { + if ( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != MBEDTLS_ENTROPY_BLOCK_SIZE ) { ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR; goto exit; } @@ -422,7 +414,7 @@ int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *p exit: fclose( f ); - return( ret ); + return ( ret ); } int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *path ) @@ -431,27 +423,26 @@ int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char * size_t n; unsigned char buf[ MBEDTLS_ENTROPY_MAX_SEED_SIZE ]; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); n = (size_t) ftell( f ); fseek( f, 0, SEEK_SET ); - if( n > MBEDTLS_ENTROPY_MAX_SEED_SIZE ) + if ( n > MBEDTLS_ENTROPY_MAX_SEED_SIZE ) n = MBEDTLS_ENTROPY_MAX_SEED_SIZE; - if( fread( buf, 1, n, f ) != n ) - { + if ( fread( buf, 1, n, f ) != n ) { fclose( f ); - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); } fclose( f ); mbedtls_entropy_update_manual( ctx, buf, n ); - return( mbedtls_entropy_write_seed_file( ctx, path ) ); + return ( mbedtls_entropy_write_seed_file( ctx, path ) ); } #endif /* MBEDTLS_FS_IO */ @@ -468,7 +459,7 @@ static int entropy_dummy_source( void *data, unsigned char *output, memset( output, 0x2a, len ); *olen = len; - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_TEST_NULL_ENTROPY */ @@ -481,39 +472,36 @@ static int mbedtls_entropy_source_self_test_gather( unsigned char *buf, size_t b size_t olen = 0; size_t attempts = buf_len; - while( attempts > 0 && entropy_len < buf_len ) - { - if( ( ret = mbedtls_hardware_poll( NULL, buf + entropy_len, - buf_len - entropy_len, &olen ) ) != 0 ) - return( ret ); + while ( attempts > 0 && entropy_len < buf_len ) { + if ( ( ret = mbedtls_hardware_poll( NULL, buf + entropy_len, + buf_len - entropy_len, &olen ) ) != 0 ) + return ( ret ); entropy_len += olen; attempts--; } - if( entropy_len < buf_len ) - { + if ( entropy_len < buf_len ) { ret = 1; } - return( ret ); + return ( ret ); } static int mbedtls_entropy_source_self_test_check_bits( const unsigned char *buf, - size_t buf_len ) + size_t buf_len ) { - unsigned char set= 0xFF; + unsigned char set = 0xFF; unsigned char unset = 0x00; size_t i; - for( i = 0; i < buf_len; i++ ) - { + for ( i = 0; i < buf_len; i++ ) { set &= buf[i]; unset |= buf[i]; } - return( set == 0xFF || unset == 0x00 ); + return ( set == 0xFF || unset == 0x00 ); } /* @@ -533,21 +521,21 @@ int mbedtls_entropy_source_self_test( int verbose ) unsigned char buf0[2 * sizeof( unsigned long long int )]; unsigned char buf1[2 * sizeof( unsigned long long int )]; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ENTROPY_BIAS test: " ); memset( buf0, 0x00, sizeof( buf0 ) ); memset( buf1, 0x00, sizeof( buf1 ) ); - if( ( ret = mbedtls_entropy_source_self_test_gather( buf0, sizeof( buf0 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_gather( buf0, sizeof( buf0 ) ) ) != 0 ) goto cleanup; - if( ( ret = mbedtls_entropy_source_self_test_gather( buf1, sizeof( buf1 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_gather( buf1, sizeof( buf1 ) ) ) != 0 ) goto cleanup; /* Make sure that the returned values are not all 0 or 1 */ - if( ( ret = mbedtls_entropy_source_self_test_check_bits( buf0, sizeof( buf0 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_check_bits( buf0, sizeof( buf0 ) ) ) != 0 ) goto cleanup; - if( ( ret = mbedtls_entropy_source_self_test_check_bits( buf1, sizeof( buf1 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_check_bits( buf1, sizeof( buf1 ) ) ) != 0 ) goto cleanup; /* Make sure that the entropy source is not returning values in a @@ -555,9 +543,8 @@ int mbedtls_entropy_source_self_test( int verbose ) ret = memcmp( buf0, buf1, sizeof( buf0 ) ) == 0; cleanup: - if( verbose != 0 ) - { - if( ret != 0 ) + if ( verbose != 0 ) { + if ( ret != 0 ) mbedtls_printf( "failed\n" ); else mbedtls_printf( "passed\n" ); @@ -565,7 +552,7 @@ cleanup: mbedtls_printf( "\n" ); } - return( ret != 0 ); + return ( ret != 0 ); } #endif /* MBEDTLS_ENTROPY_HARDWARE_ALT */ @@ -585,22 +572,22 @@ int mbedtls_entropy_self_test( int verbose ) size_t i, j; #endif /* !MBEDTLS_TEST_NULL_ENTROPY */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ENTROPY test: " ); #if !defined(MBEDTLS_TEST_NULL_ENTROPY) mbedtls_entropy_init( &ctx ); /* First do a gather to make sure we have default sources */ - if( ( ret = mbedtls_entropy_gather( &ctx ) ) != 0 ) + if ( ( ret = mbedtls_entropy_gather( &ctx ) ) != 0 ) goto cleanup; ret = mbedtls_entropy_add_source( &ctx, entropy_dummy_source, NULL, 16, MBEDTLS_ENTROPY_SOURCE_WEAK ); - if( ret != 0 ) + if ( ret != 0 ) goto cleanup; - if( ( ret = mbedtls_entropy_update_manual( &ctx, buf, sizeof buf ) ) != 0 ) + if ( ( ret = mbedtls_entropy_update_manual( &ctx, buf, sizeof buf ) ) != 0 ) goto cleanup; /* @@ -611,26 +598,23 @@ int mbedtls_entropy_self_test( int verbose ) * each of the 32 or 64 bytes to be non-zero has a false failure rate * of at most 2^(-58) which is acceptable. */ - for( i = 0; i < 8; i++ ) - { - if( ( ret = mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ) ) != 0 ) + for ( i = 0; i < 8; i++ ) { + if ( ( ret = mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ) ) != 0 ) goto cleanup; - for( j = 0; j < sizeof( buf ); j++ ) + for ( j = 0; j < sizeof( buf ); j++ ) acc[j] |= buf[j]; } - for( j = 0; j < sizeof( buf ); j++ ) - { - if( acc[j] == 0 ) - { + for ( j = 0; j < sizeof( buf ); j++ ) { + if ( acc[j] == 0 ) { ret = 1; goto cleanup; } } #if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) - if( ( ret = mbedtls_entropy_source_self_test( 0 ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test( 0 ) ) != 0 ) goto cleanup; #endif @@ -638,9 +622,8 @@ cleanup: mbedtls_entropy_free( &ctx ); #endif /* !MBEDTLS_TEST_NULL_ENTROPY */ - if( verbose != 0 ) - { - if( ret != 0 ) + if ( verbose != 0 ) { + if ( ret != 0 ) mbedtls_printf( "failed\n" ); else mbedtls_printf( "passed\n" ); @@ -648,7 +631,7 @@ cleanup: mbedtls_printf( "\n" ); } - return( ret != 0 ); + return ( ret != 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy_poll.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy_poll.c index a116e605..f1f207ef 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy_poll.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/entropy_poll.c @@ -57,28 +57,26 @@ #include int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len, - size_t *olen ) + size_t *olen ) { HCRYPTPROV provider; ((void) data); *olen = 0; - if( CryptAcquireContext( &provider, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) - { - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( CryptAcquireContext( &provider, NULL, NULL, + PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) { + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } - if( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) - { + if ( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) { CryptReleaseContext( provider, 0 ); - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } CryptReleaseContext( provider, 0 ); *olen = len; - return( 0 ); + return ( 0 ); } #else /* _WIN32 && !EFIX64 && !EFI32 */ @@ -102,7 +100,7 @@ static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags ) #endif #endif - return( syscall( SYS_getrandom, buf, buflen, flags ) ); + return ( syscall( SYS_getrandom, buf, buflen, flags ) ); } #include @@ -118,28 +116,28 @@ static int check_version_3_17_plus( void ) ver = un.release; /* Check major version; assume a single digit */ - if( ver[0] < '3' || ver[0] > '9' || ver [1] != '.' ) - return( -1 ); + if ( ver[0] < '3' || ver[0] > '9' || ver [1] != '.' ) + return ( -1 ); - if( ver[0] - '0' > 3 ) - return( 0 ); + if ( ver[0] - '0' > 3 ) + return ( 0 ); /* Ok, so now we know major == 3, check minor. * Assume 1 or 2 digits. */ - if( ver[2] < '0' || ver[2] > '9' ) - return( -1 ); + if ( ver[2] < '0' || ver[2] > '9' ) + return ( -1 ); minor = ver[2] - '0'; - if( ver[3] >= '0' && ver[3] <= '9' ) + if ( ver[3] >= '0' && ver[3] <= '9' ) minor = 10 * minor + ver[3] - '0'; - else if( ver [3] != '.' ) - return( -1 ); + else if ( ver [3] != '.' ) + return ( -1 ); - if( minor < 17 ) - return( -1 ); + if ( minor < 17 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } static int has_getrandom = -1; #endif /* SYS_getrandom */ @@ -148,97 +146,95 @@ static int has_getrandom = -1; #include int mbedtls_platform_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { FILE *file; size_t read_len; ((void) data); #if defined(HAVE_GETRANDOM) - if( has_getrandom == -1 ) + if ( has_getrandom == -1 ) has_getrandom = ( check_version_3_17_plus() == 0 ); - if( has_getrandom ) - { + if ( has_getrandom ) { int ret; - if( ( ret = getrandom_wrapper( output, len, 0 ) ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( ( ret = getrandom_wrapper( output, len, 0 ) ) < 0 ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); *olen = ret; - return( 0 ); + return ( 0 ); } #endif /* HAVE_GETRANDOM */ *olen = 0; file = fopen( "/dev/urandom", "rb" ); - if( file == NULL ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( file == NULL ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); read_len = fread( output, 1, len, file ); - if( read_len != len ) - { + if ( read_len != len ) { fclose( file ); - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } fclose( file ); *olen = len; - return( 0 ); + return ( 0 ); } #endif /* _WIN32 && !EFIX64 && !EFI32 */ #endif /* !MBEDTLS_NO_PLATFORM_ENTROPY */ #if defined(MBEDTLS_TEST_NULL_ENTROPY) int mbedtls_null_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { ((void) data); ((void) output); *olen = 0; - if( len < sizeof(unsigned char) ) - return( 0 ); + if ( len < sizeof(unsigned char) ) + return ( 0 ); *olen = sizeof(unsigned char); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_TIMING_C) int mbedtls_hardclock_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { unsigned long timer = mbedtls_timing_hardclock(); ((void) data); *olen = 0; - if( len < sizeof(unsigned long) ) - return( 0 ); + if ( len < sizeof(unsigned long) ) + return ( 0 ); memcpy( output, &timer, sizeof(unsigned long) ); *olen = sizeof(unsigned long); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_TIMING_C */ #if defined(MBEDTLS_HAVEGE_C) int mbedtls_havege_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { mbedtls_havege_state *hs = (mbedtls_havege_state *) data; *olen = 0; - if( mbedtls_havege_random( hs, output, len ) != 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( mbedtls_havege_random( hs, output, len ) != 0 ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); *olen = len; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVEGE_C */ @@ -252,16 +248,16 @@ int mbedtls_nv_seed_poll( void *data, memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); - if( mbedtls_nv_seed_read( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( mbedtls_nv_seed_read( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - if( len < use_len ) - use_len = len; + if ( len < use_len ) + use_len = len; memcpy( output, buf, use_len ); *olen = use_len; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ENTROPY_NV_SEED */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/error.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/error.c index dd2db0c4..93596414 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/error.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/error.c @@ -155,341 +155,339 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) size_t len; int use_ret; - if( buflen == 0 ) + if ( buflen == 0 ) return; memset( buf, 0x00, buflen ); - if( ret < 0 ) + if ( ret < 0 ) ret = -ret; - if( ret & 0xFF80 ) - { + if ( ret & 0xFF80 ) { use_ret = ret & 0xFF80; // High level error codes // // BEGIN generated code #if defined(MBEDTLS_CIPHER_C) - if( use_ret == -(MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "CIPHER - The selected feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "CIPHER - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "CIPHER - Failed to allocate memory" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_PADDING) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_PADDING) ) mbedtls_snprintf( buf, buflen, "CIPHER - Input data contains invalid padding and is rejected" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED) ) mbedtls_snprintf( buf, buflen, "CIPHER - Decryption of block requires a full block" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_AUTH_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_AUTH_FAILED) ) mbedtls_snprintf( buf, buflen, "CIPHER - Authentication failed (for AEAD modes)" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_CONTEXT) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_CONTEXT) ) mbedtls_snprintf( buf, buflen, "CIPHER - The context is invalid, eg because it was free()ed" ); #endif /* MBEDTLS_CIPHER_C */ #if defined(MBEDTLS_DHM_C) - if( use_ret == -(MBEDTLS_ERR_DHM_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "DHM - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_DHM_READ_PARAMS_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_READ_PARAMS_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Reading of the DHM parameters failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Making of the DHM parameters failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Reading of the public values failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Making of the public value failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_CALC_SECRET_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_CALC_SECRET_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Calculation of the DHM secret failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "DHM - The ASN.1 data is not formatted correctly" ); - if( use_ret == -(MBEDTLS_ERR_DHM_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Allocation of memory failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "DHM - Read/write of file failed" ); #endif /* MBEDTLS_DHM_C */ #if defined(MBEDTLS_ECP_C) - if( use_ret == -(MBEDTLS_ERR_ECP_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "ECP - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "ECP - The buffer is too small to write to" ); - if( use_ret == -(MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "ECP - Requested curve not available" ); - if( use_ret == -(MBEDTLS_ERR_ECP_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "ECP - The signature is not valid" ); - if( use_ret == -(MBEDTLS_ERR_ECP_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "ECP - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_ECP_RANDOM_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_RANDOM_FAILED) ) mbedtls_snprintf( buf, buflen, "ECP - Generation of random value, such as (ephemeral) key, failed" ); - if( use_ret == -(MBEDTLS_ERR_ECP_INVALID_KEY) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_INVALID_KEY) ) mbedtls_snprintf( buf, buflen, "ECP - Invalid private or public key" ); - if( use_ret == -(MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH) ) mbedtls_snprintf( buf, buflen, "ECP - Signature is valid but shorter than the user-supplied length" ); #endif /* MBEDTLS_ECP_C */ #if defined(MBEDTLS_MD_C) - if( use_ret == -(MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "MD - The selected feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_MD_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_MD_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "MD - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_MD_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_MD_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "MD - Failed to allocate memory" ); - if( use_ret == -(MBEDTLS_ERR_MD_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_MD_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "MD - Opening or reading of file failed" ); #endif /* MBEDTLS_MD_C */ #if defined(MBEDTLS_PEM_PARSE_C) || defined(MBEDTLS_PEM_WRITE_C) - if( use_ret == -(MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) ) mbedtls_snprintf( buf, buflen, "PEM - No PEM header or footer found" ); - if( use_ret == -(MBEDTLS_ERR_PEM_INVALID_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_INVALID_DATA) ) mbedtls_snprintf( buf, buflen, "PEM - PEM string is not as expected" ); - if( use_ret == -(MBEDTLS_ERR_PEM_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "PEM - Failed to allocate memory" ); - if( use_ret == -(MBEDTLS_ERR_PEM_INVALID_ENC_IV) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_INVALID_ENC_IV) ) mbedtls_snprintf( buf, buflen, "PEM - RSA IV is not in hex-format" ); - if( use_ret == -(MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG) ) mbedtls_snprintf( buf, buflen, "PEM - Unsupported key encryption algorithm" ); - if( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) ) mbedtls_snprintf( buf, buflen, "PEM - Private key password can't be empty" ); - if( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PEM - Given private key password does not allow for correct decryption" ); - if( use_ret == -(MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PEM - Unavailable feature, e.g. hashing/encryption combination" ); - if( use_ret == -(MBEDTLS_ERR_PEM_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PEM - Bad input parameters to function" ); #endif /* MBEDTLS_PEM_PARSE_C || MBEDTLS_PEM_WRITE_C */ #if defined(MBEDTLS_PK_C) - if( use_ret == -(MBEDTLS_ERR_PK_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_PK_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "PK - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_PK_TYPE_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PK_TYPE_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PK - Type mismatch, eg attempt to encrypt with an ECDSA key" ); - if( use_ret == -(MBEDTLS_ERR_PK_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PK_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PK - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_PK_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_PK_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "PK - Read/write of file failed" ); - if( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_VERSION) ) mbedtls_snprintf( buf, buflen, "PK - Unsupported key version" ); - if( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "PK - Invalid key tag or value" ); - if( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_PK_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_PK_ALG) ) mbedtls_snprintf( buf, buflen, "PK - Key algorithm is unsupported (only RSA and EC are supported)" ); - if( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_REQUIRED) ) mbedtls_snprintf( buf, buflen, "PK - Private key password can't be empty" ); - if( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PK - Given private key password does not allow for correct decryption" ); - if( use_ret == -(MBEDTLS_ERR_PK_INVALID_PUBKEY) ) + if ( use_ret == -(MBEDTLS_ERR_PK_INVALID_PUBKEY) ) mbedtls_snprintf( buf, buflen, "PK - The pubkey tag or value is invalid (only RSA and EC are supported)" ); - if( use_ret == -(MBEDTLS_ERR_PK_INVALID_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_PK_INVALID_ALG) ) mbedtls_snprintf( buf, buflen, "PK - The algorithm tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE) ) + if ( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE) ) mbedtls_snprintf( buf, buflen, "PK - Elliptic curve is unsupported (only NIST curves are supported)" ); - if( use_ret == -(MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PK - Unavailable feature, e.g. RSA disabled for RSA key" ); - if( use_ret == -(MBEDTLS_ERR_PK_SIG_LEN_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PK_SIG_LEN_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PK - The signature is valid but its length is less than expected" ); #endif /* MBEDTLS_PK_C */ #if defined(MBEDTLS_PKCS12_C) - if( use_ret == -(MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PKCS12 - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PKCS12 - Feature not available, e.g. unsupported encryption scheme" ); - if( use_ret == -(MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "PKCS12 - PBE ASN.1 data not as expected" ); - if( use_ret == -(MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PKCS12 - Given private key password does not allow for correct decryption" ); #endif /* MBEDTLS_PKCS12_C */ #if defined(MBEDTLS_PKCS5_C) - if( use_ret == -(MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_PKCS5_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Unexpected ASN.1 data" ); - if( use_ret == -(MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Requested encryption or digest alg not available" ); - if( use_ret == -(MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Given private key password does not allow for correct decryption" ); #endif /* MBEDTLS_PKCS5_C */ #if defined(MBEDTLS_RSA_C) - if( use_ret == -(MBEDTLS_ERR_RSA_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "RSA - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_RSA_INVALID_PADDING) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_INVALID_PADDING) ) mbedtls_snprintf( buf, buflen, "RSA - Input data contains invalid padding and is rejected" ); - if( use_ret == -(MBEDTLS_ERR_RSA_KEY_GEN_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_KEY_GEN_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - Something failed during generation of a key" ); - if( use_ret == -(MBEDTLS_ERR_RSA_KEY_CHECK_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_KEY_CHECK_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - Key failed to pass the library's validity check" ); - if( use_ret == -(MBEDTLS_ERR_RSA_PUBLIC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_PUBLIC_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The public key operation failed" ); - if( use_ret == -(MBEDTLS_ERR_RSA_PRIVATE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_PRIVATE_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The private key operation failed" ); - if( use_ret == -(MBEDTLS_ERR_RSA_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The PKCS#1 verification failed" ); - if( use_ret == -(MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE) ) mbedtls_snprintf( buf, buflen, "RSA - The output buffer for decryption is not large enough" ); - if( use_ret == -(MBEDTLS_ERR_RSA_RNG_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_RNG_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The random generator failed to generate non-zeros" ); #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_SSL_TLS_C) - if( use_ret == -(MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "SSL - The requested feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "SSL - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_MAC) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INVALID_MAC) ) mbedtls_snprintf( buf, buflen, "SSL - Verification of the message MAC failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_RECORD) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INVALID_RECORD) ) mbedtls_snprintf( buf, buflen, "SSL - An invalid SSL record was received" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CONN_EOF) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CONN_EOF) ) mbedtls_snprintf( buf, buflen, "SSL - The connection indicated an EOF" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_CIPHER) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_CIPHER) ) mbedtls_snprintf( buf, buflen, "SSL - An unknown cipher was received" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN) ) mbedtls_snprintf( buf, buflen, "SSL - The server has no ciphersuites in common with the client" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_RNG) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_RNG) ) mbedtls_snprintf( buf, buflen, "SSL - No RNG was provided to the SSL module" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE) ) mbedtls_snprintf( buf, buflen, "SSL - No client certification received from the client, but required by the authentication mode" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE) ) mbedtls_snprintf( buf, buflen, "SSL - Our own certificate(s) is/are too large to send in an SSL message" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - The own certificate is not set, but needed by the server" ); - if( use_ret == -(MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - The own private key or pre-shared key is not set, but needed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - No CA Chain is set, but required to operate" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) ) mbedtls_snprintf( buf, buflen, "SSL - An unexpected message was received from our peer" ); - if( use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE) ) - { + if ( use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE) ) { mbedtls_snprintf( buf, buflen, "SSL - A fatal alert message was received from our peer" ); return; } - if( use_ret == -(MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Verification of our peer failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) ) mbedtls_snprintf( buf, buflen, "SSL - The peer notified us that the connection is going to be closed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientHello handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ServerHello handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the Certificate handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the CertificateRequest handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ServerKeyExchange handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ServerHelloDone handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Read Public" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Calculate Secret" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the CertificateVerify handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ChangeCipherSpec handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_FINISHED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_FINISHED) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the Finished handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Hardware acceleration function returned with error" ); - if( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH) ) mbedtls_snprintf( buf, buflen, "SSL - Hardware acceleration function skipped / left alone data" ); - if( use_ret == -(MBEDTLS_ERR_SSL_COMPRESSION_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_COMPRESSION_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the compression / decompression failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION) ) mbedtls_snprintf( buf, buflen, "SSL - Handshake protocol not within min/max boundaries" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the NewSessionTicket handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED) ) mbedtls_snprintf( buf, buflen, "SSL - Session ticket has expired" ); - if( use_ret == -(MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH) ) mbedtls_snprintf( buf, buflen, "SSL - Public key type mismatch (eg, asked for RSA key exchange and presented EC key)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY) ) mbedtls_snprintf( buf, buflen, "SSL - Unknown identity received (eg, PSK identity)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INTERNAL_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INTERNAL_ERROR) ) mbedtls_snprintf( buf, buflen, "SSL - Internal error (eg, unexpected failure in lower-level module)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_COUNTER_WRAPPING) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_COUNTER_WRAPPING) ) mbedtls_snprintf( buf, buflen, "SSL - A counter would wrap (eg, too many messages exchanged)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO) ) mbedtls_snprintf( buf, buflen, "SSL - Unexpected message at ServerHello in renegotiation" ); - if( use_ret == -(MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - DTLS client must retry for hello verification" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "SSL - A buffer is too small to receive or write a message" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) ) mbedtls_snprintf( buf, buflen, "SSL - None of the common ciphersuites is usable (eg, no suitable certificate, see debug messages)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_WANT_READ) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_WANT_READ) ) mbedtls_snprintf( buf, buflen, "SSL - Connection requires a read call" ); - if( use_ret == -(MBEDTLS_ERR_SSL_WANT_WRITE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_WANT_WRITE) ) mbedtls_snprintf( buf, buflen, "SSL - Connection requires a write call" ); - if( use_ret == -(MBEDTLS_ERR_SSL_TIMEOUT) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_TIMEOUT) ) mbedtls_snprintf( buf, buflen, "SSL - The operation timed out" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CLIENT_RECONNECT) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CLIENT_RECONNECT) ) mbedtls_snprintf( buf, buflen, "SSL - The client initiated a reconnect from the same port" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_RECORD) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_RECORD) ) mbedtls_snprintf( buf, buflen, "SSL - Record header looks valid but is not expected" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NON_FATAL) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NON_FATAL) ) mbedtls_snprintf( buf, buflen, "SSL - The alert message received indicates a non-fatal error" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH) ) mbedtls_snprintf( buf, buflen, "SSL - Couldn't set the hash for verifying CertificateVerify" ); #endif /* MBEDTLS_SSL_TLS_C */ #if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) - if( use_ret == -(MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "X509 - Unavailable feature, e.g. RSA hashing/encryption combination" ); - if( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_OID) ) + if ( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_OID) ) mbedtls_snprintf( buf, buflen, "X509 - Requested OID is unknown" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "X509 - The CRT/CRL/CSR format is invalid, e.g. different type expected" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_VERSION) ) mbedtls_snprintf( buf, buflen, "X509 - The CRT/CRL/CSR version element is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_SERIAL) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_SERIAL) ) mbedtls_snprintf( buf, buflen, "X509 - The serial tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_ALG) ) mbedtls_snprintf( buf, buflen, "X509 - The algorithm tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_NAME) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_NAME) ) mbedtls_snprintf( buf, buflen, "X509 - The name tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_DATE) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_DATE) ) mbedtls_snprintf( buf, buflen, "X509 - The date tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_SIGNATURE) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_SIGNATURE) ) mbedtls_snprintf( buf, buflen, "X509 - The signature tag or value invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_EXTENSIONS) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_EXTENSIONS) ) mbedtls_snprintf( buf, buflen, "X509 - The extension tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_VERSION) ) mbedtls_snprintf( buf, buflen, "X509 - CRT/CRL/CSR has an unsupported version number" ); - if( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG) ) mbedtls_snprintf( buf, buflen, "X509 - Signature algorithm (oid) is unsupported" ); - if( use_ret == -(MBEDTLS_ERR_X509_SIG_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_X509_SIG_MISMATCH) ) mbedtls_snprintf( buf, buflen, "X509 - Signature algorithms do not match. (see \\c ::mbedtls_x509_crt sig_oid)" ); - if( use_ret == -(MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "X509 - Certificate verification failed, e.g. CRL, CA or signature check failed" ); - if( use_ret == -(MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT) ) mbedtls_snprintf( buf, buflen, "X509 - Format not recognized as DER or PEM" ); - if( use_ret == -(MBEDTLS_ERR_X509_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_X509_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "X509 - Input invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_X509_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "X509 - Allocation of memory failed" ); - if( use_ret == -(MBEDTLS_ERR_X509_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_X509_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "X509 - Read/write of file failed" ); - if( use_ret == -(MBEDTLS_ERR_X509_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_X509_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "X509 - Destination buffer is too small" ); #endif /* MBEDTLS_X509_USE_C || MBEDTLS_X509_CREATE_C */ // END generated code - if( strlen( buf ) == 0 ) + if ( strlen( buf ) == 0 ) mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); } use_ret = ret & ~0xFF80; - if( use_ret == 0 ) + if ( use_ret == 0 ) return; // If high level code is present, make a concatenation between both @@ -497,9 +495,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) // len = strlen( buf ); - if( len > 0 ) - { - if( buflen - len < 5 ) + if ( len > 0 ) { + if ( buflen - len < 5 ) return; mbedtls_snprintf( buf + len, buflen - len, " : " ); @@ -512,176 +509,176 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) // // BEGIN generated code #if defined(MBEDTLS_AES_C) - if( use_ret == -(MBEDTLS_ERR_AES_INVALID_KEY_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_AES_INVALID_KEY_LENGTH) ) mbedtls_snprintf( buf, buflen, "AES - Invalid key length" ); - if( use_ret == -(MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "AES - Invalid data input length" ); #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_ASN1_PARSE_C) - if( use_ret == -(MBEDTLS_ERR_ASN1_OUT_OF_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_OUT_OF_DATA) ) mbedtls_snprintf( buf, buflen, "ASN1 - Out of data when parsing an ASN1 data structure" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_UNEXPECTED_TAG) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_UNEXPECTED_TAG) ) mbedtls_snprintf( buf, buflen, "ASN1 - ASN1 tag was of an unexpected value" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_LENGTH) ) mbedtls_snprintf( buf, buflen, "ASN1 - Error when trying to determine the length or invalid length" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_LENGTH_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_LENGTH_MISMATCH) ) mbedtls_snprintf( buf, buflen, "ASN1 - Actual length differs from expected length" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_DATA) ) mbedtls_snprintf( buf, buflen, "ASN1 - Data is invalid. (not used)" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "ASN1 - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "ASN1 - Buffer too small when writing ASN.1 data structure" ); #endif /* MBEDTLS_ASN1_PARSE_C */ #if defined(MBEDTLS_BASE64_C) - if( use_ret == -(MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "BASE64 - Output buffer too small" ); - if( use_ret == -(MBEDTLS_ERR_BASE64_INVALID_CHARACTER) ) + if ( use_ret == -(MBEDTLS_ERR_BASE64_INVALID_CHARACTER) ) mbedtls_snprintf( buf, buflen, "BASE64 - Invalid character in input" ); #endif /* MBEDTLS_BASE64_C */ #if defined(MBEDTLS_BIGNUM_C) - if( use_ret == -(MBEDTLS_ERR_MPI_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "BIGNUM - An error occurred while reading from or writing to a file" ); - if( use_ret == -(MBEDTLS_ERR_MPI_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "BIGNUM - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_MPI_INVALID_CHARACTER) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_INVALID_CHARACTER) ) mbedtls_snprintf( buf, buflen, "BIGNUM - There is an invalid character in the digit string" ); - if( use_ret == -(MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The buffer is too small to write to" ); - if( use_ret == -(MBEDTLS_ERR_MPI_NEGATIVE_VALUE) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_NEGATIVE_VALUE) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The input arguments are negative or result in illegal output" ); - if( use_ret == -(MBEDTLS_ERR_MPI_DIVISION_BY_ZERO) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_DIVISION_BY_ZERO) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The input argument for division is zero, which is not allowed" ); - if( use_ret == -(MBEDTLS_ERR_MPI_NOT_ACCEPTABLE) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_NOT_ACCEPTABLE) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The input arguments are not acceptable" ); - if( use_ret == -(MBEDTLS_ERR_MPI_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "BIGNUM - Memory allocation failed" ); #endif /* MBEDTLS_BIGNUM_C */ #if defined(MBEDTLS_BLOWFISH_C) - if( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH) ) mbedtls_snprintf( buf, buflen, "BLOWFISH - Invalid key length" ); - if( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "BLOWFISH - Invalid data input length" ); #endif /* MBEDTLS_BLOWFISH_C */ #if defined(MBEDTLS_CAMELLIA_C) - if( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH) ) mbedtls_snprintf( buf, buflen, "CAMELLIA - Invalid key length" ); - if( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "CAMELLIA - Invalid data input length" ); #endif /* MBEDTLS_CAMELLIA_C */ #if defined(MBEDTLS_CCM_C) - if( use_ret == -(MBEDTLS_ERR_CCM_BAD_INPUT) ) + if ( use_ret == -(MBEDTLS_ERR_CCM_BAD_INPUT) ) mbedtls_snprintf( buf, buflen, "CCM - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_CCM_AUTH_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CCM_AUTH_FAILED) ) mbedtls_snprintf( buf, buflen, "CCM - Authenticated decryption failed" ); #endif /* MBEDTLS_CCM_C */ #if defined(MBEDTLS_CTR_DRBG_C) - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - The entropy source failed" ); - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - Too many random requested in single call" ); - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - Input too large (Entropy + additional)" ); - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - Read/write error in file" ); #endif /* MBEDTLS_CTR_DRBG_C */ #if defined(MBEDTLS_DES_C) - if( use_ret == -(MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "DES - The data input has an invalid length" ); #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ENTROPY_C) - if( use_ret == -(MBEDTLS_ERR_ENTROPY_SOURCE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_SOURCE_FAILED) ) mbedtls_snprintf( buf, buflen, "ENTROPY - Critical entropy source failure" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_MAX_SOURCES) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_MAX_SOURCES) ) mbedtls_snprintf( buf, buflen, "ENTROPY - No more sources can be added" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED) ) mbedtls_snprintf( buf, buflen, "ENTROPY - No sources have been added to poll" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE) ) mbedtls_snprintf( buf, buflen, "ENTROPY - No strong sources have been added to poll" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "ENTROPY - Read/write error in file" ); #endif /* MBEDTLS_ENTROPY_C */ #if defined(MBEDTLS_GCM_C) - if( use_ret == -(MBEDTLS_ERR_GCM_AUTH_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_GCM_AUTH_FAILED) ) mbedtls_snprintf( buf, buflen, "GCM - Authenticated decryption failed" ); - if( use_ret == -(MBEDTLS_ERR_GCM_BAD_INPUT) ) + if ( use_ret == -(MBEDTLS_ERR_GCM_BAD_INPUT) ) mbedtls_snprintf( buf, buflen, "GCM - Bad input parameters to function" ); #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_HMAC_DRBG_C) - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - Too many random requested in single call" ); - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - Input too large (Entropy + additional)" ); - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - Read/write error in file" ); - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - The entropy source failed" ); #endif /* MBEDTLS_HMAC_DRBG_C */ #if defined(MBEDTLS_NET_C) - if( use_ret == -(MBEDTLS_ERR_NET_SOCKET_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_SOCKET_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Failed to open a socket" ); - if( use_ret == -(MBEDTLS_ERR_NET_CONNECT_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_CONNECT_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - The connection to the given server / port failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_BIND_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_BIND_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Binding of the socket failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_LISTEN_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_LISTEN_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Could not listen on the socket" ); - if( use_ret == -(MBEDTLS_ERR_NET_ACCEPT_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_ACCEPT_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Could not accept the incoming connection" ); - if( use_ret == -(MBEDTLS_ERR_NET_RECV_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_RECV_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Reading information from the socket failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_SEND_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_SEND_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Sending information through the socket failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_CONN_RESET) ) + if ( use_ret == -(MBEDTLS_ERR_NET_CONN_RESET) ) mbedtls_snprintf( buf, buflen, "NET - Connection was reset by peer" ); - if( use_ret == -(MBEDTLS_ERR_NET_UNKNOWN_HOST) ) + if ( use_ret == -(MBEDTLS_ERR_NET_UNKNOWN_HOST) ) mbedtls_snprintf( buf, buflen, "NET - Failed to get an IP address for the given hostname" ); - if( use_ret == -(MBEDTLS_ERR_NET_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_NET_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "NET - Buffer is too small to hold the data" ); - if( use_ret == -(MBEDTLS_ERR_NET_INVALID_CONTEXT) ) + if ( use_ret == -(MBEDTLS_ERR_NET_INVALID_CONTEXT) ) mbedtls_snprintf( buf, buflen, "NET - The context is invalid, eg because it was free()ed" ); #endif /* MBEDTLS_NET_C */ #if defined(MBEDTLS_OID_C) - if( use_ret == -(MBEDTLS_ERR_OID_NOT_FOUND) ) + if ( use_ret == -(MBEDTLS_ERR_OID_NOT_FOUND) ) mbedtls_snprintf( buf, buflen, "OID - OID is not found" ); - if( use_ret == -(MBEDTLS_ERR_OID_BUF_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_OID_BUF_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "OID - output buffer is too small" ); #endif /* MBEDTLS_OID_C */ #if defined(MBEDTLS_PADLOCK_C) - if( use_ret == -(MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED) ) + if ( use_ret == -(MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED) ) mbedtls_snprintf( buf, buflen, "PADLOCK - Input data should be aligned" ); #endif /* MBEDTLS_PADLOCK_C */ #if defined(MBEDTLS_THREADING_C) - if( use_ret == -(MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "THREADING - The selected feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_THREADING_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_THREADING_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "THREADING - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_THREADING_MUTEX_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_THREADING_MUTEX_ERROR) ) mbedtls_snprintf( buf, buflen, "THREADING - Locking / unlocking / free failed with error code" ); #endif /* MBEDTLS_THREADING_C */ #if defined(MBEDTLS_XTEA_C) - if( use_ret == -(MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "XTEA - The data input has an invalid length" ); #endif /* MBEDTLS_XTEA_C */ // END generated code - if( strlen( buf ) != 0 ) + if ( strlen( buf ) != 0 ) return; mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); @@ -698,7 +695,7 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) { ((void) ret); - if( buflen > 0 ) + if ( buflen > 0 ) buf[0] = '\0'; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/gcm.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/gcm.c index f1210c52..2a2bc008 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/gcm.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/gcm.c @@ -78,8 +78,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -107,8 +109,8 @@ static int gcm_gen_table( mbedtls_gcm_context *ctx ) size_t olen = 0; memset( h, 0, 16 ); - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) + return ( ret ); /* pack h as two 64-bits ints, big-endian */ GET_UINT32_BE( hi, h, 0 ); @@ -125,16 +127,15 @@ static int gcm_gen_table( mbedtls_gcm_context *ctx ) #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) /* With CLMUL support, we need only h, not the rest of the table */ - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) - return( 0 ); + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) + return ( 0 ); #endif /* 0 corresponds to 0 in GF(2^128) */ ctx->HH[0] = 0; ctx->HL[0] = 0; - for( i = 4; i > 0; i >>= 1 ) - { + for ( i = 4; i > 0; i >>= 1 ) { uint32_t T = ( vl & 1 ) * 0xe1000000U; vl = ( vh << 63 ) | ( vl >> 1 ); vh = ( vh >> 1 ) ^ ( (uint64_t) T << 32); @@ -143,19 +144,17 @@ static int gcm_gen_table( mbedtls_gcm_context *ctx ) ctx->HH[i] = vh; } - for( i = 2; i <= 8; i *= 2 ) - { + for ( i = 2; i <= 8; i *= 2 ) { uint64_t *HiL = ctx->HL + i, *HiH = ctx->HH + i; vh = *HiH; vl = *HiL; - for( j = 1; j < i; j++ ) - { + for ( j = 1; j < i; j++ ) { HiH[j] = vh ^ ctx->HH[j]; HiL[j] = vl ^ ctx->HL[j]; } } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, @@ -167,27 +166,26 @@ int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, const mbedtls_cipher_info_t *cipher_info; cipher_info = mbedtls_cipher_info_from_values( cipher, keybits, MBEDTLS_MODE_ECB ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); - if( cipher_info->block_size != 16 ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( cipher_info->block_size != 16 ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); mbedtls_cipher_free( &ctx->cipher_ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) { + return ( ret ); } - if( ( ret = gcm_gen_table( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = gcm_gen_table( ctx ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -195,8 +193,7 @@ int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, * last4[x] = x times P^128 * where x and last4[x] are seen as elements of GF(2^128) as in [MGV] */ -static const uint64_t last4[16] = -{ +static const uint64_t last4[16] = { 0x0000, 0x1c20, 0x3840, 0x2460, 0x7080, 0x6ca0, 0x48c0, 0x54e0, 0xe100, 0xfd20, 0xd940, 0xc560, @@ -215,7 +212,7 @@ static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], uint64_t zh, zl; #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) { + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) { unsigned char h[16]; PUT_UINT32_BE( ctx->HH[8] >> 32, h, 0 ); @@ -233,13 +230,11 @@ static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], zh = ctx->HH[lo]; zl = ctx->HL[lo]; - for( i = 15; i >= 0; i-- ) - { + for ( i = 15; i >= 0; i-- ) { lo = x[i] & 0xf; hi = x[i] >> 4; - if( i != 15 ) - { + if ( i != 15 ) { rem = (unsigned char) zl & 0xf; zl = ( zh << 60 ) | ( zl >> 4 ); zh = ( zh >> 4 ); @@ -264,11 +259,11 @@ static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], } int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, - int mode, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len ) + int mode, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len ) { int ret; unsigned char work_buf[16]; @@ -277,10 +272,9 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, size_t use_len, olen = 0; /* IV and AD are limited to 2^64 bits, so 2^61 bytes */ - if( ( (uint64_t) iv_len ) >> 61 != 0 || - ( (uint64_t) add_len ) >> 61 != 0 ) - { - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( ( (uint64_t) iv_len ) >> 61 != 0 || + ( (uint64_t) add_len ) >> 61 != 0 ) { + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); } memset( ctx->y, 0x00, sizeof(ctx->y) ); @@ -290,22 +284,18 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, ctx->len = 0; ctx->add_len = 0; - if( iv_len == 12 ) - { + if ( iv_len == 12 ) { memcpy( ctx->y, iv, iv_len ); ctx->y[15] = 1; - } - else - { + } else { memset( work_buf, 0x00, 16 ); PUT_UINT32_BE( iv_len * 8, work_buf, 12 ); p = iv; - while( iv_len > 0 ) - { + while ( iv_len > 0 ) { use_len = ( iv_len < 16 ) ? iv_len : 16; - for( i = 0; i < use_len; i++ ) + for ( i = 0; i < use_len; i++ ) ctx->y[i] ^= p[i]; gcm_mult( ctx, ctx->y, ctx->y ); @@ -314,25 +304,23 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, p += use_len; } - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) ctx->y[i] ^= work_buf[i]; gcm_mult( ctx, ctx->y, ctx->y ); } - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ctx->base_ectr, - &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ctx->base_ectr, + &olen ) ) != 0 ) { + return ( ret ); } ctx->add_len = add_len; p = add; - while( add_len > 0 ) - { + while ( add_len > 0 ) { use_len = ( add_len < 16 ) ? add_len : 16; - for( i = 0; i < use_len; i++ ) + for ( i = 0; i < use_len; i++ ) ctx->buf[i] ^= p[i]; gcm_mult( ctx, ctx->buf, ctx->buf ); @@ -341,13 +329,13 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, p += use_len; } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_update( mbedtls_gcm_context *ctx, - size_t length, - const unsigned char *input, - unsigned char *output ) + size_t length, + const unsigned char *input, + unsigned char *output ) { int ret; unsigned char ectr[16]; @@ -356,40 +344,36 @@ int mbedtls_gcm_update( mbedtls_gcm_context *ctx, unsigned char *out_p = output; size_t use_len, olen = 0; - if( output > input && (size_t) ( output - input ) < length ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( output > input && (size_t) ( output - input ) < length ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); /* Total length is restricted to 2^39 - 256 bits, ie 2^36 - 2^5 bytes * Also check for possible overflow */ - if( ctx->len + length < ctx->len || - (uint64_t) ctx->len + length > 0xFFFFFFFE0ull ) - { - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( ctx->len + length < ctx->len || + (uint64_t) ctx->len + length > 0xFFFFFFFE0ull ) { + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); } ctx->len += length; p = input; - while( length > 0 ) - { + while ( length > 0 ) { use_len = ( length < 16 ) ? length : 16; - for( i = 16; i > 12; i-- ) - if( ++ctx->y[i - 1] != 0 ) + for ( i = 16; i > 12; i-- ) + if ( ++ctx->y[i - 1] != 0 ) break; - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ectr, - &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ectr, + &olen ) ) != 0 ) { + return ( ret ); } - for( i = 0; i < use_len; i++ ) - { - if( ctx->mode == MBEDTLS_GCM_DECRYPT ) + for ( i = 0; i < use_len; i++ ) { + if ( ctx->mode == MBEDTLS_GCM_DECRYPT ) ctx->buf[i] ^= p[i]; out_p[i] = ectr[i] ^ p[i]; - if( ctx->mode == MBEDTLS_GCM_ENCRYPT ) + if ( ctx->mode == MBEDTLS_GCM_ENCRYPT ) ctx->buf[i] ^= out_p[i]; } @@ -400,25 +384,24 @@ int mbedtls_gcm_update( mbedtls_gcm_context *ctx, out_p += use_len; } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, - unsigned char *tag, - size_t tag_len ) + unsigned char *tag, + size_t tag_len ) { unsigned char work_buf[16]; size_t i; uint64_t orig_len = ctx->len * 8; uint64_t orig_add_len = ctx->add_len * 8; - if( tag_len > 16 || tag_len < 4 ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( tag_len > 16 || tag_len < 4 ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); memcpy( tag, ctx->base_ectr, tag_len ); - if( orig_len || orig_add_len ) - { + if ( orig_len || orig_add_len ) { memset( work_buf, 0x00, 16 ); PUT_UINT32_BE( ( orig_add_len >> 32 ), work_buf, 0 ); @@ -426,78 +409,76 @@ int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, PUT_UINT32_BE( ( orig_len >> 32 ), work_buf, 8 ); PUT_UINT32_BE( ( orig_len ), work_buf, 12 ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) ctx->buf[i] ^= work_buf[i]; gcm_mult( ctx, ctx->buf, ctx->buf ); - for( i = 0; i < tag_len; i++ ) + for ( i = 0; i < tag_len; i++ ) tag[i] ^= ctx->buf[i]; } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, - int mode, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *input, - unsigned char *output, - size_t tag_len, - unsigned char *tag ) + int mode, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *input, + unsigned char *output, + size_t tag_len, + unsigned char *tag ) { int ret; - if( ( ret = mbedtls_gcm_starts( ctx, mode, iv, iv_len, add, add_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_gcm_starts( ctx, mode, iv, iv_len, add, add_len ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_gcm_update( ctx, length, input, output ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_gcm_update( ctx, length, input, output ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_gcm_finish( ctx, tag, tag_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_gcm_finish( ctx, tag, tag_len ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *tag, - size_t tag_len, - const unsigned char *input, - unsigned char *output ) + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *tag, + size_t tag_len, + const unsigned char *input, + unsigned char *output ) { int ret; unsigned char check_tag[16]; size_t i; int diff; - if( ( ret = mbedtls_gcm_crypt_and_tag( ctx, MBEDTLS_GCM_DECRYPT, length, - iv, iv_len, add, add_len, - input, output, tag_len, check_tag ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_gcm_crypt_and_tag( ctx, MBEDTLS_GCM_DECRYPT, length, + iv, iv_len, add, add_len, + input, output, tag_len, check_tag ) ) != 0 ) { + return ( ret ); } /* Check tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) + for ( diff = 0, i = 0; i < tag_len; i++ ) diff |= tag[i] ^ check_tag[i]; - if( diff != 0 ) - { + if ( diff != 0 ) { mbedtls_zeroize( output, length ); - return( MBEDTLS_ERR_GCM_AUTH_FAILED ); + return ( MBEDTLS_ERR_GCM_AUTH_FAILED ); } - return( 0 ); + return ( 0 ); } void mbedtls_gcm_free( mbedtls_gcm_context *ctx ) @@ -515,223 +496,299 @@ void mbedtls_gcm_free( mbedtls_gcm_context *ctx ) #define MAX_TESTS 6 static const int key_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 1 }; +{ 0, 0, 1, 1, 1, 1 }; -static const unsigned char key[MAX_TESTS][32] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 }, +static const unsigned char key[MAX_TESTS][32] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, + 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, + 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, + 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 + }, }; static const size_t iv_len[MAX_TESTS] = - { 12, 12, 12, 12, 8, 60 }; +{ 12, 12, 12, 12, 8, 60 }; static const int iv_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 2 }; +{ 0, 0, 1, 1, 1, 2 }; -static const unsigned char iv[MAX_TESTS][64] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88 }, - { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b }, +static const unsigned char iv[MAX_TESTS][64] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, + 0xde, 0xca, 0xf8, 0x88 + }, + { + 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, + 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, + 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, + 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, + 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, + 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, + 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, + 0xa6, 0x37, 0xb3, 0x9b + }, }; static const size_t add_len[MAX_TESTS] = - { 0, 0, 0, 20, 20, 20 }; +{ 0, 0, 0, 20, 20, 20 }; static const int add_index[MAX_TESTS] = - { 0, 0, 0, 1, 1, 1 }; +{ 0, 0, 0, 1, 1, 1 }; -static const unsigned char additional[MAX_TESTS][64] = -{ +static const unsigned char additional[MAX_TESTS][64] = { { 0x00 }, - { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2 }, + { + 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, + 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, + 0xab, 0xad, 0xda, 0xd2 + }, }; static const size_t pt_len[MAX_TESTS] = - { 0, 16, 64, 60, 60, 60 }; +{ 0, 16, 64, 60, 60, 60 }; static const int pt_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 1 }; +{ 0, 0, 1, 1, 1, 1 }; -static const unsigned char pt[MAX_TESTS][64] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 }, +static const unsigned char pt[MAX_TESTS][64] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, + 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, + 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, + 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, + 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, + 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, + 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, + 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 + }, }; -static const unsigned char ct[MAX_TESTS * 3][64] = -{ +static const unsigned char ct[MAX_TESTS * 3][64] = { { 0x00 }, - { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, - 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 }, - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 }, - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91 }, - { 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, - 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, - 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, - 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, - 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, - 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, - 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, - 0xc2, 0x3f, 0x45, 0x98 }, - { 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, - 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, - 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, - 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, - 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, - 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, - 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, - 0x4c, 0x34, 0xae, 0xe5 }, + { + 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, + 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 + }, + { + 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, + 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, + 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, + 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, + 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, + 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, + 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, + 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 + }, + { + 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, + 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, + 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, + 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, + 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, + 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, + 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, + 0x3d, 0x58, 0xe0, 0x91 + }, + { + 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, + 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, + 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, + 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, + 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, + 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, + 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, + 0xc2, 0x3f, 0x45, 0x98 + }, + { + 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, + 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, + 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, + 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, + 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, + 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, + 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, + 0x4c, 0x34, 0xae, 0xe5 + }, { 0x00 }, - { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, - 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 }, - { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 }, - { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10 }, - { 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, - 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, - 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, - 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, - 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, - 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, - 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, - 0xa0, 0xf0, 0x62, 0xf7 }, - { 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, - 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, - 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, - 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, - 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, - 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, - 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, - 0xe9, 0xb7, 0x37, 0x3b }, + { + 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, + 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 + }, + { + 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, + 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, + 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, + 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, + 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, + 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, + 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, + 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 + }, + { + 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, + 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, + 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, + 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, + 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, + 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, + 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, + 0xcc, 0xda, 0x27, 0x10 + }, + { + 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, + 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, + 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, + 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, + 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, + 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, + 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, + 0xa0, 0xf0, 0x62, 0xf7 + }, + { + 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, + 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, + 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, + 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, + 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, + 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, + 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, + 0xe9, 0xb7, 0x37, 0x3b + }, { 0x00 }, - { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, - 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 }, - { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad }, - { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62 }, - { 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, - 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, - 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, - 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, - 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, - 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, - 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, - 0xf4, 0x7c, 0x9b, 0x1f }, - { 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, - 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, - 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, - 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, - 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, - 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, - 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, - 0x44, 0xae, 0x7e, 0x3f }, + { + 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, + 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 + }, + { + 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, + 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, + 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, + 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, + 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, + 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, + 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, + 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad + }, + { + 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, + 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, + 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, + 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, + 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, + 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, + 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, + 0xbc, 0xc9, 0xf6, 0x62 + }, + { + 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, + 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, + 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, + 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, + 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, + 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, + 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, + 0xf4, 0x7c, 0x9b, 0x1f + }, + { + 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, + 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, + 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, + 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, + 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, + 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, + 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, + 0x44, 0xae, 0x7e, 0x3f + }, }; -static const unsigned char tag[MAX_TESTS * 3][16] = -{ - { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, - 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a }, - { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, - 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf }, - { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, - 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 }, - { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, - 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 }, - { 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, - 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb }, - { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, - 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50 }, - { 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, - 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 }, - { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, - 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb }, - { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, - 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 }, - { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, - 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c }, - { 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, - 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8 }, - { 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, - 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9 }, - { 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, - 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b }, - { 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, - 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 }, - { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, - 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c }, - { 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, - 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b }, - { 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, - 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2 }, - { 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, - 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a }, +static const unsigned char tag[MAX_TESTS * 3][16] = { + { + 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, + 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a + }, + { + 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, + 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf + }, + { + 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, + 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 + }, + { + 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, + 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 + }, + { + 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, + 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb + }, + { + 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, + 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50 + }, + { + 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, + 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 + }, + { + 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, + 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb + }, + { + 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, + 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 + }, + { + 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, + 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c + }, + { + 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, + 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8 + }, + { + 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, + 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9 + }, + { + 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, + 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b + }, + { + 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, + 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 + }, + { + 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, + 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c + }, + { + 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, + 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b + }, + { + 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, + 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2 + }, + { + 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, + 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a + }, }; int mbedtls_gcm_self_test( int verbose ) @@ -744,207 +801,187 @@ int mbedtls_gcm_self_test( int verbose ) mbedtls_gcm_init( &ctx ); - for( j = 0; j < 3; j++ ) - { + for ( j = 0; j < 3; j++ ) { int key_len = 128 + 64 * j; - for( i = 0; i < MAX_TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < MAX_TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d (%s): ", - key_len, i, "enc" ); + key_len, i, "enc" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, - pt_len[i], - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i], - pt[pt_index[i]], buf, 16, tag_buf ); + pt_len[i], + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i], + pt[pt_index[i]], buf, 16, tag_buf ); - if( ret != 0 || - memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d (%s): ", - key_len, i, "dec" ); + key_len, i, "dec" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_DECRYPT, - pt_len[i], - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i], - ct[j * 6 + i], buf, 16, tag_buf ); + pt_len[i], + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i], + ct[j * 6 + i], buf, 16, tag_buf ); - if( ret != 0 || - memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d split (%s): ", - key_len, i, "enc" ); + key_len, i, "enc" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_starts( &ctx, MBEDTLS_GCM_ENCRYPT, - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i] ); - if( ret != 0 ) - { - if( verbose != 0 ) + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i] ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( pt_len[i] > 32 ) - { + if ( pt_len[i] > 32 ) { size_t rest_len = pt_len[i] - 32; ret = mbedtls_gcm_update( &ctx, 32, pt[pt_index[i]], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } ret = mbedtls_gcm_update( &ctx, rest_len, pt[pt_index[i]] + 32, - buf + 32 ); - if( ret != 0 ) - { - if( verbose != 0 ) + buf + 32 ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - } - else - { + } else { ret = mbedtls_gcm_update( &ctx, pt_len[i], pt[pt_index[i]], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } ret = mbedtls_gcm_finish( &ctx, tag_buf, 16 ); - if( ret != 0 || - memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d split (%s): ", - key_len, i, "dec" ); + key_len, i, "dec" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_starts( &ctx, MBEDTLS_GCM_DECRYPT, - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i] ); - if( ret != 0 ) - { - if( verbose != 0 ) + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i] ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( pt_len[i] > 32 ) - { + if ( pt_len[i] > 32 ) { size_t rest_len = pt_len[i] - 32; ret = mbedtls_gcm_update( &ctx, 32, ct[j * 6 + i], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } ret = mbedtls_gcm_update( &ctx, rest_len, ct[j * 6 + i] + 32, - buf + 32 ); - if( ret != 0 ) - { - if( verbose != 0 ) + buf + 32 ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - } - else - { + } else { ret = mbedtls_gcm_update( &ctx, pt_len[i], ct[j * 6 + i], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } ret = mbedtls_gcm_finish( &ctx, tag_buf, 16 ); - if( ret != 0 || - memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/havege.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/havege.c index 2b75ef7b..54b40bf2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/havege.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/havege.c @@ -40,8 +40,10 @@ #include /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* ------------------------------------------------------------------------ @@ -178,8 +180,7 @@ static void havege_fill( mbedtls_havege_state *hs ) memset( RES, 0, sizeof( RES ) ); - while( n < MBEDTLS_HAVEGE_COLLECT_SIZE * 4 ) - { + while ( n < MBEDTLS_HAVEGE_COLLECT_SIZE * 4 ) { ONE_ITERATION ONE_ITERATION ONE_ITERATION @@ -205,7 +206,7 @@ void mbedtls_havege_init( mbedtls_havege_state *hs ) void mbedtls_havege_free( mbedtls_havege_state *hs ) { - if( hs == NULL ) + if ( hs == NULL ) return; mbedtls_zeroize( hs, sizeof( mbedtls_havege_state ) ); @@ -221,13 +222,12 @@ int mbedtls_havege_random( void *p_rng, unsigned char *buf, size_t len ) mbedtls_havege_state *hs = (mbedtls_havege_state *) p_rng; unsigned char *p = buf; - while( len > 0 ) - { + while ( len > 0 ) { use_len = len; - if( use_len > sizeof(int) ) + if ( use_len > sizeof(int) ) use_len = sizeof(int); - if( hs->offset[1] >= MBEDTLS_HAVEGE_COLLECT_SIZE ) + if ( hs->offset[1] >= MBEDTLS_HAVEGE_COLLECT_SIZE ) havege_fill( hs ); val = hs->pool[hs->offset[0]++]; @@ -239,7 +239,7 @@ int mbedtls_havege_random( void *p_rng, unsigned char *buf, size_t len ) p += use_len; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVEGE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/hmac_drbg.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/hmac_drbg.c index bf5f9b5b..365285d7 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/hmac_drbg.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/hmac_drbg.c @@ -51,8 +51,10 @@ #endif /* MBEDTLS_PLATFORM_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -71,20 +73,19 @@ void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context *ctx ) * HMAC_DRBG update, using optional additional data (10.1.2.2) */ void mbedtls_hmac_drbg_update( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) + const unsigned char *additional, size_t add_len ) { size_t md_len = mbedtls_md_get_size( ctx->md_ctx.md_info ); unsigned char rounds = ( additional != NULL && add_len != 0 ) ? 2 : 1; unsigned char sep[1]; unsigned char K[MBEDTLS_MD_MAX_SIZE]; - for( sep[0] = 0; sep[0] < rounds; sep[0]++ ) - { + for ( sep[0] = 0; sep[0] < rounds; sep[0]++ ) { /* Step 1 or 4 */ mbedtls_md_hmac_reset( &ctx->md_ctx ); mbedtls_md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); mbedtls_md_hmac_update( &ctx->md_ctx, sep, 1 ); - if( rounds == 2 ) + if ( rounds == 2 ) mbedtls_md_hmac_update( &ctx->md_ctx, additional, add_len ); mbedtls_md_hmac_finish( &ctx->md_ctx, K ); @@ -99,13 +100,13 @@ void mbedtls_hmac_drbg_update( mbedtls_hmac_drbg_context *ctx, * Simplified HMAC_DRBG initialisation (for use with deterministic ECDSA) */ int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - const unsigned char *data, size_t data_len ) + const mbedtls_md_info_t * md_info, + const unsigned char *data, size_t data_len ) { int ret; - if( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); /* * Set initial working state. @@ -117,36 +118,34 @@ int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, mbedtls_hmac_drbg_update( ctx, data, data_len ); - return( 0 ); + return ( 0 ); } /* * HMAC_DRBG reseeding: 10.1.2.4 (arabic) + 9.2 (Roman) */ int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t len ) + const unsigned char *additional, size_t len ) { unsigned char seed[MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT]; size_t seedlen; /* III. Check input length */ - if( len > MBEDTLS_HMAC_DRBG_MAX_INPUT || - ctx->entropy_len + len > MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT ) - { - return( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); + if ( len > MBEDTLS_HMAC_DRBG_MAX_INPUT || + ctx->entropy_len + len > MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT ) { + return ( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); } memset( seed, 0, MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT ); /* IV. Gather entropy_len bytes of entropy for the seed */ - if( ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) != 0 ) - return( MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED ); + if ( ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) != 0 ) + return ( MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED ); seedlen = ctx->entropy_len; /* 1. Concatenate entropy and additional data if any */ - if( additional != NULL && len != 0 ) - { + if ( additional != NULL && len != 0 ) { memcpy( seed + seedlen, additional, len ); seedlen += len; } @@ -158,24 +157,24 @@ int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, ctx->reseed_counter = 1; /* 4. Done */ - return( 0 ); + return ( 0 ); } /* * HMAC_DRBG initialisation (10.1.2.3 + 9.1) */ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) + const mbedtls_md_info_t * md_info, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ) { int ret; size_t entropy_len, md_size; - if( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); md_size = mbedtls_md_get_size( md_info ); @@ -201,7 +200,7 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, */ entropy_len = md_size <= 20 ? 16 : /* 160-bits hash -> 128 bits */ md_size <= 28 ? 24 : /* 224-bits hash -> 192 bits */ - 32; /* better (256+) -> 256 bits */ + 32; /* better (256+) -> 256 bits */ /* * For initialisation, use more entropy to emulate a nonce @@ -209,19 +208,19 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, */ ctx->entropy_len = entropy_len * 3 / 2; - if( ( ret = mbedtls_hmac_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_hmac_drbg_reseed( ctx, custom, len ) ) != 0 ) + return ( ret ); ctx->entropy_len = entropy_len; - return( 0 ); + return ( 0 ); } /* * Set prediction resistance */ void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx, - int resistance ) + int resistance ) { ctx->prediction_resistance = resistance; } @@ -247,8 +246,8 @@ void mbedtls_hmac_drbg_set_reseed_interval( mbedtls_hmac_drbg_context *ctx, int * 10.1.2.5 (arabic) + 9.3 (Roman) */ int mbedtls_hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t out_len, - const unsigned char *additional, size_t add_len ) + unsigned char *output, size_t out_len, + const unsigned char *additional, size_t add_len ) { int ret; mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng; @@ -257,31 +256,29 @@ int mbedtls_hmac_drbg_random_with_add( void *p_rng, unsigned char *out = output; /* II. Check request length */ - if( out_len > MBEDTLS_HMAC_DRBG_MAX_REQUEST ) - return( MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG ); + if ( out_len > MBEDTLS_HMAC_DRBG_MAX_REQUEST ) + return ( MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG ); /* III. Check input length */ - if( add_len > MBEDTLS_HMAC_DRBG_MAX_INPUT ) - return( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); + if ( add_len > MBEDTLS_HMAC_DRBG_MAX_INPUT ) + return ( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); /* 1. (aka VII and IX) Check reseed counter and PR */ - if( ctx->f_entropy != NULL && /* For no-reseeding instances */ - ( ctx->prediction_resistance == MBEDTLS_HMAC_DRBG_PR_ON || - ctx->reseed_counter > ctx->reseed_interval ) ) - { - if( ( ret = mbedtls_hmac_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); + if ( ctx->f_entropy != NULL && /* For no-reseeding instances */ + ( ctx->prediction_resistance == MBEDTLS_HMAC_DRBG_PR_ON || + ctx->reseed_counter > ctx->reseed_interval ) ) { + if ( ( ret = mbedtls_hmac_drbg_reseed( ctx, additional, add_len ) ) != 0 ) + return ( ret ); add_len = 0; /* VII.4 */ } /* 2. Use additional data if any */ - if( additional != NULL && add_len != 0 ) + if ( additional != NULL && add_len != 0 ) mbedtls_hmac_drbg_update( ctx, additional, add_len ); /* 3, 4, 5. Generate bytes */ - while( left != 0 ) - { + while ( left != 0 ) { size_t use_len = left > md_len ? md_len : left; mbedtls_md_hmac_reset( &ctx->md_ctx ); @@ -300,7 +297,7 @@ int mbedtls_hmac_drbg_random_with_add( void *p_rng, ctx->reseed_counter++; /* 8. Done */ - return( 0 ); + return ( 0 ); } /* @@ -312,18 +309,18 @@ int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = mbedtls_hmac_drbg_random_with_add( ctx, output, out_len, NULL, 0 ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* @@ -331,7 +328,7 @@ int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len */ void mbedtls_hmac_drbg_free( mbedtls_hmac_drbg_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; #if defined(MBEDTLS_THREADING_C) @@ -348,14 +345,13 @@ int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const cha FILE *f; unsigned char buf[ MBEDTLS_HMAC_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "wb" ) ) == NULL ) + return ( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); - if( ( ret = mbedtls_hmac_drbg_random( ctx, buf, sizeof( buf ) ) ) != 0 ) + if ( ( ret = mbedtls_hmac_drbg_random( ctx, buf, sizeof( buf ) ) ) != 0 ) goto exit; - if( fwrite( buf, 1, sizeof( buf ), f ) != sizeof( buf ) ) - { + if ( fwrite( buf, 1, sizeof( buf ), f ) != sizeof( buf ) ) { ret = MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR; goto exit; } @@ -364,7 +360,7 @@ int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const cha exit: fclose( f ); - return( ret ); + return ( ret ); } int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ) @@ -373,30 +369,28 @@ int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const ch size_t n; unsigned char buf[ MBEDTLS_HMAC_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); n = (size_t) ftell( f ); fseek( f, 0, SEEK_SET ); - if( n > MBEDTLS_HMAC_DRBG_MAX_INPUT ) - { + if ( n > MBEDTLS_HMAC_DRBG_MAX_INPUT ) { fclose( f ); - return( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); + return ( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); } - if( fread( buf, 1, n, f ) != n ) - { + if ( fread( buf, 1, n, f ) != n ) { fclose( f ); - return( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); } fclose( f ); mbedtls_hmac_drbg_update( ctx, buf, n ); - return( mbedtls_hmac_drbg_write_seed_file( ctx, path ) ); + return ( mbedtls_hmac_drbg_write_seed_file( ctx, path ) ); } #endif /* MBEDTLS_FS_IO */ @@ -408,7 +402,7 @@ int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const ch int mbedtls_hmac_drbg_self_test( int verbose ) { (void) verbose; - return( 0 ); + return ( 0 ); } #else @@ -420,7 +414,8 @@ static const unsigned char entropy_pr[] = { 0xf7, 0x3e, 0x9c, 0x5b, 0x64, 0xef, 0xd8, 0xca, 0x02, 0x8c, 0xf8, 0x11, 0x48, 0xa5, 0x84, 0xfe, 0x69, 0xab, 0x5a, 0xee, 0x42, 0xaa, 0x4d, 0x42, 0x17, 0x60, 0x99, 0xd4, 0x5e, 0x13, 0x97, 0xdc, 0x40, 0x4d, 0x86, 0xa3, - 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 }; + 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 +}; static const unsigned char result_pr[OUTPUT_LEN] = { 0x9a, 0x00, 0xa2, 0xd0, 0x0e, 0xd5, 0x9b, 0xfe, 0x31, 0xec, 0xb1, 0x39, 0x9b, 0x60, 0x81, 0x48, 0xd1, 0x96, 0x9d, 0x25, 0x0d, 0x3c, 0x1e, 0x94, @@ -428,14 +423,16 @@ static const unsigned char result_pr[OUTPUT_LEN] = { 0x73, 0x19, 0x70, 0xc0, 0x10, 0x7a, 0xa4, 0x89, 0x25, 0x19, 0x95, 0x5e, 0x4b, 0xc6, 0x00, 0x1d, 0x7f, 0x4e, 0x6a, 0x2b, 0xf8, 0xa3, 0x01, 0xab, 0x46, 0x05, 0x5c, 0x09, 0xa6, 0x71, 0x88, 0xf1, 0xa7, 0x40, 0xee, 0xf3, - 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 }; + 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 +}; /* From a NIST PR=false test vector */ static const unsigned char entropy_nopr[] = { 0x79, 0x34, 0x9b, 0xbf, 0x7c, 0xdd, 0xa5, 0x79, 0x95, 0x57, 0x86, 0x66, 0x21, 0xc9, 0x13, 0x83, 0x11, 0x46, 0x73, 0x3a, 0xbf, 0x8c, 0x35, 0xc8, 0xc7, 0x21, 0x5b, 0x5b, 0x96, 0xc4, 0x8e, 0x9b, 0x33, 0x8c, 0x74, 0xe3, - 0xe9, 0x9d, 0xfe, 0xdf }; + 0xe9, 0x9d, 0xfe, 0xdf +}; static const unsigned char result_nopr[OUTPUT_LEN] = { 0xc6, 0xa1, 0x6a, 0xb8, 0xd4, 0x20, 0x70, 0x6f, 0x0f, 0x34, 0xab, 0x7f, 0xec, 0x5a, 0xdc, 0xa9, 0xd8, 0xca, 0x3a, 0x13, 0x3e, 0x15, 0x9c, 0xa6, @@ -443,7 +440,8 @@ static const unsigned char result_nopr[OUTPUT_LEN] = { 0xff, 0xb1, 0x0d, 0x71, 0x94, 0xf1, 0xc1, 0xa5, 0xcf, 0x73, 0x22, 0xec, 0x1a, 0xe0, 0x96, 0x4e, 0xd4, 0xbf, 0x12, 0x27, 0x46, 0xe0, 0x87, 0xfd, 0xb5, 0xb3, 0xe9, 0x1b, 0x34, 0x93, 0xd5, 0xbb, 0x98, 0xfa, 0xed, 0x49, - 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 }; + 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 +}; /* "Entropy" from buffer */ static size_t test_offset; @@ -453,7 +451,7 @@ static int hmac_drbg_self_test_entropy( void *data, const unsigned char *p = data; memcpy( buf, p + test_offset, len ); test_offset += len; - return( 0 ); + return ( 0 ); } #define CHK( c ) if( (c) != 0 ) \ @@ -477,13 +475,13 @@ int mbedtls_hmac_drbg_self_test( int verbose ) /* * PR = True */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " HMAC_DRBG (PR = True) : " ); test_offset = 0; CHK( mbedtls_hmac_drbg_seed( &ctx, md_info, - hmac_drbg_self_test_entropy, (void *) entropy_pr, - NULL, 0 ) ); + hmac_drbg_self_test_entropy, (void *) entropy_pr, + NULL, 0 ) ); mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); @@ -492,21 +490,21 @@ int mbedtls_hmac_drbg_self_test( int verbose ) mbedtls_hmac_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); /* * PR = False */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " HMAC_DRBG (PR = False) : " ); mbedtls_hmac_drbg_init( &ctx ); test_offset = 0; CHK( mbedtls_hmac_drbg_seed( &ctx, md_info, - hmac_drbg_self_test_entropy, (void *) entropy_nopr, - NULL, 0 ) ); + hmac_drbg_self_test_entropy, (void *) entropy_nopr, + NULL, 0 ) ); CHK( mbedtls_hmac_drbg_reseed( &ctx, NULL, 0 ) ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); @@ -515,13 +513,13 @@ int mbedtls_hmac_drbg_self_test( int verbose ) mbedtls_hmac_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md.c index eda98f63..090780b2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md.c @@ -49,8 +49,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -59,122 +61,121 @@ static void mbedtls_zeroize( void *v, size_t n ) { static const int supported_digests[] = { #if defined(MBEDTLS_SHA512_C) - MBEDTLS_MD_SHA512, - MBEDTLS_MD_SHA384, + MBEDTLS_MD_SHA512, + MBEDTLS_MD_SHA384, #endif #if defined(MBEDTLS_SHA256_C) - MBEDTLS_MD_SHA256, - MBEDTLS_MD_SHA224, + MBEDTLS_MD_SHA256, + MBEDTLS_MD_SHA224, #endif #if defined(MBEDTLS_SHA1_C) - MBEDTLS_MD_SHA1, + MBEDTLS_MD_SHA1, #endif #if defined(MBEDTLS_RIPEMD160_C) - MBEDTLS_MD_RIPEMD160, + MBEDTLS_MD_RIPEMD160, #endif #if defined(MBEDTLS_MD5_C) - MBEDTLS_MD_MD5, + MBEDTLS_MD_MD5, #endif #if defined(MBEDTLS_MD4_C) - MBEDTLS_MD_MD4, + MBEDTLS_MD_MD4, #endif #if defined(MBEDTLS_MD2_C) - MBEDTLS_MD_MD2, + MBEDTLS_MD_MD2, #endif - MBEDTLS_MD_NONE + MBEDTLS_MD_NONE }; const int *mbedtls_md_list( void ) { - return( supported_digests ); + return ( supported_digests ); } const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name ) { - if( NULL == md_name ) - return( NULL ); + if ( NULL == md_name ) + return ( NULL ); /* Get the appropriate digest information */ #if defined(MBEDTLS_MD2_C) - if( !strcmp( "MD2", md_name ) ) + if ( !strcmp( "MD2", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD2 ); #endif #if defined(MBEDTLS_MD4_C) - if( !strcmp( "MD4", md_name ) ) + if ( !strcmp( "MD4", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD4 ); #endif #if defined(MBEDTLS_MD5_C) - if( !strcmp( "MD5", md_name ) ) + if ( !strcmp( "MD5", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ); #endif #if defined(MBEDTLS_RIPEMD160_C) - if( !strcmp( "RIPEMD160", md_name ) ) + if ( !strcmp( "RIPEMD160", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_RIPEMD160 ); #endif #if defined(MBEDTLS_SHA1_C) - if( !strcmp( "SHA1", md_name ) || !strcmp( "SHA", md_name ) ) + if ( !strcmp( "SHA1", md_name ) || !strcmp( "SHA", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ); #endif #if defined(MBEDTLS_SHA256_C) - if( !strcmp( "SHA224", md_name ) ) + if ( !strcmp( "SHA224", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA224 ); - if( !strcmp( "SHA256", md_name ) ) + if ( !strcmp( "SHA256", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ); #endif #if defined(MBEDTLS_SHA512_C) - if( !strcmp( "SHA384", md_name ) ) + if ( !strcmp( "SHA384", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA384 ); - if( !strcmp( "SHA512", md_name ) ) + if ( !strcmp( "SHA512", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA512 ); #endif - return( NULL ); + return ( NULL ); } const mbedtls_md_info_t *mbedtls_md_info_from_type( mbedtls_md_type_t md_type ) { - switch( md_type ) - { + switch ( md_type ) { #if defined(MBEDTLS_MD2_C) case MBEDTLS_MD_MD2: - return( &mbedtls_md2_info ); + return ( &mbedtls_md2_info ); #endif #if defined(MBEDTLS_MD4_C) case MBEDTLS_MD_MD4: - return( &mbedtls_md4_info ); + return ( &mbedtls_md4_info ); #endif #if defined(MBEDTLS_MD5_C) case MBEDTLS_MD_MD5: - return( &mbedtls_md5_info ); + return ( &mbedtls_md5_info ); #endif #if defined(MBEDTLS_RIPEMD160_C) case MBEDTLS_MD_RIPEMD160: - return( &mbedtls_ripemd160_info ); + return ( &mbedtls_ripemd160_info ); #endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: - return( &mbedtls_sha1_info ); + return ( &mbedtls_sha1_info ); #endif #if defined(MBEDTLS_SHA256_C) case MBEDTLS_MD_SHA224: - return( &mbedtls_sha224_info ); + return ( &mbedtls_sha224_info ); case MBEDTLS_MD_SHA256: - return( &mbedtls_sha256_info ); + return ( &mbedtls_sha256_info ); #endif #if defined(MBEDTLS_SHA512_C) case MBEDTLS_MD_SHA384: - return( &mbedtls_sha384_info ); + return ( &mbedtls_sha384_info ); case MBEDTLS_MD_SHA512: - return( &mbedtls_sha512_info ); + return ( &mbedtls_sha512_info ); #endif default: - return( NULL ); + return ( NULL ); } } @@ -185,14 +186,13 @@ void mbedtls_md_init( mbedtls_md_context_t *ctx ) void mbedtls_md_free( mbedtls_md_context_t *ctx ) { - if( ctx == NULL || ctx->md_info == NULL ) + if ( ctx == NULL || ctx->md_info == NULL ) return; - if( ctx->md_ctx != NULL ) + if ( ctx->md_ctx != NULL ) ctx->md_info->ctx_free_func( ctx->md_ctx ); - if( ctx->hmac_ctx != NULL ) - { + if ( ctx->hmac_ctx != NULL ) { mbedtls_zeroize( ctx->hmac_ctx, 2 * ctx->md_info->block_size ); mbedtls_free( ctx->hmac_ctx ); } @@ -203,16 +203,15 @@ void mbedtls_md_free( mbedtls_md_context_t *ctx ) int mbedtls_md_clone( mbedtls_md_context_t *dst, const mbedtls_md_context_t *src ) { - if( dst == NULL || dst->md_info == NULL || - src == NULL || src->md_info == NULL || - dst->md_info != src->md_info ) - { - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( dst == NULL || dst->md_info == NULL || + src == NULL || src->md_info == NULL || + dst->md_info != src->md_info ) { + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); } dst->md_info->clone_func( dst->md_ctx, src->md_ctx ); - return( 0 ); + return ( 0 ); } #if ! defined(MBEDTLS_DEPRECATED_REMOVED) @@ -224,66 +223,64 @@ int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_ int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac ) { - if( md_info == NULL || ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL || ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_MD_ALLOC_FAILED ); + if ( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL ) + return ( MBEDTLS_ERR_MD_ALLOC_FAILED ); - if( hmac != 0 ) - { + if ( hmac != 0 ) { ctx->hmac_ctx = mbedtls_calloc( 2, md_info->block_size ); - if( ctx->hmac_ctx == NULL ) - { + if ( ctx->hmac_ctx == NULL ) { md_info->ctx_free_func( ctx->md_ctx ); - return( MBEDTLS_ERR_MD_ALLOC_FAILED ); + return ( MBEDTLS_ERR_MD_ALLOC_FAILED ); } } ctx->md_info = md_info; - return( 0 ); + return ( 0 ); } int mbedtls_md_starts( mbedtls_md_context_t *ctx ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->starts_func( ctx->md_ctx ); - return( 0 ); + return ( 0 ); } int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->update_func( ctx->md_ctx, input, ilen ); - return( 0 ); + return ( 0 ); } int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->finish_func( ctx->md_ctx, output ); - return( 0 ); + return ( 0 ); } int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { - if( md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); md_info->digest_func( input, ilen, output ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_FS_IO) @@ -295,24 +292,23 @@ int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigne mbedtls_md_context_t ctx; unsigned char buf[1024]; - if( md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_MD_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_MD_FILE_IO_ERROR ); mbedtls_md_init( &ctx ); - if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) + if ( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) goto cleanup; md_info->starts_func( ctx.md_ctx ); - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) + while ( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) md_info->update_func( ctx.md_ctx, buf, n ); - if( ferror( f ) != 0 ) - { + if ( ferror( f ) != 0 ) { ret = MBEDTLS_ERR_MD_FILE_IO_ERROR; goto cleanup; } @@ -323,7 +319,7 @@ cleanup: fclose( f ); mbedtls_md_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -333,11 +329,10 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, unsigned char *ipad, *opad; size_t i; - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - if( keylen > (size_t) ctx->md_info->block_size ) - { + if ( keylen > (size_t) ctx->md_info->block_size ) { ctx->md_info->starts_func( ctx->md_ctx ); ctx->md_info->update_func( ctx->md_ctx, key, keylen ); ctx->md_info->finish_func( ctx->md_ctx, sum ); @@ -352,8 +347,7 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, memset( ipad, 0x36, ctx->md_info->block_size ); memset( opad, 0x5C, ctx->md_info->block_size ); - for( i = 0; i < keylen; i++ ) - { + for ( i = 0; i < keylen; i++ ) { ipad[i] = (unsigned char)( ipad[i] ^ key[i] ); opad[i] = (unsigned char)( opad[i] ^ key[i] ); } @@ -363,17 +357,17 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, ctx->md_info->starts_func( ctx->md_ctx ); ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) { - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->update_func( ctx->md_ctx, input, ilen ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) @@ -381,8 +375,8 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) unsigned char tmp[MBEDTLS_MD_MAX_SIZE]; unsigned char *opad; - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size; @@ -392,38 +386,38 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) ctx->md_info->update_func( ctx->md_ctx, tmp, ctx->md_info->size ); ctx->md_info->finish_func( ctx->md_ctx, output ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx ) { unsigned char *ipad; - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ipad = (unsigned char *) ctx->hmac_ctx; ctx->md_info->starts_func( ctx->md_ctx ); ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) + const unsigned char *input, size_t ilen, + unsigned char *output ) { mbedtls_md_context_t ctx; int ret; - if( md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); mbedtls_md_init( &ctx ); - if( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 ) + return ( ret ); mbedtls_md_hmac_starts( &ctx, key, keylen ); mbedtls_md_hmac_update( &ctx, input, ilen ); @@ -431,39 +425,39 @@ int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, mbedtls_md_free( &ctx ); - return( 0 ); + return ( 0 ); } int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->process_func( ctx->md_ctx, data ); - return( 0 ); + return ( 0 ); } unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info ) { - if( md_info == NULL ) - return( 0 ); + if ( md_info == NULL ) + return ( 0 ); return md_info->size; } mbedtls_md_type_t mbedtls_md_get_type( const mbedtls_md_info_t *md_info ) { - if( md_info == NULL ) - return( MBEDTLS_MD_NONE ); + if ( md_info == NULL ) + return ( MBEDTLS_MD_NONE ); return md_info->type; } const char *mbedtls_md_get_name( const mbedtls_md_info_t *md_info ) { - if( md_info == NULL ) - return( NULL ); + if ( md_info == NULL ) + return ( NULL ); return md_info->name; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md2.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md2.c index 89767013..8a4d5ef6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md2.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md2.c @@ -49,12 +49,13 @@ #if !defined(MBEDTLS_MD2_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } -static const unsigned char PI_SUBST[256] = -{ +static const unsigned char PI_SUBST[256] = { 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, @@ -90,7 +91,7 @@ void mbedtls_md2_init( mbedtls_md2_context *ctx ) void mbedtls_md2_free( mbedtls_md2_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_md2_context ) ); @@ -119,19 +120,16 @@ void mbedtls_md2_process( mbedtls_md2_context *ctx ) int i, j; unsigned char t = 0; - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { ctx->state[i + 16] = ctx->buffer[i]; ctx->state[i + 32] = (unsigned char)( ctx->buffer[i] ^ ctx->state[i]); } - for( i = 0; i < 18; i++ ) - { - for( j = 0; j < 48; j++ ) - { + for ( i = 0; i < 18; i++ ) { + for ( j = 0; j < 48; j++ ) { ctx->state[j] = (unsigned char) - ( ctx->state[j] ^ PI_SUBST[t] ); + ( ctx->state[j] ^ PI_SUBST[t] ); t = ctx->state[j]; } @@ -140,10 +138,9 @@ void mbedtls_md2_process( mbedtls_md2_context *ctx ) t = ctx->cksum[15]; - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { ctx->cksum[i] = (unsigned char) - ( ctx->cksum[i] ^ PI_SUBST[ctx->buffer[i] ^ t] ); + ( ctx->cksum[i] ^ PI_SUBST[ctx->buffer[i] ^ t] ); t = ctx->cksum[i]; } } @@ -156,9 +153,8 @@ void mbedtls_md2_update( mbedtls_md2_context *ctx, const unsigned char *input, s { size_t fill; - while( ilen > 0 ) - { - if( ctx->left + ilen > 16 ) + while ( ilen > 0 ) { + if ( ctx->left + ilen > 16 ) fill = 16 - ctx->left; else fill = ilen; @@ -169,8 +165,7 @@ void mbedtls_md2_update( mbedtls_md2_context *ctx, const unsigned char *input, s input += fill; ilen -= fill; - if( ctx->left == 16 ) - { + if ( ctx->left == 16 ) { ctx->left = 0; mbedtls_md2_process( ctx ); } @@ -187,7 +182,7 @@ void mbedtls_md2_finish( mbedtls_md2_context *ctx, unsigned char output[16] ) x = (unsigned char)( 16 - ctx->left ); - for( i = ctx->left; i < 16; i++ ) + for ( i = ctx->left; i < 16; i++ ) ctx->buffer[i] = x; mbedtls_md2_process( ctx ); @@ -219,34 +214,48 @@ void mbedtls_md2( const unsigned char *input, size_t ilen, unsigned char output[ /* * RFC 1319 test vectors */ -static const char md2_test_str[7][81] = -{ +static const char md2_test_str[7][81] = { { "" }, { "a" }, { "abc" }, { "message digest" }, { "abcdefghijklmnopqrstuvwxyz" }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } + { + "12345678901234567890123456789012345678901234567890123456789012" \ + "345678901234567890" + } }; -static const unsigned char md2_test_sum[7][16] = -{ - { 0x83, 0x50, 0xE5, 0xA3, 0xE2, 0x4C, 0x15, 0x3D, - 0xF2, 0x27, 0x5C, 0x9F, 0x80, 0x69, 0x27, 0x73 }, - { 0x32, 0xEC, 0x01, 0xEC, 0x4A, 0x6D, 0xAC, 0x72, - 0xC0, 0xAB, 0x96, 0xFB, 0x34, 0xC0, 0xB5, 0xD1 }, - { 0xDA, 0x85, 0x3B, 0x0D, 0x3F, 0x88, 0xD9, 0x9B, - 0x30, 0x28, 0x3A, 0x69, 0xE6, 0xDE, 0xD6, 0xBB }, - { 0xAB, 0x4F, 0x49, 0x6B, 0xFB, 0x2A, 0x53, 0x0B, - 0x21, 0x9F, 0xF3, 0x30, 0x31, 0xFE, 0x06, 0xB0 }, - { 0x4E, 0x8D, 0xDF, 0xF3, 0x65, 0x02, 0x92, 0xAB, - 0x5A, 0x41, 0x08, 0xC3, 0xAA, 0x47, 0x94, 0x0B }, - { 0xDA, 0x33, 0xDE, 0xF2, 0xA4, 0x2D, 0xF1, 0x39, - 0x75, 0x35, 0x28, 0x46, 0xC3, 0x03, 0x38, 0xCD }, - { 0xD5, 0x97, 0x6F, 0x79, 0xD8, 0x3D, 0x3A, 0x0D, - 0xC9, 0x80, 0x6C, 0x3C, 0x66, 0xF3, 0xEF, 0xD8 } +static const unsigned char md2_test_sum[7][16] = { + { + 0x83, 0x50, 0xE5, 0xA3, 0xE2, 0x4C, 0x15, 0x3D, + 0xF2, 0x27, 0x5C, 0x9F, 0x80, 0x69, 0x27, 0x73 + }, + { + 0x32, 0xEC, 0x01, 0xEC, 0x4A, 0x6D, 0xAC, 0x72, + 0xC0, 0xAB, 0x96, 0xFB, 0x34, 0xC0, 0xB5, 0xD1 + }, + { + 0xDA, 0x85, 0x3B, 0x0D, 0x3F, 0x88, 0xD9, 0x9B, + 0x30, 0x28, 0x3A, 0x69, 0xE6, 0xDE, 0xD6, 0xBB + }, + { + 0xAB, 0x4F, 0x49, 0x6B, 0xFB, 0x2A, 0x53, 0x0B, + 0x21, 0x9F, 0xF3, 0x30, 0x31, 0xFE, 0x06, 0xB0 + }, + { + 0x4E, 0x8D, 0xDF, 0xF3, 0x65, 0x02, 0x92, 0xAB, + 0x5A, 0x41, 0x08, 0xC3, 0xAA, 0x47, 0x94, 0x0B + }, + { + 0xDA, 0x33, 0xDE, 0xF2, 0xA4, 0x2D, 0xF1, 0x39, + 0x75, 0x35, 0x28, 0x46, 0xC3, 0x03, 0x38, 0xCD + }, + { + 0xD5, 0x97, 0x6F, 0x79, 0xD8, 0x3D, 0x3A, 0x0D, + 0xC9, 0x80, 0x6C, 0x3C, 0x66, 0xF3, 0xEF, 0xD8 + } }; /* @@ -257,30 +266,28 @@ int mbedtls_md2_self_test( int verbose ) int i; unsigned char md2sum[16]; - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 7; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " MD2 test #%d: ", i + 1 ); mbedtls_md2( (unsigned char *) md2_test_str[i], - strlen( md2_test_str[i] ), md2sum ); + strlen( md2_test_str[i] ), md2sum ); - if( memcmp( md2sum, md2_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( md2sum, md2_test_sum[i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md4.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md4.c index 11a77e3a..1e6da388 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md4.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md4.c @@ -49,8 +49,10 @@ #if !defined(MBEDTLS_MD4_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -83,7 +85,7 @@ void mbedtls_md4_init( mbedtls_md4_context *ctx ) void mbedtls_md4_free( mbedtls_md4_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_md4_context ) ); @@ -222,7 +224,7 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -231,11 +233,10 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), (void *) input, fill ); mbedtls_md4_process( ctx, ctx->buffer ); @@ -244,23 +245,20 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_md4_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), (void *) input, ilen ); } } -static const unsigned char md4_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char md4_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -276,7 +274,7 @@ void mbedtls_md4_finish( mbedtls_md4_context *ctx, unsigned char output[16] ) unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_LE( low, msglen, 0 ); @@ -315,34 +313,48 @@ void mbedtls_md4( const unsigned char *input, size_t ilen, unsigned char output[ /* * RFC 1320 test vectors */ -static const char md4_test_str[7][81] = -{ +static const char md4_test_str[7][81] = { { "" }, { "a" }, { "abc" }, { "message digest" }, { "abcdefghijklmnopqrstuvwxyz" }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } + { + "12345678901234567890123456789012345678901234567890123456789012" \ + "345678901234567890" + } }; -static const unsigned char md4_test_sum[7][16] = -{ - { 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, - 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 }, - { 0xBD, 0xE5, 0x2C, 0xB3, 0x1D, 0xE3, 0x3E, 0x46, - 0x24, 0x5E, 0x05, 0xFB, 0xDB, 0xD6, 0xFB, 0x24 }, - { 0xA4, 0x48, 0x01, 0x7A, 0xAF, 0x21, 0xD8, 0x52, - 0x5F, 0xC1, 0x0A, 0xE8, 0x7A, 0xA6, 0x72, 0x9D }, - { 0xD9, 0x13, 0x0A, 0x81, 0x64, 0x54, 0x9F, 0xE8, - 0x18, 0x87, 0x48, 0x06, 0xE1, 0xC7, 0x01, 0x4B }, - { 0xD7, 0x9E, 0x1C, 0x30, 0x8A, 0xA5, 0xBB, 0xCD, - 0xEE, 0xA8, 0xED, 0x63, 0xDF, 0x41, 0x2D, 0xA9 }, - { 0x04, 0x3F, 0x85, 0x82, 0xF2, 0x41, 0xDB, 0x35, - 0x1C, 0xE6, 0x27, 0xE1, 0x53, 0xE7, 0xF0, 0xE4 }, - { 0xE3, 0x3B, 0x4D, 0xDC, 0x9C, 0x38, 0xF2, 0x19, - 0x9C, 0x3E, 0x7B, 0x16, 0x4F, 0xCC, 0x05, 0x36 } +static const unsigned char md4_test_sum[7][16] = { + { + 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, + 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 + }, + { + 0xBD, 0xE5, 0x2C, 0xB3, 0x1D, 0xE3, 0x3E, 0x46, + 0x24, 0x5E, 0x05, 0xFB, 0xDB, 0xD6, 0xFB, 0x24 + }, + { + 0xA4, 0x48, 0x01, 0x7A, 0xAF, 0x21, 0xD8, 0x52, + 0x5F, 0xC1, 0x0A, 0xE8, 0x7A, 0xA6, 0x72, 0x9D + }, + { + 0xD9, 0x13, 0x0A, 0x81, 0x64, 0x54, 0x9F, 0xE8, + 0x18, 0x87, 0x48, 0x06, 0xE1, 0xC7, 0x01, 0x4B + }, + { + 0xD7, 0x9E, 0x1C, 0x30, 0x8A, 0xA5, 0xBB, 0xCD, + 0xEE, 0xA8, 0xED, 0x63, 0xDF, 0x41, 0x2D, 0xA9 + }, + { + 0x04, 0x3F, 0x85, 0x82, 0xF2, 0x41, 0xDB, 0x35, + 0x1C, 0xE6, 0x27, 0xE1, 0x53, 0xE7, 0xF0, 0xE4 + }, + { + 0xE3, 0x3B, 0x4D, 0xDC, 0x9C, 0x38, 0xF2, 0x19, + 0x9C, 0x3E, 0x7B, 0x16, 0x4F, 0xCC, 0x05, 0x36 + } }; /* @@ -353,30 +365,28 @@ int mbedtls_md4_self_test( int verbose ) int i; unsigned char md4sum[16]; - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 7; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " MD4 test #%d: ", i + 1 ); mbedtls_md4( (unsigned char *) md4_test_str[i], - strlen( md4_test_str[i] ), md4sum ); + strlen( md4_test_str[i] ), md4sum ); - if( memcmp( md4sum, md4_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( md4sum, md4_test_sum[i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md5.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md5.c index 5d972dc9..2bf4f5ad 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md5.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md5.c @@ -48,8 +48,10 @@ #if !defined(MBEDTLS_MD5_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -82,7 +84,7 @@ void mbedtls_md5_init( mbedtls_md5_context *ctx ) void mbedtls_md5_free( mbedtls_md5_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_md5_context ) ); @@ -241,7 +243,7 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -250,11 +252,10 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_md5_process( ctx, ctx->buffer ); input += fill; @@ -262,22 +263,19 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_md5_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), input, ilen ); } } -static const unsigned char md5_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char md5_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -293,7 +291,7 @@ void mbedtls_md5_finish( mbedtls_md5_context *ctx, unsigned char output[16] ) unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_LE( low, msglen, 0 ); @@ -331,39 +329,52 @@ void mbedtls_md5( const unsigned char *input, size_t ilen, unsigned char output[ /* * RFC 1321 test vectors */ -static const unsigned char md5_test_buf[7][81] = -{ +static const unsigned char md5_test_buf[7][81] = { { "" }, { "a" }, { "abc" }, { "message digest" }, { "abcdefghijklmnopqrstuvwxyz" }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } + { + "12345678901234567890123456789012345678901234567890123456789012" \ + "345678901234567890" + } }; -static const int md5_test_buflen[7] = -{ +static const int md5_test_buflen[7] = { 0, 1, 3, 14, 26, 62, 80 }; -static const unsigned char md5_test_sum[7][16] = -{ - { 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, - 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E }, - { 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, - 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 }, - { 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, - 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 }, - { 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, - 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 }, - { 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, - 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B }, - { 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, - 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F }, - { 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, - 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A } +static const unsigned char md5_test_sum[7][16] = { + { + 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, + 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E + }, + { + 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, + 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 + }, + { + 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, + 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 + }, + { + 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, + 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 + }, + { + 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, + 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B + }, + { + 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, + 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F + }, + { + 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, + 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A + } }; /* @@ -374,29 +385,27 @@ int mbedtls_md5_self_test( int verbose ) int i; unsigned char md5sum[16]; - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 7; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " MD5 test #%d: ", i + 1 ); mbedtls_md5( md5_test_buf[i], md5_test_buflen[i], md5sum ); - if( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md_wrap.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md_wrap.c index 2cfcae20..839779e0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md_wrap.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/md_wrap.c @@ -91,10 +91,10 @@ static void *md2_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md2_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_md2_init( (mbedtls_md2_context *) ctx ); - return( ctx ); + return ( ctx ); } static void md2_ctx_free( void *ctx ) @@ -106,7 +106,7 @@ static void md2_ctx_free( void *ctx ) static void md2_clone_wrap( void *dst, const void *src ) { mbedtls_md2_clone( (mbedtls_md2_context *) dst, - (const mbedtls_md2_context *) src ); + (const mbedtls_md2_context *) src ); } static void md2_process_wrap( void *ctx, const unsigned char *data ) @@ -155,10 +155,10 @@ static void *md4_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md4_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_md4_init( (mbedtls_md4_context *) ctx ); - return( ctx ); + return ( ctx ); } static void md4_ctx_free( void *ctx ) @@ -170,7 +170,7 @@ static void md4_ctx_free( void *ctx ) static void md4_clone_wrap( void *dst, const void *src ) { mbedtls_md4_clone( (mbedtls_md4_context *) dst, - (const mbedtls_md4_context *) src ); + (const mbedtls_md4_context *) src ); } static void md4_process_wrap( void *ctx, const unsigned char *data ) @@ -217,10 +217,10 @@ static void *md5_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md5_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_md5_init( (mbedtls_md5_context *) ctx ); - return( ctx ); + return ( ctx ); } static void md5_ctx_free( void *ctx ) @@ -232,7 +232,7 @@ static void md5_ctx_free( void *ctx ) static void md5_clone_wrap( void *dst, const void *src ) { mbedtls_md5_clone( (mbedtls_md5_context *) dst, - (const mbedtls_md5_context *) src ); + (const mbedtls_md5_context *) src ); } static void md5_process_wrap( void *ctx, const unsigned char *data ) @@ -279,10 +279,10 @@ static void *ripemd160_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ripemd160_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ripemd160_init( (mbedtls_ripemd160_context *) ctx ); - return( ctx ); + return ( ctx ); } static void ripemd160_ctx_free( void *ctx ) @@ -294,7 +294,7 @@ static void ripemd160_ctx_free( void *ctx ) static void ripemd160_clone_wrap( void *dst, const void *src ) { mbedtls_ripemd160_clone( (mbedtls_ripemd160_context *) dst, - (const mbedtls_ripemd160_context *) src ); + (const mbedtls_ripemd160_context *) src ); } static void ripemd160_process_wrap( void *ctx, const unsigned char *data ) @@ -341,16 +341,16 @@ static void *sha1_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha1_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_sha1_init( (mbedtls_sha1_context *) ctx ); - return( ctx ); + return ( ctx ); } static void sha1_clone_wrap( void *dst, const void *src ) { mbedtls_sha1_clone( (mbedtls_sha1_context *) dst, - (const mbedtls_sha1_context *) src ); + (const mbedtls_sha1_context *) src ); } static void sha1_ctx_free( void *ctx ) @@ -403,7 +403,7 @@ static void sha224_finish_wrap( void *ctx, unsigned char *output ) } static void sha224_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha256( input, ilen, output, 1 ); } @@ -412,10 +412,10 @@ static void *sha224_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha256_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_sha256_init( (mbedtls_sha256_context *) ctx ); - return( ctx ); + return ( ctx ); } static void sha224_ctx_free( void *ctx ) @@ -427,7 +427,7 @@ static void sha224_ctx_free( void *ctx ) static void sha224_clone_wrap( void *dst, const void *src ) { mbedtls_sha256_clone( (mbedtls_sha256_context *) dst, - (const mbedtls_sha256_context *) src ); + (const mbedtls_sha256_context *) src ); } static void sha224_process_wrap( void *ctx, const unsigned char *data ) @@ -456,7 +456,7 @@ static void sha256_starts_wrap( void *ctx ) } static void sha256_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha256( input, ilen, output, 0 ); } @@ -497,7 +497,7 @@ static void sha384_finish_wrap( void *ctx, unsigned char *output ) } static void sha384_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha512( input, ilen, output, 1 ); } @@ -506,10 +506,10 @@ static void *sha384_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha512_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_sha512_init( (mbedtls_sha512_context *) ctx ); - return( ctx ); + return ( ctx ); } static void sha384_ctx_free( void *ctx ) @@ -521,7 +521,7 @@ static void sha384_ctx_free( void *ctx ) static void sha384_clone_wrap( void *dst, const void *src ) { mbedtls_sha512_clone( (mbedtls_sha512_context *) dst, - (const mbedtls_sha512_context *) src ); + (const mbedtls_sha512_context *) src ); } static void sha384_process_wrap( void *ctx, const unsigned char *data ) @@ -550,7 +550,7 @@ static void sha512_starts_wrap( void *ctx ) } static void sha512_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha512( input, ilen, output, 0 ); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c index 545d5a2c..47796cd2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c @@ -43,8 +43,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #define MAGIC1 0xFF00AA55 @@ -52,8 +54,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { #define MAX_BT 20 typedef struct _memory_header memory_header; -struct _memory_header -{ +struct _memory_header { size_t magic1; size_t size; size_t alloc; @@ -68,8 +69,7 @@ struct _memory_header size_t magic2; }; -typedef struct -{ +typedef struct { unsigned char *buf; size_t len; memory_header *first; @@ -99,15 +99,15 @@ static void debug_header( memory_header *hdr ) #endif mbedtls_fprintf( stderr, "HDR: PTR(%10zu), PREV(%10zu), NEXT(%10zu), " - "ALLOC(%zu), SIZE(%10zu)\n", - (size_t) hdr, (size_t) hdr->prev, (size_t) hdr->next, - hdr->alloc, hdr->size ); + "ALLOC(%zu), SIZE(%10zu)\n", + (size_t) hdr, (size_t) hdr->prev, (size_t) hdr->next, + hdr->alloc, hdr->size ); mbedtls_fprintf( stderr, " FPREV(%10zu), FNEXT(%10zu)\n", - (size_t) hdr->prev_free, (size_t) hdr->next_free ); + (size_t) hdr->prev_free, (size_t) hdr->next_free ); #if defined(MBEDTLS_MEMORY_BACKTRACE) mbedtls_fprintf( stderr, "TRACE: \n" ); - for( i = 0; i < hdr->trace_count; i++ ) + for ( i = 0; i < hdr->trace_count; i++ ) mbedtls_fprintf( stderr, "%s\n", hdr->trace[i] ); mbedtls_fprintf( stderr, "\n" ); #endif @@ -118,8 +118,7 @@ static void debug_chain() memory_header *cur = heap.first; mbedtls_fprintf( stderr, "\nBlock list\n" ); - while( cur != NULL ) - { + while ( cur != NULL ) { debug_header( cur ); cur = cur->next; } @@ -127,8 +126,7 @@ static void debug_chain() mbedtls_fprintf( stderr, "Free list\n" ); cur = heap.first_free; - while( cur != NULL ) - { + while ( cur != NULL ) { debug_header( cur ); cur = cur->next_free; } @@ -137,96 +135,86 @@ static void debug_chain() static int verify_header( memory_header *hdr ) { - if( hdr->magic1 != MAGIC1 ) - { + if ( hdr->magic1 != MAGIC1 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: MAGIC1 mismatch\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->magic2 != MAGIC2 ) - { + if ( hdr->magic2 != MAGIC2 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: MAGIC2 mismatch\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->alloc > 1 ) - { + if ( hdr->alloc > 1 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: alloc has illegal value\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->prev != NULL && hdr->prev == hdr->next ) - { + if ( hdr->prev != NULL && hdr->prev == hdr->next ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: prev == next\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->prev_free != NULL && hdr->prev_free == hdr->next_free ) - { + if ( hdr->prev_free != NULL && hdr->prev_free == hdr->next_free ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: prev_free == next_free\n" ); #endif - return( 1 ); + return ( 1 ); } - return( 0 ); + return ( 0 ); } static int verify_chain() { memory_header *prv = heap.first, *cur = heap.first->next; - if( verify_header( heap.first ) != 0 ) - { + if ( verify_header( heap.first ) != 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification of first header " - "failed\n" ); + "failed\n" ); #endif - return( 1 ); + return ( 1 ); } - if( heap.first->prev != NULL ) - { + if ( heap.first->prev != NULL ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification failed: " - "first->prev != NULL\n" ); + "first->prev != NULL\n" ); #endif - return( 1 ); + return ( 1 ); } - while( cur != NULL ) - { - if( verify_header( cur ) != 0 ) - { + while ( cur != NULL ) { + if ( verify_header( cur ) != 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification of header " - "failed\n" ); + "failed\n" ); #endif - return( 1 ); + return ( 1 ); } - if( cur->prev != prv ) - { + if ( cur->prev != prv ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification failed: " - "cur->prev != prv\n" ); + "cur->prev != prv\n" ); #endif - return( 1 ); + return ( 1 ); } prv = cur; cur = cur->next; } - return( 0 ); + return ( 0 ); } static void *buffer_alloc_calloc( size_t n, size_t size ) @@ -240,38 +228,35 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) size_t trace_cnt; #endif - if( heap.buf == NULL || heap.first == NULL ) - return( NULL ); + if ( heap.buf == NULL || heap.first == NULL ) + return ( NULL ); original_len = len = n * size; - if( n != 0 && len / n != size ) - return( NULL ); + if ( n != 0 && len / n != size ) + return ( NULL ); - if( len % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) - { + if ( len % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) { len -= len % MBEDTLS_MEMORY_ALIGN_MULTIPLE; len += MBEDTLS_MEMORY_ALIGN_MULTIPLE; } // Find block that fits // - while( cur != NULL ) - { - if( cur->size >= len ) + while ( cur != NULL ) { + if ( cur->size >= len ) break; cur = cur->next_free; } - if( cur == NULL ) - return( NULL ); + if ( cur == NULL ) + return ( NULL ); - if( cur->alloc != 0 ) - { + if ( cur->alloc != 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: block in free_list but allocated " - "data\n" ); + "data\n" ); #endif mbedtls_exit( 1 ); } @@ -282,19 +267,18 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) // Found location, split block if > memory_header + 4 room left // - if( cur->size - len < sizeof(memory_header) + - MBEDTLS_MEMORY_ALIGN_MULTIPLE ) - { + if ( cur->size - len < sizeof(memory_header) + + MBEDTLS_MEMORY_ALIGN_MULTIPLE ) { cur->alloc = 1; // Remove from free_list // - if( cur->prev_free != NULL ) + if ( cur->prev_free != NULL ) cur->prev_free->next_free = cur->next_free; else heap.first_free = cur->next_free; - if( cur->next_free != NULL ) + if ( cur->next_free != NULL ) cur->next_free->prev_free = cur->prev_free; cur->prev_free = NULL; @@ -302,7 +286,7 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) #if defined(MBEDTLS_MEMORY_DEBUG) heap.total_used += cur->size; - if( heap.total_used > heap.maximum_used ) + if ( heap.total_used > heap.maximum_used ) heap.maximum_used = heap.total_used; #endif #if defined(MBEDTLS_MEMORY_BACKTRACE) @@ -311,13 +295,13 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) cur->trace_count = trace_cnt; #endif - if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) + if ( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) mbedtls_exit( 1 ); ret = (unsigned char *) cur + sizeof( memory_header ); memset( ret, 0, original_len ); - return( ret ); + return ( ret ); } p = ( (unsigned char *) cur ) + sizeof(memory_header) + len; @@ -334,19 +318,19 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) new->magic1 = MAGIC1; new->magic2 = MAGIC2; - if( new->next != NULL ) + if ( new->next != NULL ) new->next->prev = new; // Replace cur with new in free_list // new->prev_free = cur->prev_free; new->next_free = cur->next_free; - if( new->prev_free != NULL ) + if ( new->prev_free != NULL ) new->prev_free->next_free = new; else heap.first_free = new; - if( new->next_free != NULL ) + if ( new->next_free != NULL ) new->next_free->prev_free = new; cur->alloc = 1; @@ -357,10 +341,10 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) #if defined(MBEDTLS_MEMORY_DEBUG) heap.header_count++; - if( heap.header_count > heap.maximum_header_count ) + if ( heap.header_count > heap.maximum_header_count ) heap.maximum_header_count = heap.header_count; heap.total_used += cur->size; - if( heap.total_used > heap.maximum_used ) + if ( heap.total_used > heap.maximum_used ) heap.maximum_used = heap.total_used; #endif #if defined(MBEDTLS_MEMORY_BACKTRACE) @@ -369,13 +353,13 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) cur->trace_count = trace_cnt; #endif - if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) + if ( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) mbedtls_exit( 1 ); ret = (unsigned char *) cur + sizeof( memory_header ); memset( ret, 0, original_len ); - return( ret ); + return ( ret ); } static void buffer_alloc_free( void *ptr ) @@ -383,14 +367,13 @@ static void buffer_alloc_free( void *ptr ) memory_header *hdr, *old = NULL; unsigned char *p = (unsigned char *) ptr; - if( ptr == NULL || heap.buf == NULL || heap.first == NULL ) + if ( ptr == NULL || heap.buf == NULL || heap.first == NULL ) return; - if( p < heap.buf || p > heap.buf + heap.len ) - { + if ( p < heap.buf || p > heap.buf + heap.len ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: mbedtls_free() outside of managed " - "space\n" ); + "space\n" ); #endif mbedtls_exit( 1 ); } @@ -398,14 +381,13 @@ static void buffer_alloc_free( void *ptr ) p -= sizeof(memory_header); hdr = (memory_header *) p; - if( verify_header( hdr ) != 0 ) + if ( verify_header( hdr ) != 0 ) mbedtls_exit( 1 ); - if( hdr->alloc != 1 ) - { + if ( hdr->alloc != 1 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: mbedtls_free() on unallocated " - "data\n" ); + "data\n" ); #endif mbedtls_exit( 1 ); } @@ -425,8 +407,7 @@ static void buffer_alloc_free( void *ptr ) // Regroup with block before // - if( hdr->prev != NULL && hdr->prev->alloc == 0 ) - { + if ( hdr->prev != NULL && hdr->prev->alloc == 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) heap.header_count--; #endif @@ -435,7 +416,7 @@ static void buffer_alloc_free( void *ptr ) old = hdr; hdr = hdr->prev; - if( hdr->next != NULL ) + if ( hdr->next != NULL ) hdr->next->prev = hdr; memset( old, 0, sizeof(memory_header) ); @@ -443,8 +424,7 @@ static void buffer_alloc_free( void *ptr ) // Regroup with block after // - if( hdr->next != NULL && hdr->next->alloc == 0 ) - { + if ( hdr->next != NULL && hdr->next->alloc == 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) heap.header_count--; #endif @@ -452,29 +432,28 @@ static void buffer_alloc_free( void *ptr ) old = hdr->next; hdr->next = hdr->next->next; - if( hdr->prev_free != NULL || hdr->next_free != NULL ) - { - if( hdr->prev_free != NULL ) + if ( hdr->prev_free != NULL || hdr->next_free != NULL ) { + if ( hdr->prev_free != NULL ) hdr->prev_free->next_free = hdr->next_free; else heap.first_free = hdr->next_free; - if( hdr->next_free != NULL ) + if ( hdr->next_free != NULL ) hdr->next_free->prev_free = hdr->prev_free; } hdr->prev_free = old->prev_free; hdr->next_free = old->next_free; - if( hdr->prev_free != NULL ) + if ( hdr->prev_free != NULL ) hdr->prev_free->next_free = hdr; else heap.first_free = hdr; - if( hdr->next_free != NULL ) + if ( hdr->next_free != NULL ) hdr->next_free->prev_free = hdr; - if( hdr->next != NULL ) + if ( hdr->next != NULL ) hdr->next->prev = hdr; memset( old, 0, sizeof(memory_header) ); @@ -483,15 +462,14 @@ static void buffer_alloc_free( void *ptr ) // Prepend to free_list if we have not merged // (Does not have to stay in same order as prev / next list) // - if( old == NULL ) - { + if ( old == NULL ) { hdr->next_free = heap.first_free; - if( heap.first_free != NULL ) + if ( heap.first_free != NULL ) heap.first_free->prev_free = hdr; heap.first_free = hdr; } - if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_FREE ) && verify_chain() != 0 ) + if ( ( heap.verify & MBEDTLS_MEMORY_VERIFY_FREE ) && verify_chain() != 0 ) mbedtls_exit( 1 ); } @@ -509,18 +487,17 @@ int mbedtls_memory_buffer_alloc_verify() void mbedtls_memory_buffer_alloc_status() { mbedtls_fprintf( stderr, - "Current use: %zu blocks / %zu bytes, max: %zu blocks / " - "%zu bytes (total %zu bytes), alloc / free: %zu / %zu\n", - heap.header_count, heap.total_used, - heap.maximum_header_count, heap.maximum_used, - heap.maximum_header_count * sizeof( memory_header ) - + heap.maximum_used, - heap.alloc_count, heap.free_count ); + "Current use: %zu blocks / %zu bytes, max: %zu blocks / " + "%zu bytes (total %zu bytes), alloc / free: %zu / %zu\n", + heap.header_count, heap.total_used, + heap.maximum_header_count, heap.maximum_used, + heap.maximum_header_count * sizeof( memory_header ) + + heap.maximum_used, + heap.alloc_count, heap.free_count ); - if( heap.first->next == NULL ) + if ( heap.first->next == NULL ) mbedtls_fprintf( stderr, "All memory de-allocated in stack buffer\n" ); - else - { + else { mbedtls_fprintf( stderr, "Memory currently allocated:\n" ); debug_chain(); } @@ -549,19 +526,19 @@ void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks ) static void *buffer_alloc_calloc_mutexed( size_t n, size_t size ) { void *buf; - if( mbedtls_mutex_lock( &heap.mutex ) != 0 ) - return( NULL ); + if ( mbedtls_mutex_lock( &heap.mutex ) != 0 ) + return ( NULL ); buf = buffer_alloc_calloc( n, size ); - if( mbedtls_mutex_unlock( &heap.mutex ) ) - return( NULL ); - return( buf ); + if ( mbedtls_mutex_unlock( &heap.mutex ) ) + return ( NULL ); + return ( buf ); } static void buffer_alloc_free_mutexed( void *ptr ) { /* We have to good option here, but corrupting the heap seems * worse than loosing memory. */ - if( mbedtls_mutex_lock( &heap.mutex ) ) + if ( mbedtls_mutex_lock( &heap.mutex ) ) return; buffer_alloc_free( ptr ); (void) mbedtls_mutex_unlock( &heap.mutex ); @@ -576,18 +553,17 @@ void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len ) #if defined(MBEDTLS_THREADING_C) mbedtls_mutex_init( &heap.mutex ); mbedtls_platform_set_calloc_free( buffer_alloc_calloc_mutexed, - buffer_alloc_free_mutexed ); + buffer_alloc_free_mutexed ); #else mbedtls_platform_set_calloc_free( buffer_alloc_calloc, buffer_alloc_free ); #endif - if( (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) - { + if ( (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) { /* Adjust len first since buf is used in the computation */ len -= MBEDTLS_MEMORY_ALIGN_MULTIPLE - - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; + - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; buf += MBEDTLS_MEMORY_ALIGN_MULTIPLE - - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; + - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; } heap.buf = buf; @@ -611,28 +587,27 @@ void mbedtls_memory_buffer_alloc_free() #if defined(MBEDTLS_SELF_TEST) static int check_pointer( void *p ) { - if( p == NULL ) - return( -1 ); + if ( p == NULL ) + return ( -1 ); - if( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 ) - return( -1 ); + if ( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } static int check_all_free( ) { - if( + if ( #if defined(MBEDTLS_MEMORY_DEBUG) heap.total_used != 0 || #endif heap.first != heap.first_free || - (void *) heap.first != (void *) heap.buf ) - { - return( -1 ); + (void *) heap.first != (void *) heap.buf ) { + return ( -1 ); } - return( 0 ); + return ( 0 ); } #define TEST_ASSERT( condition ) \ @@ -651,7 +626,7 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) unsigned char *p, *q, *r, *end; int ret = 0; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MBA test #1 (basic alloc-free cycle): " ); mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); @@ -675,10 +650,10 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) mbedtls_memory_buffer_alloc_free( ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MBA test #2 (buf not aligned): " ); mbedtls_memory_buffer_alloc_init( buf + 1, sizeof( buf ) - 1 ); @@ -701,10 +676,10 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) mbedtls_memory_buffer_alloc_free( ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MBA test #3 (full): " ); mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); @@ -732,13 +707,13 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) mbedtls_memory_buffer_alloc_free( ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: mbedtls_memory_buffer_alloc_free( ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/net_sockets.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/net_sockets.c index cc06cbfa..f894a879 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/net_sockets.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/net_sockets.c @@ -107,10 +107,9 @@ static int net_prepare( void ) !defined(EFI32) WSADATA wsaData; - if( wsa_init_done == 0 ) - { - if( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 ) - return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + if ( wsa_init_done == 0 ) { + if ( WSAStartup( MAKEWORD(2, 0), &wsaData ) != 0 ) + return ( MBEDTLS_ERR_NET_SOCKET_FAILED ); wsa_init_done = 1; } @@ -119,7 +118,7 @@ static int net_prepare( void ) signal( SIGPIPE, SIG_IGN ); #endif #endif - return( 0 ); + return ( 0 ); } /* @@ -138,8 +137,8 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char int ret; struct addrinfo hints, *addr_list, *cur; - if( ( ret = net_prepare() ) != 0 ) - return( ret ); + if ( ( ret = net_prepare() ) != 0 ) + return ( ret ); /* Do name resolution with both IPv6 and IPv4 */ memset( &hints, 0, sizeof( hints ) ); @@ -147,23 +146,20 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - if( getaddrinfo( host, port, &hints, &addr_list ) != 0 ) - return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + if ( getaddrinfo( host, port, &hints, &addr_list ) != 0 ) + return ( MBEDTLS_ERR_NET_UNKNOWN_HOST ); /* Try the sockaddrs until a connection succeeds */ ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { + for ( cur = addr_list; cur != NULL; cur = cur->ai_next ) { ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( ctx->fd < 0 ) - { + cur->ai_protocol ); + if ( ctx->fd < 0 ) { ret = MBEDTLS_ERR_NET_SOCKET_FAILED; continue; } - if( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) - { + if ( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) { ret = 0; break; } @@ -174,7 +170,7 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char freeaddrinfo( addr_list ); - return( ret ); + return ( ret ); } /* @@ -185,53 +181,47 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char int n, ret; struct addrinfo hints, *addr_list, *cur; - if( ( ret = net_prepare() ) != 0 ) - return( ret ); + if ( ( ret = net_prepare() ) != 0 ) + return ( ret ); /* Bind to IPv6 and/or IPv4, but only in the desired protocol */ memset( &hints, 0, sizeof( hints ) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - if( bind_ip == NULL ) + if ( bind_ip == NULL ) hints.ai_flags = AI_PASSIVE; - if( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) - return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + if ( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) + return ( MBEDTLS_ERR_NET_UNKNOWN_HOST ); /* Try the sockaddrs until a binding succeeds */ ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { + for ( cur = addr_list; cur != NULL; cur = cur->ai_next ) { ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( ctx->fd < 0 ) - { + cur->ai_protocol ); + if ( ctx->fd < 0 ) { ret = MBEDTLS_ERR_NET_SOCKET_FAILED; continue; } n = 1; - if( setsockopt( ctx->fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &n, sizeof( n ) ) != 0 ) - { + if ( setsockopt( ctx->fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &n, sizeof( n ) ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_SOCKET_FAILED; continue; } - if( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) - { + if ( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_BIND_FAILED; continue; } /* Listen only makes sense for TCP */ - if( proto == MBEDTLS_NET_PROTO_TCP ) - { - if( listen( ctx->fd, MBEDTLS_NET_LISTEN_BACKLOG ) != 0 ) - { + if ( proto == MBEDTLS_NET_PROTO_TCP ) { + if ( listen( ctx->fd, MBEDTLS_NET_LISTEN_BACKLOG ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_LISTEN_FAILED; continue; @@ -245,7 +235,7 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char freeaddrinfo( addr_list ); - return( ret ); + return ( ret ); } @@ -258,7 +248,7 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char static int net_would_block( const mbedtls_net_context *ctx ) { ((void) ctx); - return( WSAGetLastError() == WSAEWOULDBLOCK ); + return ( WSAGetLastError() == WSAEWOULDBLOCK ); } #else /* @@ -272,20 +262,19 @@ static int net_would_block( const mbedtls_net_context *ctx ) /* * Never return 'WOULD BLOCK' on a non-blocking socket */ - if( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) - return( 0 ); + if ( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) + return ( 0 ); - switch( errno ) - { + switch ( errno ) { #if defined EAGAIN case EAGAIN: #endif #if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN case EWOULDBLOCK: #endif - return( 1 ); + return ( 1 ); } - return( 0 ); + return ( 0 ); } #endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ @@ -311,100 +300,87 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, #endif /* Is this a TCP or UDP socket? */ - if( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, - (void *) &type, &type_len ) != 0 || - ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) - { - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + if ( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, + (void *) &type, &type_len ) != 0 || + ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) { + return ( MBEDTLS_ERR_NET_ACCEPT_FAILED ); } - if( type == SOCK_STREAM ) - { + if ( type == SOCK_STREAM ) { /* TCP: actual accept() */ ret = client_ctx->fd = (int) accept( bind_ctx->fd, - (struct sockaddr *) &client_addr, &n ); - } - else - { + (struct sockaddr *) &client_addr, &n ); + } else { /* UDP: wait for a message, but keep it in the queue */ char buf[1] = { 0 }; ret = (int) recvfrom( bind_ctx->fd, buf, sizeof( buf ), MSG_PEEK, - (struct sockaddr *) &client_addr, &n ); + (struct sockaddr *) &client_addr, &n ); #if defined(_WIN32) - if( ret == SOCKET_ERROR && - WSAGetLastError() == WSAEMSGSIZE ) - { + if ( ret == SOCKET_ERROR && + WSAGetLastError() == WSAEMSGSIZE ) { /* We know buf is too small, thanks, just peeking here */ ret = 0; } #endif } - if( ret < 0 ) - { - if( net_would_block( bind_ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ret < 0 ) { + if ( net_would_block( bind_ctx ) != 0 ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + return ( MBEDTLS_ERR_NET_ACCEPT_FAILED ); } /* UDP: hijack the listening socket to communicate with the client, * then bind a new socket to accept new connections */ - if( type != SOCK_STREAM ) - { + if ( type != SOCK_STREAM ) { struct sockaddr_storage local_addr; int one = 1; - if( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + if ( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) + return ( MBEDTLS_ERR_NET_ACCEPT_FAILED ); client_ctx->fd = bind_ctx->fd; bind_ctx->fd = -1; /* In case we exit early */ n = sizeof( struct sockaddr_storage ); - if( getsockname( client_ctx->fd, - (struct sockaddr *) &local_addr, &n ) != 0 || - ( bind_ctx->fd = (int) socket( local_addr.ss_family, - SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || - setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &one, sizeof( one ) ) != 0 ) - { - return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + if ( getsockname( client_ctx->fd, + (struct sockaddr *) &local_addr, &n ) != 0 || + ( bind_ctx->fd = (int) socket( local_addr.ss_family, + SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || + setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &one, sizeof( one ) ) != 0 ) { + return ( MBEDTLS_ERR_NET_SOCKET_FAILED ); } - if( bind( bind_ctx->fd, (struct sockaddr *) &local_addr, n ) != 0 ) - { - return( MBEDTLS_ERR_NET_BIND_FAILED ); + if ( bind( bind_ctx->fd, (struct sockaddr *) &local_addr, n ) != 0 ) { + return ( MBEDTLS_ERR_NET_BIND_FAILED ); } } - if( client_ip != NULL ) - { - if( client_addr.ss_family == AF_INET ) - { + if ( client_ip != NULL ) { + if ( client_addr.ss_family == AF_INET ) { struct sockaddr_in *addr4 = (struct sockaddr_in *) &client_addr; *ip_len = sizeof( addr4->sin_addr.s_addr ); - if( buf_size < *ip_len ) - return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); + if ( buf_size < *ip_len ) + return ( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); memcpy( client_ip, &addr4->sin_addr.s_addr, *ip_len ); - } - else - { + } else { struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) &client_addr; *ip_len = sizeof( addr6->sin6_addr.s6_addr ); - if( buf_size < *ip_len ) - return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); + if ( buf_size < *ip_len ) + return ( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); memcpy( client_ip, &addr6->sin6_addr.s6_addr, *ip_len); } } - return( 0 ); + return ( 0 ); } /* @@ -415,9 +391,9 @@ int mbedtls_net_set_block( mbedtls_net_context *ctx ) #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) u_long n = 0; - return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); + return ( ioctlsocket( ctx->fd, FIONBIO, &n ) ); #else - return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) & ~O_NONBLOCK ) ); + return ( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) & ~O_NONBLOCK ) ); #endif } @@ -426,9 +402,9 @@ int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ) #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) u_long n = 1; - return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); + return ( ioctlsocket( ctx->fd, FIONBIO, &n ) ); #else - return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) | O_NONBLOCK ) ); + return ( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) | O_NONBLOCK ) ); #endif } @@ -460,47 +436,46 @@ int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ) int ret; int fd = ((mbedtls_net_context *) ctx)->fd; - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + if ( fd < 0 ) + return ( MBEDTLS_ERR_NET_INVALID_CONTEXT ); ret = (int) read( fd, buf, len ); - if( ret < 0 ) - { - if( net_would_block( ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ret < 0 ) { + if ( net_would_block( ctx ) != 0 ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( WSAGetLastError() == WSAECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); #else - if( errno == EPIPE || errno == ECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( errno == EPIPE || errno == ECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( errno == EINTR ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_NET_RECV_FAILED ); + return ( MBEDTLS_ERR_NET_RECV_FAILED ); } - return( ret ); + return ( ret ); } /* * Read at most 'len' characters, blocking for at most 'timeout' ms */ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, - uint32_t timeout ) + uint32_t timeout ) { int ret; struct timeval tv; fd_set read_fds; int fd = ((mbedtls_net_context *) ctx)->fd; - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + if ( fd < 0 ) + return ( MBEDTLS_ERR_NET_INVALID_CONTEXT ); FD_ZERO( &read_fds ); FD_SET( fd, &read_fds ); @@ -511,25 +486,24 @@ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, ret = select( fd + 1, &read_fds, NULL, NULL, timeout == 0 ? NULL : &tv ); /* Zero fds ready means we timed out */ - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_TIMEOUT ); + if ( ret == 0 ) + return ( MBEDTLS_ERR_SSL_TIMEOUT ); - if( ret < 0 ) - { + if ( ret < 0 ) { #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) - if( WSAGetLastError() == WSAEINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( WSAGetLastError() == WSAEINTR ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #else - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( errno == EINTR ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_NET_RECV_FAILED ); + return ( MBEDTLS_ERR_NET_RECV_FAILED ); } /* This call will not block */ - return( mbedtls_net_recv( ctx, buf, len ) ); + return ( mbedtls_net_recv( ctx, buf, len ) ); } /* @@ -540,32 +514,31 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) int ret; int fd = ((mbedtls_net_context *) ctx)->fd; - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + if ( fd < 0 ) + return ( MBEDTLS_ERR_NET_INVALID_CONTEXT ); ret = (int) write( fd, buf, len ); - if( ret < 0 ) - { - if( net_would_block( ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_WRITE ); + if ( ret < 0 ) { + if ( net_would_block( ctx ) != 0 ) + return ( MBEDTLS_ERR_SSL_WANT_WRITE ); #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( WSAGetLastError() == WSAECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); #else - if( errno == EPIPE || errno == ECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( errno == EPIPE || errno == ECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_WRITE ); + if ( errno == EINTR ) + return ( MBEDTLS_ERR_SSL_WANT_WRITE ); #endif - return( MBEDTLS_ERR_NET_SEND_FAILED ); + return ( MBEDTLS_ERR_NET_SEND_FAILED ); } - return( ret ); + return ( ret ); } /* @@ -573,7 +546,7 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) */ void mbedtls_net_free( mbedtls_net_context *ctx ) { - if( ctx->fd == -1 ) + if ( ctx->fd == -1 ) return; shutdown( ctx->fd, 2 ); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/oid.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/oid.c index f13826ed..641f6222 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/oid.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/oid.c @@ -161,8 +161,7 @@ typedef struct { const char *short_name; } oid_x520_attr_t; -static const oid_x520_attr_t oid_x520_attr_type[] = -{ +static const oid_x520_attr_t oid_x520_attr_type[] = { { { ADD_LEN( MBEDTLS_OID_AT_CN ), "id-at-commonName", "Common Name" }, "CN", @@ -180,7 +179,7 @@ static const oid_x520_attr_t oid_x520_attr_type[] = "ST", }, { - { ADD_LEN( MBEDTLS_OID_AT_ORGANIZATION ),"id-at-organizationName", "Organization" }, + { ADD_LEN( MBEDTLS_OID_AT_ORGANIZATION ), "id-at-organizationName", "Organization" }, "O", }, { @@ -192,11 +191,11 @@ static const oid_x520_attr_t oid_x520_attr_type[] = "emailAddress", }, { - { ADD_LEN( MBEDTLS_OID_AT_SERIAL_NUMBER ),"id-at-serialNumber", "Serial number" }, + { ADD_LEN( MBEDTLS_OID_AT_SERIAL_NUMBER ), "id-at-serialNumber", "Serial number" }, "serialNumber", }, { - { ADD_LEN( MBEDTLS_OID_AT_POSTAL_ADDRESS ),"id-at-postalAddress", "Postal address" }, + { ADD_LEN( MBEDTLS_OID_AT_POSTAL_ADDRESS ), "id-at-postalAddress", "Postal address" }, "postalAddress", }, { @@ -224,7 +223,7 @@ static const oid_x520_attr_t oid_x520_attr_type[] = "title", }, { - { ADD_LEN( MBEDTLS_OID_AT_DN_QUALIFIER ),"id-at-dnQualifier", "Distinguished Name qualifier" }, + { ADD_LEN( MBEDTLS_OID_AT_DN_QUALIFIER ), "id-at-dnQualifier", "Distinguished Name qualifier" }, "dnQualifier", }, { @@ -256,8 +255,7 @@ typedef struct { int ext_type; } oid_x509_ext_t; -static const oid_x509_ext_t oid_x509_ext[] = -{ +static const oid_x509_ext_t oid_x509_ext[] = { { { ADD_LEN( MBEDTLS_OID_BASIC_CONSTRAINTS ), "id-ce-basicConstraints", "Basic Constraints" }, MBEDTLS_X509_EXT_BASIC_CONSTRAINTS, @@ -287,8 +285,7 @@ static const oid_x509_ext_t oid_x509_ext[] = FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext) FN_OID_GET_ATTR1(mbedtls_oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type) -static const mbedtls_oid_descriptor_t oid_ext_key_usage[] = -{ +static const mbedtls_oid_descriptor_t oid_ext_key_usage[] = { { ADD_LEN( MBEDTLS_OID_SERVER_AUTH ), "id-kp-serverAuth", "TLS Web Server Authentication" }, { ADD_LEN( MBEDTLS_OID_CLIENT_AUTH ), "id-kp-clientAuth", "TLS Web Client Authentication" }, { ADD_LEN( MBEDTLS_OID_CODE_SIGNING ), "id-kp-codeSigning", "Code Signing" }, @@ -312,8 +309,7 @@ typedef struct { mbedtls_pk_type_t pk_alg; } oid_sig_alg_t; -static const oid_sig_alg_t oid_sig_alg[] = -{ +static const oid_sig_alg_t oid_sig_alg[] = { #if defined(MBEDTLS_RSA_C) #if defined(MBEDTLS_MD2_C) { @@ -420,8 +416,7 @@ typedef struct { mbedtls_pk_type_t pk_alg; } oid_pk_alg_t; -static const oid_pk_alg_t oid_pk_alg[] = -{ +static const oid_pk_alg_t oid_pk_alg[] = { { { ADD_LEN( MBEDTLS_OID_PKCS1_RSA ), "rsaEncryption", "RSA" }, MBEDTLS_PK_RSA, @@ -453,8 +448,7 @@ typedef struct { mbedtls_ecp_group_id grp_id; } oid_ecp_grp_t; -static const oid_ecp_grp_t oid_ecp_grp[] = -{ +static const oid_ecp_grp_t oid_ecp_grp[] = { #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) { { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP192R1 ), "secp192r1", "secp192r1" }, @@ -505,19 +499,19 @@ static const oid_ecp_grp_t oid_ecp_grp[] = #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) { - { ADD_LEN( MBEDTLS_OID_EC_GRP_BP256R1 ), "brainpoolP256r1","brainpool256r1" }, + { ADD_LEN( MBEDTLS_OID_EC_GRP_BP256R1 ), "brainpoolP256r1", "brainpool256r1" }, MBEDTLS_ECP_DP_BP256R1, }, #endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) { - { ADD_LEN( MBEDTLS_OID_EC_GRP_BP384R1 ), "brainpoolP384r1","brainpool384r1" }, + { ADD_LEN( MBEDTLS_OID_EC_GRP_BP384R1 ), "brainpoolP384r1", "brainpool384r1" }, MBEDTLS_ECP_DP_BP384R1, }, #endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) { - { ADD_LEN( MBEDTLS_OID_EC_GRP_BP512R1 ), "brainpoolP512r1","brainpool512r1" }, + { ADD_LEN( MBEDTLS_OID_EC_GRP_BP512R1 ), "brainpoolP512r1", "brainpool512r1" }, MBEDTLS_ECP_DP_BP512R1, }, #endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ @@ -541,8 +535,7 @@ typedef struct { mbedtls_cipher_type_t cipher_alg; } oid_cipher_alg_t; -static const oid_cipher_alg_t oid_cipher_alg[] = -{ +static const oid_cipher_alg_t oid_cipher_alg[] = { { { ADD_LEN( MBEDTLS_OID_DES_CBC ), "desCBC", "DES-CBC" }, MBEDTLS_CIPHER_DES_CBC, @@ -570,8 +563,7 @@ typedef struct { mbedtls_md_type_t md_alg; } oid_md_alg_t; -static const oid_md_alg_t oid_md_alg[] = -{ +static const oid_md_alg_t oid_md_alg[] = { #if defined(MBEDTLS_MD2_C) { { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_MD2 ), "id-md2", "MD2" }, @@ -637,8 +629,7 @@ typedef struct { mbedtls_cipher_type_t cipher_alg; } oid_pkcs12_pbe_alg_t; -static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = -{ +static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = { { { ADD_LEN( MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC ), "pbeWithSHAAnd3-KeyTripleDES-CBC", "PBE with SHA1 and 3-Key 3DES" }, MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE3_CBC, @@ -668,7 +659,7 @@ FN_OID_GET_ATTR2(mbedtls_oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pb /* Return the x.y.z.... style numeric string for the given OID */ int mbedtls_oid_get_numeric_string( char *buf, size_t size, - const mbedtls_asn1_buf *oid ) + const mbedtls_asn1_buf *oid ) { int ret; size_t i, n; @@ -679,24 +670,21 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, n = size; /* First byte contains first two dots */ - if( oid->len > 0 ) - { + if ( oid->len > 0 ) { ret = mbedtls_snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 ); OID_SAFE_SNPRINTF; } value = 0; - for( i = 1; i < oid->len; i++ ) - { + for ( i = 1; i < oid->len; i++ ) { /* Prevent overflow in value. */ - if( ( ( value << 7 ) >> 7 ) != value ) - return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); + if ( ( ( value << 7 ) >> 7 ) != value ) + return ( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); value <<= 7; value += oid->p[i] & 0x7F; - if( !( oid->p[i] & 0x80 ) ) - { + if ( !( oid->p[i] & 0x80 ) ) { /* Last byte */ ret = mbedtls_snprintf( p, n, ".%d", value ); OID_SAFE_SNPRINTF; @@ -704,7 +692,7 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, } } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } #endif /* MBEDTLS_OID_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/padlock.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/padlock.c index b85ff9cd..8e701cf0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/padlock.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/padlock.c @@ -51,8 +51,7 @@ int mbedtls_padlock_has_support( int feature ) static int flags = -1; int ebx = 0, edx = 0; - if( flags == -1 ) - { + if ( flags == -1 ) { asm( "movl %%ebx, %0 \n\t" "movl $0xC0000000, %%eax \n\t" "cpuid \n\t" @@ -71,16 +70,16 @@ int mbedtls_padlock_has_support( int feature ) flags = edx; } - return( flags & feature ); + return ( flags & feature ); } /* * PadLock AES-ECB block en(de)cryption */ int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { int ebx = 0; uint32_t *rk; @@ -92,8 +91,8 @@ int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, blk = MBEDTLS_PADLOCK_ALIGN16( buf ); memcpy( blk, input, 16 ); - ctrl = blk + 4; - *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode^1 ) - 10 ) << 9 ); + ctrl = blk + 4; + *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode ^ 1 ) - 10 ) << 9 ); asm( "pushfl \n\t" "popfl \n\t" @@ -111,18 +110,18 @@ int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, memcpy( output, blk, 16 ); - return( 0 ); + return ( 0 ); } /* * PadLock AES-CBC buffer en(de)cryption */ int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int ebx = 0; size_t count; @@ -131,15 +130,15 @@ int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, uint32_t *ctrl; unsigned char buf[256]; - if( ( (long) input & 15 ) != 0 || - ( (long) output & 15 ) != 0 ) - return( MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED ); + if ( ( (long) input & 15 ) != 0 || + ( (long) output & 15 ) != 0 ) + return ( MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED ); rk = ctx->rk; iw = MBEDTLS_PADLOCK_ALIGN16( buf ); memcpy( iw, iv, 16 ); - ctrl = iw + 4; + ctrl = iw + 4; *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode ^ 1 ) - 10 ) << 9 ); count = ( length + 15 ) >> 4; @@ -157,12 +156,12 @@ int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, "movl %1, %%ebx \n\t" : "=m" (ebx) : "m" (ebx), "m" (count), "m" (ctrl), - "m" (rk), "m" (input), "m" (output), "m" (iw) + "m" (rk), "m" (input), "m" (output), "m" (iw) : "memory", "eax", "ecx", "edx", "esi", "edi" ); memcpy( iv, iw, 16 ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVE_X86 */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pem.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pem.c index 1ee3966e..9ac67421 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pem.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pem.c @@ -45,8 +45,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #if defined(MBEDTLS_PEM_PARSE_C) @@ -67,19 +69,19 @@ static int pem_get_iv( const unsigned char *s, unsigned char *iv, memset( iv, 0, iv_len ); - for( i = 0; i < iv_len * 2; i++, s++ ) - { - if( *s >= '0' && *s <= '9' ) j = *s - '0'; else - if( *s >= 'A' && *s <= 'F' ) j = *s - '7'; else - if( *s >= 'a' && *s <= 'f' ) j = *s - 'W'; else - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + for ( i = 0; i < iv_len * 2; i++, s++ ) { + if ( *s >= '0' && *s <= '9' ) j = *s - '0'; + else if ( *s >= 'A' && *s <= 'F' ) j = *s - '7'; + else if ( *s >= 'a' && *s <= 'f' ) j = *s - 'W'; + else + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); k = ( ( i & 1 ) != 0 ) ? j : j << 4; iv[i >> 1] = (unsigned char)( iv[i >> 1] | k ); } - return( 0 ); + return ( 0 ); } static void pem_pbkdf1( unsigned char *key, size_t keylen, @@ -100,8 +102,7 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen, mbedtls_md5_update( &md5_ctx, iv, 8 ); mbedtls_md5_finish( &md5_ctx, md5sum ); - if( keylen <= 16 ) - { + if ( keylen <= 16 ) { memcpy( key, md5sum, keylen ); mbedtls_md5_free( &md5_ctx ); @@ -121,7 +122,7 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen, mbedtls_md5_finish( &md5_ctx, md5sum ); use_len = 16; - if( keylen < 32 ) + if ( keylen < 32 ) use_len = keylen - 16; memcpy( key + 16, md5sum, use_len ); @@ -135,8 +136,8 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen, * Decrypt with DES-CBC, using PBKDF1 for key derivation */ static void pem_des_decrypt( unsigned char des_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) + unsigned char *buf, size_t buflen, + const unsigned char *pwd, size_t pwdlen ) { mbedtls_des_context des_ctx; unsigned char des_key[8]; @@ -147,7 +148,7 @@ static void pem_des_decrypt( unsigned char des_iv[8], mbedtls_des_setkey_dec( &des_ctx, des_key ); mbedtls_des_crypt_cbc( &des_ctx, MBEDTLS_DES_DECRYPT, buflen, - des_iv, buf, buf ); + des_iv, buf, buf ); mbedtls_des_free( &des_ctx ); mbedtls_zeroize( des_key, 8 ); @@ -157,8 +158,8 @@ static void pem_des_decrypt( unsigned char des_iv[8], * Decrypt with 3DES-CBC, using PBKDF1 for key derivation */ static void pem_des3_decrypt( unsigned char des3_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) + unsigned char *buf, size_t buflen, + const unsigned char *pwd, size_t pwdlen ) { mbedtls_des3_context des3_ctx; unsigned char des3_key[24]; @@ -169,7 +170,7 @@ static void pem_des3_decrypt( unsigned char des3_iv[8], mbedtls_des3_set3key_dec( &des3_ctx, des3_key ); mbedtls_des3_crypt_cbc( &des3_ctx, MBEDTLS_DES_DECRYPT, buflen, - des3_iv, buf, buf ); + des3_iv, buf, buf ); mbedtls_des3_free( &des3_ctx ); mbedtls_zeroize( des3_key, 24 ); @@ -181,8 +182,8 @@ static void pem_des3_decrypt( unsigned char des3_iv[8], * Decrypt with AES-XXX-CBC, using PBKDF1 for key derivation */ static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) + unsigned char *buf, size_t buflen, + const unsigned char *pwd, size_t pwdlen ) { mbedtls_aes_context aes_ctx; unsigned char aes_key[32]; @@ -193,7 +194,7 @@ static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, mbedtls_aes_setkey_dec( &aes_ctx, aes_key, keylen * 8 ); mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_DECRYPT, buflen, - aes_iv, buf, buf ); + aes_iv, buf, buf ); mbedtls_aes_free( &aes_ctx ); mbedtls_zeroize( aes_key, keylen ); @@ -204,8 +205,8 @@ static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const char *footer, - const unsigned char *data, const unsigned char *pwd, - size_t pwdlen, size_t *use_len ) + const unsigned char *data, const unsigned char *pwd, + size_t pwdlen, size_t *use_len ) { int ret, enc; size_t len; @@ -221,141 +222,133 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ - if( ctx == NULL ) - return( MBEDTLS_ERR_PEM_BAD_INPUT_DATA ); + if ( ctx == NULL ) + return ( MBEDTLS_ERR_PEM_BAD_INPUT_DATA ); s1 = (unsigned char *) strstr( (const char *) data, header ); - if( s1 == NULL ) - return( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); + if ( s1 == NULL ) + return ( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); s2 = (unsigned char *) strstr( (const char *) data, footer ); - if( s2 == NULL || s2 <= s1 ) - return( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); + if ( s2 == NULL || s2 <= s1 ) + return ( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); s1 += strlen( header ); - if( *s1 == ' ' ) s1++; - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); + if ( *s1 == ' ' ) s1++; + if ( *s1 == '\r' ) s1++; + if ( *s1 == '\n' ) s1++; + else return ( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); end = s2; end += strlen( footer ); - if( *end == ' ' ) end++; - if( *end == '\r' ) end++; - if( *end == '\n' ) end++; + if ( *end == ' ' ) end++; + if ( *end == '\r' ) end++; + if ( *end == '\n' ) end++; *use_len = end - data; enc = 0; - if( memcmp( s1, "Proc-Type: 4,ENCRYPTED", 22 ) == 0 ) - { + if ( memcmp( s1, "Proc-Type: 4,ENCRYPTED", 22 ) == 0 ) { #if defined(MBEDTLS_MD5_C) && defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) ) enc++; s1 += 22; - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( MBEDTLS_ERR_PEM_INVALID_DATA ); + if ( *s1 == '\r' ) s1++; + if ( *s1 == '\n' ) s1++; + else return ( MBEDTLS_ERR_PEM_INVALID_DATA ); #if defined(MBEDTLS_DES_C) - if( memcmp( s1, "DEK-Info: DES-EDE3-CBC,", 23 ) == 0 ) - { + if ( memcmp( s1, "DEK-Info: DES-EDE3-CBC,", 23 ) == 0 ) { enc_alg = MBEDTLS_CIPHER_DES_EDE3_CBC; s1 += 23; - if( pem_get_iv( s1, pem_iv, 8 ) != 0 ) - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + if ( pem_get_iv( s1, pem_iv, 8 ) != 0 ) + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); s1 += 16; - } - else if( memcmp( s1, "DEK-Info: DES-CBC,", 18 ) == 0 ) - { + } else if ( memcmp( s1, "DEK-Info: DES-CBC,", 18 ) == 0 ) { enc_alg = MBEDTLS_CIPHER_DES_CBC; s1 += 18; - if( pem_get_iv( s1, pem_iv, 8) != 0 ) - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + if ( pem_get_iv( s1, pem_iv, 8) != 0 ) + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); s1 += 16; } #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( memcmp( s1, "DEK-Info: AES-", 14 ) == 0 ) - { - if( memcmp( s1, "DEK-Info: AES-128-CBC,", 22 ) == 0 ) + if ( memcmp( s1, "DEK-Info: AES-", 14 ) == 0 ) { + if ( memcmp( s1, "DEK-Info: AES-128-CBC,", 22 ) == 0 ) enc_alg = MBEDTLS_CIPHER_AES_128_CBC; - else if( memcmp( s1, "DEK-Info: AES-192-CBC,", 22 ) == 0 ) + else if ( memcmp( s1, "DEK-Info: AES-192-CBC,", 22 ) == 0 ) enc_alg = MBEDTLS_CIPHER_AES_192_CBC; - else if( memcmp( s1, "DEK-Info: AES-256-CBC,", 22 ) == 0 ) + else if ( memcmp( s1, "DEK-Info: AES-256-CBC,", 22 ) == 0 ) enc_alg = MBEDTLS_CIPHER_AES_256_CBC; else - return( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); + return ( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); s1 += 22; - if( pem_get_iv( s1, pem_iv, 16 ) != 0 ) - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + if ( pem_get_iv( s1, pem_iv, 16 ) != 0 ) + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); s1 += 32; } #endif /* MBEDTLS_AES_C */ - if( enc_alg == MBEDTLS_CIPHER_NONE ) - return( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); + if ( enc_alg == MBEDTLS_CIPHER_NONE ) + return ( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( MBEDTLS_ERR_PEM_INVALID_DATA ); + if ( *s1 == '\r' ) s1++; + if ( *s1 == '\n' ) s1++; + else return ( MBEDTLS_ERR_PEM_INVALID_DATA ); #else - return( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ } - if( s1 == s2 ) - return( MBEDTLS_ERR_PEM_INVALID_DATA ); + if ( s1 == s2 ) + return ( MBEDTLS_ERR_PEM_INVALID_DATA ); ret = mbedtls_base64_decode( NULL, 0, &len, s1, s2 - s1 ); - if( ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER ) - return( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); + if ( ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER ) + return ( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); - if( ( buf = mbedtls_calloc( 1, len ) ) == NULL ) - return( MBEDTLS_ERR_PEM_ALLOC_FAILED ); + if ( ( buf = mbedtls_calloc( 1, len ) ) == NULL ) + return ( MBEDTLS_ERR_PEM_ALLOC_FAILED ); - if( ( ret = mbedtls_base64_decode( buf, len, &len, s1, s2 - s1 ) ) != 0 ) - { + if ( ( ret = mbedtls_base64_decode( buf, len, &len, s1, s2 - s1 ) ) != 0 ) { mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); + return ( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); } - if( enc != 0 ) - { + if ( enc != 0 ) { #if defined(MBEDTLS_MD5_C) && defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) ) - if( pwd == NULL ) - { + if ( pwd == NULL ) { mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ); + return ( MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ); } #if defined(MBEDTLS_DES_C) - if( enc_alg == MBEDTLS_CIPHER_DES_EDE3_CBC ) + if ( enc_alg == MBEDTLS_CIPHER_DES_EDE3_CBC ) pem_des3_decrypt( pem_iv, buf, len, pwd, pwdlen ); - else if( enc_alg == MBEDTLS_CIPHER_DES_CBC ) + else if ( enc_alg == MBEDTLS_CIPHER_DES_CBC ) pem_des_decrypt( pem_iv, buf, len, pwd, pwdlen ); #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( enc_alg == MBEDTLS_CIPHER_AES_128_CBC ) + if ( enc_alg == MBEDTLS_CIPHER_AES_128_CBC ) pem_aes_decrypt( pem_iv, 16, buf, len, pwd, pwdlen ); - else if( enc_alg == MBEDTLS_CIPHER_AES_192_CBC ) + else if ( enc_alg == MBEDTLS_CIPHER_AES_192_CBC ) pem_aes_decrypt( pem_iv, 24, buf, len, pwd, pwdlen ); - else if( enc_alg == MBEDTLS_CIPHER_AES_256_CBC ) + else if ( enc_alg == MBEDTLS_CIPHER_AES_256_CBC ) pem_aes_decrypt( pem_iv, 32, buf, len, pwd, pwdlen ); #endif /* MBEDTLS_AES_C */ @@ -365,14 +358,13 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const * * Use that as heurisitic to try detecting password mismatchs. */ - if( len <= 2 || buf[0] != 0x30 || buf[1] > 0x83 ) - { + if ( len <= 2 || buf[0] != 0x30 || buf[1] > 0x83 ) { mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ); + return ( MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ); } #else mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ } @@ -380,7 +372,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const ctx->buf = buf; ctx->buflen = len; - return( 0 ); + return ( 0 ); } void mbedtls_pem_free( mbedtls_pem_context *ctx ) @@ -394,8 +386,8 @@ void mbedtls_pem_free( mbedtls_pem_context *ctx ) #if defined(MBEDTLS_PEM_WRITE_C) int mbedtls_pem_write_buffer( const char *header, const char *footer, - const unsigned char *der_data, size_t der_len, - unsigned char *buf, size_t buf_len, size_t *olen ) + const unsigned char *der_data, size_t der_len, + unsigned char *buf, size_t buf_len, size_t *olen ) { int ret; unsigned char *encode_buf, *c, *p = buf; @@ -404,28 +396,25 @@ int mbedtls_pem_write_buffer( const char *header, const char *footer, mbedtls_base64_encode( NULL, 0, &use_len, der_data, der_len ); add_len = strlen( header ) + strlen( footer ) + ( use_len / 64 ) + 1; - if( use_len + add_len > buf_len ) - { + if ( use_len + add_len > buf_len ) { *olen = use_len + add_len; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } - if( ( encode_buf = mbedtls_calloc( 1, use_len ) ) == NULL ) - return( MBEDTLS_ERR_PEM_ALLOC_FAILED ); + if ( ( encode_buf = mbedtls_calloc( 1, use_len ) ) == NULL ) + return ( MBEDTLS_ERR_PEM_ALLOC_FAILED ); - if( ( ret = mbedtls_base64_encode( encode_buf, use_len, &use_len, der_data, - der_len ) ) != 0 ) - { + if ( ( ret = mbedtls_base64_encode( encode_buf, use_len, &use_len, der_data, + der_len ) ) != 0 ) { mbedtls_free( encode_buf ); - return( ret ); + return ( ret ); } memcpy( p, header, strlen( header ) ); p += strlen( header ); c = encode_buf; - while( use_len ) - { + while ( use_len ) { len = ( use_len > 64 ) ? 64 : use_len; memcpy( p, c, len ); use_len -= len; @@ -441,7 +430,7 @@ int mbedtls_pem_write_buffer( const char *header, const char *footer, *olen = p - buf; mbedtls_free( encode_buf ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ #endif /* MBEDTLS_PEM_PARSE_C || MBEDTLS_PEM_WRITE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk.c index 10bd0a58..299cbdc8 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk.c @@ -40,8 +40,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -49,7 +51,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { */ void mbedtls_pk_init( mbedtls_pk_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; ctx->pk_info = NULL; @@ -61,7 +63,7 @@ void mbedtls_pk_init( mbedtls_pk_context *ctx ) */ void mbedtls_pk_free( mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) + if ( ctx == NULL || ctx->pk_info == NULL ) return; ctx->pk_info->ctx_free_func( ctx->pk_ctx ); @@ -74,24 +76,24 @@ void mbedtls_pk_free( mbedtls_pk_context *ctx ) */ const mbedtls_pk_info_t * mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ) { - switch( pk_type ) { + switch ( pk_type ) { #if defined(MBEDTLS_RSA_C) case MBEDTLS_PK_RSA: - return( &mbedtls_rsa_info ); + return ( &mbedtls_rsa_info ); #endif #if defined(MBEDTLS_ECP_C) case MBEDTLS_PK_ECKEY: - return( &mbedtls_eckey_info ); + return ( &mbedtls_eckey_info ); case MBEDTLS_PK_ECKEY_DH: - return( &mbedtls_eckeydh_info ); + return ( &mbedtls_eckeydh_info ); #endif #if defined(MBEDTLS_ECDSA_C) case MBEDTLS_PK_ECDSA: - return( &mbedtls_ecdsa_info ); + return ( &mbedtls_ecdsa_info ); #endif /* MBEDTLS_PK_RSA_ALT omitted on purpose */ default: - return( NULL ); + return ( NULL ); } } @@ -100,15 +102,15 @@ const mbedtls_pk_info_t * mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ) */ int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ) { - if( ctx == NULL || info == NULL || ctx->pk_info != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || info == NULL || ctx->pk_info != NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); + if ( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) + return ( MBEDTLS_ERR_PK_ALLOC_FAILED ); ctx->pk_info = info; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) @@ -116,18 +118,18 @@ int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ) * Initialize an RSA-alt context */ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, - mbedtls_pk_rsa_alt_decrypt_func decrypt_func, - mbedtls_pk_rsa_alt_sign_func sign_func, - mbedtls_pk_rsa_alt_key_len_func key_len_func ) + mbedtls_pk_rsa_alt_decrypt_func decrypt_func, + mbedtls_pk_rsa_alt_sign_func sign_func, + mbedtls_pk_rsa_alt_key_len_func key_len_func ) { mbedtls_rsa_alt_context *rsa_alt; const mbedtls_pk_info_t *info = &mbedtls_rsa_alt_info; - if( ctx == NULL || ctx->pk_info != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info != NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); + if ( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) + return ( MBEDTLS_ERR_PK_ALLOC_FAILED ); ctx->pk_info = info; @@ -138,7 +140,7 @@ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, rsa_alt->sign_func = sign_func; rsa_alt->key_len_func = key_len_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ @@ -148,10 +150,10 @@ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ) { /* null or NONE context can't do anything */ - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( 0 ); - return( ctx->pk_info->can_do( type ) ); + return ( ctx->pk_info->can_do( type ) ); } /* @@ -161,61 +163,60 @@ static inline int pk_hashlen_helper( mbedtls_md_type_t md_alg, size_t *hash_len { const mbedtls_md_info_t *md_info; - if( *hash_len != 0 ) - return( 0 ); + if ( *hash_len != 0 ) + return ( 0 ); - if( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) - return( -1 ); + if ( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) + return ( -1 ); *hash_len = mbedtls_md_get_size( md_info ); - return( 0 ); + return ( 0 ); } /* * Verify a signature */ int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL || + pk_hashlen_helper( md_alg, &hash_len ) != 0 ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->verify_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->verify_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len ) ); + return ( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg, hash, hash_len, + sig, sig_len ) ); } /* * Verify a signature with options */ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, - mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ! mbedtls_pk_can_do( ctx, type ) ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ! mbedtls_pk_can_do( ctx, type ) ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - if( type == MBEDTLS_PK_RSASSA_PSS ) - { + if ( type == MBEDTLS_PK_RSASSA_PSS ) { #if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PKCS1_V21) int ret; const mbedtls_pk_rsassa_pss_options *pss_opts; - if( options == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( options == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); pss_opts = (const mbedtls_pk_rsassa_pss_options *) options; - if( sig_len < mbedtls_pk_get_len( ctx ) ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( sig_len < mbedtls_pk_get_len( ctx ) ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); ret = mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_pk_rsa( *ctx ), NULL, NULL, MBEDTLS_RSA_PUBLIC, @@ -223,78 +224,78 @@ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, pss_opts->mgf1_hash_id, pss_opts->expected_salt_len, sig ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); - if( sig_len > mbedtls_pk_get_len( ctx ) ) - return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); + if ( sig_len > mbedtls_pk_get_len( ctx ) ) + return ( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( 0 ); + return ( 0 ); #else - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); #endif } /* General case: no options */ - if( options != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( options != NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - return( mbedtls_pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); + return ( mbedtls_pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); } /* * Make a signature */ int mbedtls_pk_sign( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL || + pk_hashlen_helper( md_alg, &hash_len ) != 0 ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->sign_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->sign_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->sign_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len, f_rng, p_rng ) ); + return ( ctx->pk_info->sign_func( ctx->pk_ctx, md_alg, hash, hash_len, + sig, sig_len, f_rng, p_rng ) ); } /* * Decrypt message */ int mbedtls_pk_decrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->decrypt_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->decrypt_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->decrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); + return ( ctx->pk_info->decrypt_func( ctx->pk_ctx, input, ilen, + output, olen, osize, f_rng, p_rng ) ); } /* * Encrypt message */ int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->encrypt_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->encrypt_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->encrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); + return ( ctx->pk_info->encrypt_func( ctx->pk_ctx, input, ilen, + output, olen, osize, f_rng, p_rng ) ); } /* @@ -302,25 +303,21 @@ int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, */ int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_context *prv ) { - if( pub == NULL || pub->pk_info == NULL || - prv == NULL || prv->pk_info == NULL || - prv->pk_info->check_pair_func == NULL ) - { - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( pub == NULL || pub->pk_info == NULL || + prv == NULL || prv->pk_info == NULL || + prv->pk_info->check_pair_func == NULL ) { + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); } - if( prv->pk_info->type == MBEDTLS_PK_RSA_ALT ) - { - if( pub->pk_info->type != MBEDTLS_PK_RSA ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - } - else - { - if( pub->pk_info != prv->pk_info ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( prv->pk_info->type == MBEDTLS_PK_RSA_ALT ) { + if ( pub->pk_info->type != MBEDTLS_PK_RSA ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + } else { + if ( pub->pk_info != prv->pk_info ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); } - return( prv->pk_info->check_pair_func( pub->pk_ctx, prv->pk_ctx ) ); + return ( prv->pk_info->check_pair_func( pub->pk_ctx, prv->pk_ctx ) ); } /* @@ -328,10 +325,10 @@ int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_conte */ size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( 0 ); - return( ctx->pk_info->get_bitlen( ctx->pk_ctx ) ); + return ( ctx->pk_info->get_bitlen( ctx->pk_ctx ) ); } /* @@ -339,14 +336,14 @@ size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ) */ int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->debug_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->debug_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); ctx->pk_info->debug_func( ctx->pk_ctx, items ); - return( 0 ); + return ( 0 ); } /* @@ -354,10 +351,10 @@ int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *item */ const char *mbedtls_pk_get_name( const mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( "invalid PK" ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( "invalid PK" ); - return( ctx->pk_info->name ); + return ( ctx->pk_info->name ); } /* @@ -365,10 +362,10 @@ const char *mbedtls_pk_get_name( const mbedtls_pk_context *ctx ) */ mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_PK_NONE ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_PK_NONE ); - return( ctx->pk_info->type ); + return ( ctx->pk_info->type ); } #endif /* MBEDTLS_PK_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk_wrap.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk_wrap.c index 712ad483..c8a37c06 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk_wrap.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pk_wrap.c @@ -51,94 +51,96 @@ #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #endif #if defined(MBEDTLS_RSA_C) static int rsa_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_RSA || - type == MBEDTLS_PK_RSASSA_PSS ); + return ( type == MBEDTLS_PK_RSA || + type == MBEDTLS_PK_RSASSA_PSS ); } static size_t rsa_get_bitlen( const void *ctx ) { - return( 8 * ((const mbedtls_rsa_context *) ctx)->len ); + return ( 8 * ((const mbedtls_rsa_context *) ctx)->len ); } static int rsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { int ret; - if( sig_len < ((mbedtls_rsa_context *) ctx)->len ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( sig_len < ((mbedtls_rsa_context *) ctx)->len ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_rsa_pkcs1_verify( (mbedtls_rsa_context *) ctx, NULL, NULL, - MBEDTLS_RSA_PUBLIC, md_alg, - (unsigned int) hash_len, hash, sig ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_rsa_pkcs1_verify( (mbedtls_rsa_context *) ctx, NULL, NULL, + MBEDTLS_RSA_PUBLIC, md_alg, + (unsigned int) hash_len, hash, sig ) ) != 0 ) + return ( ret ); - if( sig_len > ((mbedtls_rsa_context *) ctx)->len ) - return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); + if ( sig_len > ((mbedtls_rsa_context *) ctx)->len ) + return ( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( 0 ); + return ( 0 ); } static int rsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { *sig_len = ((mbedtls_rsa_context *) ctx)->len; - return( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); + return ( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, + md_alg, (unsigned int) hash_len, hash, sig ) ); } static int rsa_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ilen != ((mbedtls_rsa_context *) ctx)->len ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen != ((mbedtls_rsa_context *) ctx)->len ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - return( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, f_rng, p_rng, - MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); + return ( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, f_rng, p_rng, + MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); } static int rsa_encrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { *olen = ((mbedtls_rsa_context *) ctx)->len; - if( *olen > osize ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( *olen > osize ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); - return( mbedtls_rsa_pkcs1_encrypt( (mbedtls_rsa_context *) ctx, - f_rng, p_rng, MBEDTLS_RSA_PUBLIC, ilen, input, output ) ); + return ( mbedtls_rsa_pkcs1_encrypt( (mbedtls_rsa_context *) ctx, + f_rng, p_rng, MBEDTLS_RSA_PUBLIC, ilen, input, output ) ); } static int rsa_check_pair_wrap( const void *pub, const void *prv ) { - return( mbedtls_rsa_check_pub_priv( (const mbedtls_rsa_context *) pub, - (const mbedtls_rsa_context *) prv ) ); + return ( mbedtls_rsa_check_pub_priv( (const mbedtls_rsa_context *) pub, + (const mbedtls_rsa_context *) prv ) ); } static void *rsa_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_rsa_init( (mbedtls_rsa_context *) ctx, 0, 0 ); - return( ctx ); + return ( ctx ); } static void rsa_free_wrap( void *ctx ) @@ -182,79 +184,79 @@ const mbedtls_pk_info_t mbedtls_rsa_info = { */ static int eckey_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_ECKEY || - type == MBEDTLS_PK_ECKEY_DH || - type == MBEDTLS_PK_ECDSA ); + return ( type == MBEDTLS_PK_ECKEY || + type == MBEDTLS_PK_ECKEY_DH || + type == MBEDTLS_PK_ECDSA ); } static size_t eckey_get_bitlen( const void *ctx ) { - return( ((mbedtls_ecp_keypair *) ctx)->grp.pbits ); + return ( ((mbedtls_ecp_keypair *) ctx)->grp.pbits ); } #if defined(MBEDTLS_ECDSA_C) /* Forward declarations */ static int ecdsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ); static int ecdsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); static int eckey_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { int ret; mbedtls_ecdsa_context ecdsa; mbedtls_ecdsa_init( &ecdsa ); - if( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) + if ( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) ret = ecdsa_verify_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len ); mbedtls_ecdsa_free( &ecdsa ); - return( ret ); + return ( ret ); } static int eckey_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; mbedtls_ecdsa_context ecdsa; mbedtls_ecdsa_init( &ecdsa ); - if( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) + if ( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) ret = ecdsa_sign_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng ); mbedtls_ecdsa_free( &ecdsa ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECDSA_C */ static int eckey_check_pair( const void *pub, const void *prv ) { - return( mbedtls_ecp_check_pub_priv( (const mbedtls_ecp_keypair *) pub, - (const mbedtls_ecp_keypair *) prv ) ); + return ( mbedtls_ecp_check_pub_priv( (const mbedtls_ecp_keypair *) pub, + (const mbedtls_ecp_keypair *) prv ) ); } static void *eckey_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecp_keypair ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ecp_keypair_init( ctx ); - return( ctx ); + return ( ctx ); } static void eckey_free_wrap( void *ctx ) @@ -295,8 +297,8 @@ const mbedtls_pk_info_t mbedtls_eckey_info = { */ static int eckeydh_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_ECKEY || - type == MBEDTLS_PK_ECKEY_DH ); + return ( type == MBEDTLS_PK_ECKEY || + type == MBEDTLS_PK_ECKEY_DH ); } const mbedtls_pk_info_t mbedtls_eckeydh_info = { @@ -318,42 +320,42 @@ const mbedtls_pk_info_t mbedtls_eckeydh_info = { #if defined(MBEDTLS_ECDSA_C) static int ecdsa_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_ECDSA ); + return ( type == MBEDTLS_PK_ECDSA ); } static int ecdsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { int ret; ((void) md_alg); ret = mbedtls_ecdsa_read_signature( (mbedtls_ecdsa_context *) ctx, - hash, hash_len, sig, sig_len ); + hash, hash_len, sig, sig_len ); - if( ret == MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH ) - return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); + if ( ret == MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH ) + return ( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( ret ); + return ( ret ); } static int ecdsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - return( mbedtls_ecdsa_write_signature( (mbedtls_ecdsa_context *) ctx, - md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng ) ); + return ( mbedtls_ecdsa_write_signature( (mbedtls_ecdsa_context *) ctx, + md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng ) ); } static void *ecdsa_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecdsa_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ecdsa_init( (mbedtls_ecdsa_context *) ctx ); - return( ctx ); + return ( ctx ); } static void ecdsa_free_wrap( void *ctx ) @@ -385,44 +387,44 @@ const mbedtls_pk_info_t mbedtls_ecdsa_info = { static int rsa_alt_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_RSA ); + return ( type == MBEDTLS_PK_RSA ); } static size_t rsa_alt_get_bitlen( const void *ctx ) { const mbedtls_rsa_alt_context *rsa_alt = (const mbedtls_rsa_alt_context *) ctx; - return( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); + return ( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); } static int rsa_alt_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_alt_context *rsa_alt = (mbedtls_rsa_alt_context *) ctx; *sig_len = rsa_alt->key_len_func( rsa_alt->key ); - return( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); + return ( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, + md_alg, (unsigned int) hash_len, hash, sig ) ); } static int rsa_alt_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_alt_context *rsa_alt = (mbedtls_rsa_alt_context *) ctx; ((void) f_rng); ((void) p_rng); - if( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - return( rsa_alt->decrypt_func( rsa_alt->key, - MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); + return ( rsa_alt->decrypt_func( rsa_alt->key, + MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); } #if defined(MBEDTLS_RSA_C) @@ -433,25 +435,23 @@ static int rsa_alt_check_pair( const void *pub, const void *prv ) size_t sig_len = 0; int ret; - if( rsa_alt_get_bitlen( prv ) != rsa_get_bitlen( pub ) ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( rsa_alt_get_bitlen( prv ) != rsa_get_bitlen( pub ) ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); memset( hash, 0x2a, sizeof( hash ) ); - if( ( ret = rsa_alt_sign_wrap( (void *) prv, MBEDTLS_MD_NONE, - hash, sizeof( hash ), - sig, &sig_len, NULL, NULL ) ) != 0 ) - { - return( ret ); + if ( ( ret = rsa_alt_sign_wrap( (void *) prv, MBEDTLS_MD_NONE, + hash, sizeof( hash ), + sig, &sig_len, NULL, NULL ) ) != 0 ) { + return ( ret ); } - if( rsa_verify_wrap( (void *) pub, MBEDTLS_MD_NONE, - hash, sizeof( hash ), sig, sig_len ) != 0 ) - { - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( rsa_verify_wrap( (void *) pub, MBEDTLS_MD_NONE, + hash, sizeof( hash ), sig, sig_len ) != 0 ) { + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -459,10 +459,10 @@ static void *rsa_alt_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_alt_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) memset( ctx, 0, sizeof( mbedtls_rsa_alt_context ) ); - return( ctx ); + return ( ctx ); } static void rsa_alt_free_wrap( void *ctx ) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs11.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs11.c index 0ea64252..80f866b6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs11.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs11.c @@ -52,35 +52,30 @@ int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t unsigned char *cert_blob = NULL; size_t cert_blob_size = 0; - if( cert == NULL ) - { + if ( cert == NULL ) { ret = 2; goto cleanup; } - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, NULL, - &cert_blob_size ) != CKR_OK ) - { + if ( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, NULL, + &cert_blob_size ) != CKR_OK ) { ret = 3; goto cleanup; } cert_blob = mbedtls_calloc( 1, cert_blob_size ); - if( NULL == cert_blob ) - { + if ( NULL == cert_blob ) { ret = 4; goto cleanup; } - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, cert_blob, - &cert_blob_size ) != CKR_OK ) - { + if ( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, cert_blob, + &cert_blob_size ) != CKR_OK ) { ret = 5; goto cleanup; } - if( 0 != mbedtls_x509_crt_parse( cert, cert_blob, cert_blob_size ) ) - { + if ( 0 != mbedtls_x509_crt_parse( cert, cert_blob, cert_blob_size ) ) { ret = 6; goto cleanup; } @@ -88,25 +83,25 @@ int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t ret = 0; cleanup: - if( NULL != cert_blob ) + if ( NULL != cert_blob ) mbedtls_free( cert_blob ); - return( ret ); + return ( ret ); } int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key, - pkcs11h_certificate_t pkcs11_cert ) + pkcs11h_certificate_t pkcs11_cert ) { int ret = 1; mbedtls_x509_crt cert; mbedtls_x509_crt_init( &cert ); - if( priv_key == NULL ) + if ( priv_key == NULL ) goto cleanup; - if( 0 != mbedtls_pkcs11_x509_cert_bind( &cert, pkcs11_cert ) ) + if ( 0 != mbedtls_pkcs11_x509_cert_bind( &cert, pkcs11_cert ) ) goto cleanup; priv_key->len = mbedtls_pk_get_len( &cert.pk ); @@ -117,92 +112,87 @@ int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key, cleanup: mbedtls_x509_crt_free( &cert ); - return( ret ); + return ( ret ); } void mbedtls_pkcs11_priv_key_free( mbedtls_pkcs11_context *priv_key ) { - if( NULL != priv_key ) + if ( NULL != priv_key ) pkcs11h_certificate_freeCertificate( priv_key->pkcs11h_cert ); } int mbedtls_pkcs11_decrypt( mbedtls_pkcs11_context *ctx, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ) { size_t input_len, output_len; - if( NULL == ctx ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( NULL == ctx ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( MBEDTLS_RSA_PRIVATE != mode ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( MBEDTLS_RSA_PRIVATE != mode ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); output_len = input_len = ctx->len; - if( input_len < 16 || input_len > output_max_len ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( input_len < 16 || input_len > output_max_len ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); /* Determine size of output buffer */ - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, NULL, &output_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, + input_len, NULL, &output_len ) != CKR_OK ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } - if( output_len > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( output_len > output_max_len ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, output, &output_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, + input_len, output, &output_len ) != CKR_OK ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } *olen = output_len; - return( 0 ); + return ( 0 ); } int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { size_t sig_len = 0, asn_len = 0, oid_size = 0; unsigned char *p = sig; const char *oid; - if( NULL == ctx ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( NULL == ctx ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( MBEDTLS_RSA_PRIVATE != mode ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( MBEDTLS_RSA_PRIVATE != mode ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); asn_len = 10 + oid_size; } sig_len = ctx->len; - if( hashlen > sig_len || asn_len > sig_len || - hashlen + asn_len > sig_len ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( hashlen > sig_len || asn_len > sig_len || + hashlen + asn_len > sig_len ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { /* * DigestInfo ::= SEQUENCE { * digestAlgorithm DigestAlgorithmIdentifier, @@ -228,13 +218,12 @@ int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, memcpy( p, hash, hashlen ); - if( pkcs11h_certificate_signAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, sig, - asn_len + hashlen, sig, &sig_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( pkcs11h_certificate_signAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, sig, + asn_len + hashlen, sig, &sig_len ) != CKR_OK ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } - return( 0 ); + return ( 0 ); } #endif /* defined(MBEDTLS_PKCS11_C) */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs12.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs12.c index c603a135..438de6c0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs12.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs12.c @@ -48,8 +48,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } static int pkcs12_parse_pbe_params( mbedtls_asn1_buf *params, @@ -66,24 +68,24 @@ static int pkcs12_parse_pbe_params( mbedtls_asn1_buf *params, * } * */ - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - if( ( ret = mbedtls_asn1_get_tag( p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); salt->p = *p; *p += salt->len; - if( ( ret = mbedtls_asn1_get_int( p, end, iterations ) ) != 0 ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( p, end, iterations ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); - if( *p != end ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } #define PKCS12_MAX_PWDLEN 128 @@ -98,44 +100,42 @@ static int pkcs12_pbe_derive_key_iv( mbedtls_asn1_buf *pbe_params, mbedtls_md_ty size_t i; unsigned char unipwd[PKCS12_MAX_PWDLEN * 2 + 2]; - if( pwdlen > PKCS12_MAX_PWDLEN ) - return( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); + if ( pwdlen > PKCS12_MAX_PWDLEN ) + return ( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); memset( &salt, 0, sizeof(mbedtls_asn1_buf) ); memset( &unipwd, 0, sizeof(unipwd) ); - if( ( ret = pkcs12_parse_pbe_params( pbe_params, &salt, - &iterations ) ) != 0 ) - return( ret ); + if ( ( ret = pkcs12_parse_pbe_params( pbe_params, &salt, + &iterations ) ) != 0 ) + return ( ret ); - for( i = 0; i < pwdlen; i++ ) + for ( i = 0; i < pwdlen; i++ ) unipwd[i * 2 + 1] = pwd[i]; - if( ( ret = mbedtls_pkcs12_derivation( key, keylen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - MBEDTLS_PKCS12_DERIVE_KEY, iterations ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pkcs12_derivation( key, keylen, unipwd, pwdlen * 2 + 2, + salt.p, salt.len, md_type, + MBEDTLS_PKCS12_DERIVE_KEY, iterations ) ) != 0 ) { + return ( ret ); } - if( iv == NULL || ivlen == 0 ) - return( 0 ); + if ( iv == NULL || ivlen == 0 ) + return ( 0 ); - if( ( ret = mbedtls_pkcs12_derivation( iv, ivlen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - MBEDTLS_PKCS12_DERIVE_IV, iterations ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pkcs12_derivation( iv, ivlen, unipwd, pwdlen * 2 + 2, + salt.p, salt.len, md_type, + MBEDTLS_PKCS12_DERIVE_IV, iterations ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #undef PKCS12_MAX_PWDLEN int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t len, + unsigned char *output ) { #if !defined(MBEDTLS_ARC4_C) ((void) pbe_params); @@ -145,7 +145,7 @@ int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, ((void) data); ((void) len); ((void) output); - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); #else int ret; unsigned char key[16]; @@ -154,30 +154,29 @@ int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, mbedtls_arc4_init( &ctx ); - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, MBEDTLS_MD_SHA1, - pwd, pwdlen, - key, 16, NULL, 0 ) ) != 0 ) - { - return( ret ); + if ( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, MBEDTLS_MD_SHA1, + pwd, pwdlen, + key, 16, NULL, 0 ) ) != 0 ) { + return ( ret ); } mbedtls_arc4_setup( &ctx, key, 16 ); - if( ( ret = mbedtls_arc4_crypt( &ctx, len, data, output ) ) != 0 ) + if ( ( ret = mbedtls_arc4_crypt( &ctx, len, data, output ) ) != 0 ) goto exit; exit: mbedtls_zeroize( key, sizeof( key ) ); mbedtls_arc4_free( &ctx ); - return( ret ); + return ( ret ); #endif /* MBEDTLS_ARC4_C */ } int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, - mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) + mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t len, + unsigned char *output ) { int ret, keylen = 0; unsigned char key[32]; @@ -187,39 +186,37 @@ int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, size_t olen = 0; cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); keylen = cipher_info->key_bitlen / 8; - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, md_type, pwd, pwdlen, - key, keylen, - iv, cipher_info->iv_size ) ) != 0 ) - { - return( ret ); + if ( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, md_type, pwd, pwdlen, + key, keylen, + iv, cipher_info->iv_size ) ) != 0 ) { + return ( ret ); } mbedtls_cipher_init( &cipher_ctx ); - if( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_set_iv( &cipher_ctx, iv, cipher_info->iv_size ) ) != 0 ) + if ( ( ret = mbedtls_cipher_set_iv( &cipher_ctx, iv, cipher_info->iv_size ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_reset( &cipher_ctx ) ) != 0 ) + if ( ( ret = mbedtls_cipher_reset( &cipher_ctx ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_update( &cipher_ctx, data, len, - output, &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_update( &cipher_ctx, data, len, + output, &olen ) ) != 0 ) { goto exit; } - if( ( ret = mbedtls_cipher_finish( &cipher_ctx, output + olen, &olen ) ) != 0 ) + if ( ( ret = mbedtls_cipher_finish( &cipher_ctx, output + olen, &olen ) ) != 0 ) ret = MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH; exit: @@ -227,7 +224,7 @@ exit: mbedtls_zeroize( iv, sizeof( iv ) ); mbedtls_cipher_free( &cipher_ctx ); - return( ret ); + return ( ret ); } static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, @@ -236,8 +233,7 @@ static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, unsigned char *p = data; size_t use_len; - while( data_len > 0 ) - { + while ( data_len > 0 ) { use_len = ( data_len > fill_len ) ? fill_len : data_len; memcpy( p, filler, use_len ); p += use_len; @@ -246,9 +242,9 @@ static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, } int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *salt, size_t saltlen, - mbedtls_md_type_t md_type, int id, int iterations ) + const unsigned char *pwd, size_t pwdlen, + const unsigned char *salt, size_t saltlen, + mbedtls_md_type_t md_type, int id, int iterations ) { int ret; unsigned int j; @@ -265,20 +261,20 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, mbedtls_md_context_t md_ctx; // This version only allows max of 64 bytes of password or salt - if( datalen > 128 || pwdlen > 64 || saltlen > 64 ) - return( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); + if ( datalen > 128 || pwdlen > 64 || saltlen > 64 ) + return ( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); md_info = mbedtls_md_info_from_type( md_type ); - if( md_info == NULL ) - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) + return ( ret ); hlen = mbedtls_md_get_size( md_info ); - if( hlen <= 32 ) + if ( hlen <= 32 ) v = 64; else v = 128; @@ -289,28 +285,26 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, pkcs12_fill_buffer( pwd_block, v, pwd, pwdlen ); p = data; - while( datalen > 0 ) - { + while ( datalen > 0 ) { // Calculate hash( diversifier || salt_block || pwd_block ) - if( ( ret = mbedtls_md_starts( &md_ctx ) ) != 0 ) + if ( ( ret = mbedtls_md_starts( &md_ctx ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_update( &md_ctx, diversifier, v ) ) != 0 ) + if ( ( ret = mbedtls_md_update( &md_ctx, diversifier, v ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_update( &md_ctx, salt_block, v ) ) != 0 ) + if ( ( ret = mbedtls_md_update( &md_ctx, salt_block, v ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_update( &md_ctx, pwd_block, v ) ) != 0 ) + if ( ( ret = mbedtls_md_update( &md_ctx, pwd_block, v ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_finish( &md_ctx, hash_output ) ) != 0 ) + if ( ( ret = mbedtls_md_finish( &md_ctx, hash_output ) ) != 0 ) goto exit; // Perform remaining ( iterations - 1 ) recursive hash calculations - for( i = 1; i < (size_t) iterations; i++ ) - { - if( ( ret = mbedtls_md( md_info, hash_output, hlen, hash_output ) ) != 0 ) + for ( i = 1; i < (size_t) iterations; i++ ) { + if ( ( ret = mbedtls_md( md_info, hash_output, hlen, hash_output ) ) != 0 ) goto exit; } @@ -319,21 +313,20 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, datalen -= use_len; p += use_len; - if( datalen == 0 ) + if ( datalen == 0 ) break; // Concatenating copies of hash_output into hash_block (B) pkcs12_fill_buffer( hash_block, v, hash_output, hlen ); // B += 1 - for( i = v; i > 0; i-- ) - if( ++hash_block[i - 1] != 0 ) + for ( i = v; i > 0; i-- ) + if ( ++hash_block[i - 1] != 0 ) break; // salt_block += B c = 0; - for( i = v; i > 0; i-- ) - { + for ( i = v; i > 0; i-- ) { j = salt_block[i - 1] + hash_block[i - 1] + c; c = (unsigned char) (j >> 8); salt_block[i - 1] = j & 0xFF; @@ -341,8 +334,7 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, // pwd_block += B c = 0; - for( i = v; i > 0; i-- ) - { + for ( i = v; i > 0; i-- ) { j = pwd_block[i - 1] + hash_block[i - 1] + c; c = (unsigned char) (j >> 8); pwd_block[i - 1] = j & 0xFF; @@ -359,7 +351,7 @@ exit: mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PKCS12_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs5.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs5.c index e28d5a84..695e2931 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs5.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkcs5.c @@ -60,9 +60,9 @@ static int pkcs5_parse_pbkdf2_params( const mbedtls_asn1_buf *params, unsigned char *p = params->p; const unsigned char *end = params->p + params->len; - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); /* * PBKDF2-params ::= SEQUENCE { * salt OCTET STRING, @@ -72,46 +72,45 @@ static int pkcs5_parse_pbkdf2_params( const mbedtls_asn1_buf *params, * } * */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); salt->p = p; p += salt->len; - if( ( ret = mbedtls_asn1_get_int( &p, end, iterations ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, iterations ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_int( &p, end, keylen ) ) != 0 ) - { - if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, keylen ) ) != 0 ) { + if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); } - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_alg_null( &p, end, &prf_alg_oid ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg_null( &p, end, &prf_alg_oid ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); - if( MBEDTLS_OID_CMP( MBEDTLS_OID_HMAC_SHA1, &prf_alg_oid ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_HMAC_SHA1, &prf_alg_oid ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); *md_type = MBEDTLS_MD_SHA1; - if( p != end ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t datalen, - unsigned char *output ) + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t datalen, + unsigned char *output ) { int ret, iterations = 0, keylen = 0; unsigned char *p, *end; @@ -135,41 +134,39 @@ int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} * } */ - if( pbe_params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( pbe_params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - if( ( ret = mbedtls_asn1_get_alg( &p, end, &kdf_alg_oid, &kdf_alg_params ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg( &p, end, &kdf_alg_oid, &kdf_alg_params ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); // Only PBKDF2 supported at the moment // - if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBKDF2, &kdf_alg_oid ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBKDF2, &kdf_alg_oid ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); - if( ( ret = pkcs5_parse_pbkdf2_params( &kdf_alg_params, - &salt, &iterations, &keylen, - &md_type ) ) != 0 ) - { - return( ret ); + if ( ( ret = pkcs5_parse_pbkdf2_params( &kdf_alg_params, + &salt, &iterations, &keylen, + &md_type ) ) != 0 ) { + return ( ret ); } md_info = mbedtls_md_info_from_type( md_type ); - if( md_info == NULL ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); - if( ( ret = mbedtls_asn1_get_alg( &p, end, &enc_scheme_oid, - &enc_scheme_params ) ) != 0 ) - { - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg( &p, end, &enc_scheme_oid, + &enc_scheme_params ) ) != 0 ) { + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); } - if( mbedtls_oid_get_cipher_alg( &enc_scheme_oid, &cipher_alg ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( mbedtls_oid_get_cipher_alg( &enc_scheme_oid, &cipher_alg ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); cipher_info = mbedtls_cipher_info_from_type( cipher_alg ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); /* * The value of keylen from pkcs5_parse_pbkdf2_params() is ignored @@ -177,10 +174,9 @@ int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, */ keylen = cipher_info->key_bitlen / 8; - if( enc_scheme_params.tag != MBEDTLS_ASN1_OCTET_STRING || - enc_scheme_params.len != cipher_info->iv_size ) - { - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT ); + if ( enc_scheme_params.tag != MBEDTLS_ASN1_OCTET_STRING || + enc_scheme_params.len != cipher_info->iv_size ) { + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT ); } mbedtls_md_init( &md_ctx ); @@ -188,36 +184,35 @@ int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, memcpy( iv, enc_scheme_params.p, enc_scheme_params.len ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) goto exit; - if( ( ret = mbedtls_pkcs5_pbkdf2_hmac( &md_ctx, pwd, pwdlen, salt.p, salt.len, - iterations, keylen, key ) ) != 0 ) - { + if ( ( ret = mbedtls_pkcs5_pbkdf2_hmac( &md_ctx, pwd, pwdlen, salt.p, salt.len, + iterations, keylen, key ) ) != 0 ) { goto exit; } - if( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_crypt( &cipher_ctx, iv, enc_scheme_params.len, - data, datalen, output, &olen ) ) != 0 ) + if ( ( ret = mbedtls_cipher_crypt( &cipher_ctx, iv, enc_scheme_params.len, + data, datalen, output, &olen ) ) != 0 ) ret = MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH; exit: mbedtls_md_free( &md_ctx ); mbedtls_cipher_free( &cipher_ctx ); - return( ret ); + return ( ret ); } int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *password, - size_t plen, const unsigned char *salt, size_t slen, - unsigned int iteration_count, - uint32_t key_length, unsigned char *output ) + size_t plen, const unsigned char *salt, size_t slen, + unsigned int iteration_count, + uint32_t key_length, unsigned char *output ) { int ret, j; unsigned int i; @@ -231,43 +226,41 @@ int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *p memset( counter, 0, 4 ); counter[3] = 1; - if( iteration_count > 0xFFFFFFFF ) - return( MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA ); + if ( iteration_count > 0xFFFFFFFF ) + return ( MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA ); - while( key_length ) - { + while ( key_length ) { // U1 ends up in work // - if( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_update( ctx, salt, slen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_update( ctx, salt, slen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_update( ctx, counter, 4 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_update( ctx, counter, 4 ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_finish( ctx, work ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_finish( ctx, work ) ) != 0 ) + return ( ret ); memcpy( md1, work, md_size ); - for( i = 1; i < iteration_count; i++ ) - { + for ( i = 1; i < iteration_count; i++ ) { // U2 ends up in md1 // - if( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_update( ctx, md1, md_size ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_update( ctx, md1, md_size ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_finish( ctx, md1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_finish( ctx, md1 ) ) != 0 ) + return ( ret ); // U1 xor U2 // - for( j = 0; j < md_size; j++ ) + for ( j = 0; j < md_size; j++ ) work[j] ^= md1[j]; } @@ -277,12 +270,12 @@ int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *p key_length -= (uint32_t) use_len; out_p += use_len; - for( i = 4; i > 0; i-- ) - if( ++counter[i - 1] != 0 ) + for ( i = 4; i > 0; i-- ) + if ( ++counter[i - 1] != 0 ) break; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SELF_TEST) @@ -290,20 +283,19 @@ int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *p #if !defined(MBEDTLS_SHA1_C) int mbedtls_pkcs5_self_test( int verbose ) { - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " PBKDF2 (SHA1): skipped\n\n" ); - return( 0 ); + return ( 0 ); } #else #define MAX_TESTS 6 static const size_t plen[MAX_TESTS] = - { 8, 8, 8, 24, 9 }; +{ 8, 8, 8, 24, 9 }; -static const unsigned char password[MAX_TESTS][32] = -{ +static const unsigned char password[MAX_TESTS][32] = { "password", "password", "password", @@ -312,10 +304,9 @@ static const unsigned char password[MAX_TESTS][32] = }; static const size_t slen[MAX_TESTS] = - { 4, 4, 4, 36, 5 }; +{ 4, 4, 4, 36, 5 }; -static const unsigned char salt[MAX_TESTS][40] = -{ +static const unsigned char salt[MAX_TESTS][40] = { "salt", "salt", "salt", @@ -324,28 +315,37 @@ static const unsigned char salt[MAX_TESTS][40] = }; static const uint32_t it_cnt[MAX_TESTS] = - { 1, 2, 4096, 4096, 4096 }; +{ 1, 2, 4096, 4096, 4096 }; static const uint32_t key_len[MAX_TESTS] = - { 20, 20, 20, 25, 16 }; +{ 20, 20, 20, 25, 16 }; -static const unsigned char result_key[MAX_TESTS][32] = -{ - { 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, - 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, - 0x2f, 0xe0, 0x37, 0xa6 }, - { 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, - 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, - 0xd8, 0xde, 0x89, 0x57 }, - { 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, - 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, - 0x65, 0xa4, 0x29, 0xc1 }, - { 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, - 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, - 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, - 0x38 }, - { 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, - 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 }, +static const unsigned char result_key[MAX_TESTS][32] = { + { + 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, + 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, + 0x2f, 0xe0, 0x37, 0xa6 + }, + { + 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, + 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, + 0xd8, 0xde, 0x89, 0x57 + }, + { + 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, + 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, + 0x65, 0xa4, 0x29, 0xc1 + }, + { + 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, + 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, + 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, + 0x38 + }, + { + 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, + 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 + }, }; int mbedtls_pkcs5_self_test( int verbose ) @@ -358,46 +358,42 @@ int mbedtls_pkcs5_self_test( int verbose ) mbedtls_md_init( &sha1_ctx ); info_sha1 = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ); - if( info_sha1 == NULL ) - { + if ( info_sha1 == NULL ) { ret = 1; goto exit; } - if( ( ret = mbedtls_md_setup( &sha1_ctx, info_sha1, 1 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &sha1_ctx, info_sha1, 1 ) ) != 0 ) { ret = 1; goto exit; } - for( i = 0; i < MAX_TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < MAX_TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " PBKDF2 (SHA1) #%d: ", i ); ret = mbedtls_pkcs5_pbkdf2_hmac( &sha1_ctx, password[i], plen[i], salt[i], - slen[i], it_cnt[i], key_len[i], key ); - if( ret != 0 || - memcmp( result_key[i], key, key_len[i] ) != 0 ) - { - if( verbose != 0 ) + slen[i], it_cnt[i], key_len[i], key ); + if ( ret != 0 || + memcmp( result_key[i], key, key_len[i] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_md_free( &sha1_ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SHA1_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkparse.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkparse.c index 275429e6..e425e1e3 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkparse.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkparse.c @@ -62,8 +62,10 @@ #if defined(MBEDTLS_FS_IO) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -78,66 +80,63 @@ int mbedtls_pk_load_file( const char *path, unsigned char **buf, size_t *n ) FILE *f; long size; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_PK_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_PK_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { + if ( ( size = ftell( f ) ) == -1 ) { fclose( f ); - return( MBEDTLS_ERR_PK_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_PK_FILE_IO_ERROR ); } fseek( f, 0, SEEK_SET ); *n = (size_t) size; - if( *n + 1 == 0 || - ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) - { + if ( *n + 1 == 0 || + ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) { fclose( f ); - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); + return ( MBEDTLS_ERR_PK_ALLOC_FAILED ); } - if( fread( *buf, 1, *n, f ) != *n ) - { + if ( fread( *buf, 1, *n, f ) != *n ) { fclose( f ); mbedtls_free( *buf ); - return( MBEDTLS_ERR_PK_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_PK_FILE_IO_ERROR ); } fclose( f ); (*buf)[*n] = '\0'; - if( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) + if ( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) ++*n; - return( 0 ); + return ( 0 ); } /* * Load and parse a private key */ int mbedtls_pk_parse_keyfile( mbedtls_pk_context *ctx, - const char *path, const char *pwd ) + const char *path, const char *pwd ) { int ret; size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); - if( pwd == NULL ) + if ( pwd == NULL ) ret = mbedtls_pk_parse_key( ctx, buf, n, NULL, 0 ); else ret = mbedtls_pk_parse_key( ctx, buf, n, - (const unsigned char *) pwd, strlen( pwd ) ); + (const unsigned char *) pwd, strlen( pwd ) ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } /* @@ -149,15 +148,15 @@ int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *ctx, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_pk_parse_public_key( ctx, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -177,29 +176,27 @@ static int pk_get_ecparams( unsigned char **p, const unsigned char *end, /* Tag may be either OID or SEQUENCE */ params->tag = **p; - if( params->tag != MBEDTLS_ASN1_OID + if ( params->tag != MBEDTLS_ASN1_OID #if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) - && params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) + && params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) #endif - ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } - if( ( ret = mbedtls_asn1_get_tag( p, end, ¶ms->len, params->tag ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, ¶ms->len, params->tag ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } params->p = *p; *p += params->len; - if( *p != end ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) @@ -232,11 +229,11 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ int ver; /* SpecifiedECDomainVersion ::= INTEGER { 1, 2, 3 } */ - if( ( ret = mbedtls_asn1_get_int( &p, end, &ver ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &ver ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ver < 1 || ver > 3 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( ver < 1 || ver > 3 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); /* * FieldID { FIELD-ID:IOSet } ::= SEQUENCE { -- Finite field @@ -244,9 +241,9 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * parameters FIELD-ID.&Type({IOSet}{@fieldType}) * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); end_field = p + len; @@ -258,26 +255,25 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * } * prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end_field, &len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end_field, &len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( ret ); - if( len != MBEDTLS_OID_SIZE( MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD ) || - memcmp( p, MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD, len ) != 0 ) - { - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + if ( len != MBEDTLS_OID_SIZE( MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD ) || + memcmp( p, MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD, len ) != 0 ) { + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); } p += len; /* Prime-p ::= INTEGER -- Field of size p. */ - if( ( ret = mbedtls_asn1_get_mpi( &p, end_field, &grp->P ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_mpi( &p, end_field, &grp->P ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); grp->pbits = mbedtls_mpi_bitlen( &grp->P ); - if( p != end_field ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end_field ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); /* * Curve ::= SEQUENCE { @@ -288,9 +284,9 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * -- with version equal to ecdpVer2 or ecdpVer3 * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); end_curve = p + len; @@ -298,51 +294,47 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * FieldElement ::= OCTET STRING * containing an integer in the case of a prime field */ - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || - ( ret = mbedtls_mpi_read_binary( &grp->A, p, len ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || + ( ret = mbedtls_mpi_read_binary( &grp->A, p, len ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } p += len; - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || - ( ret = mbedtls_mpi_read_binary( &grp->B, p, len ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || + ( ret = mbedtls_mpi_read_binary( &grp->B, p, len ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } p += len; /* Ignore seed BIT STRING OPTIONAL */ - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_BIT_STRING ) ) == 0 ) + if ( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_BIT_STRING ) ) == 0 ) p += len; - if( p != end_curve ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end_curve ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); /* * ECPoint ::= OCTET STRING */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_ecp_point_read_binary( grp, &grp->G, - ( const unsigned char *) p, len ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_point_read_binary( grp, &grp->G, + ( const unsigned char *) p, len ) ) != 0 ) { /* * If we can't read the point because it's compressed, cheat by * reading only the X coordinate and the parity bit of Y. */ - if( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE || - ( p[0] != 0x02 && p[0] != 0x03 ) || - len != mbedtls_mpi_size( &grp->P ) + 1 || - mbedtls_mpi_read_binary( &grp->G.X, p + 1, len - 1 ) != 0 || - mbedtls_mpi_lset( &grp->G.Y, p[0] - 2 ) != 0 || - mbedtls_mpi_lset( &grp->G.Z, 1 ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE || + ( p[0] != 0x02 && p[0] != 0x03 ) || + len != mbedtls_mpi_size( &grp->P ) + 1 || + mbedtls_mpi_read_binary( &grp->G.X, p + 1, len - 1 ) != 0 || + mbedtls_mpi_lset( &grp->G.Y, p[0] - 2 ) != 0 || + mbedtls_mpi_lset( &grp->G.Z, 1 ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } } @@ -351,8 +343,8 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ /* * order INTEGER */ - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &grp->N ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &grp->N ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); grp->nbits = mbedtls_mpi_bitlen( &grp->N ); @@ -360,7 +352,7 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * Allow optional elements by purposefully not enforcing p == end here. */ - return( 0 ); + return ( 0 ); } /* @@ -375,23 +367,21 @@ static int pk_group_id_from_group( const mbedtls_ecp_group *grp, mbedtls_ecp_gro mbedtls_ecp_group_init( &ref ); - for( id = mbedtls_ecp_grp_id_list(); *id != MBEDTLS_ECP_DP_NONE; id++ ) - { + for ( id = mbedtls_ecp_grp_id_list(); *id != MBEDTLS_ECP_DP_NONE; id++ ) { /* Load the group associated to that id */ mbedtls_ecp_group_free( &ref ); MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &ref, *id ) ); /* Compare to the group we were given, starting with easy tests */ - if( grp->pbits == ref.pbits && grp->nbits == ref.nbits && - mbedtls_mpi_cmp_mpi( &grp->P, &ref.P ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->A, &ref.A ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->B, &ref.B ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->N, &ref.N ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->G.X, &ref.G.X ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->G.Z, &ref.G.Z ) == 0 && - /* For Y we may only know the parity bit, so compare only that */ - mbedtls_mpi_get_bit( &grp->G.Y, 0 ) == mbedtls_mpi_get_bit( &ref.G.Y, 0 ) ) - { + if ( grp->pbits == ref.pbits && grp->nbits == ref.nbits && + mbedtls_mpi_cmp_mpi( &grp->P, &ref.P ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->A, &ref.A ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->B, &ref.B ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->N, &ref.N ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->G.X, &ref.G.X ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->G.Z, &ref.G.Z ) == 0 && + /* For Y we may only know the parity bit, so compare only that */ + mbedtls_mpi_get_bit( &grp->G.Y, 0 ) == mbedtls_mpi_get_bit( &ref.G.Y, 0 ) ) { break; } @@ -402,10 +392,10 @@ cleanup: *grp_id = *id; - if( ret == 0 && *id == MBEDTLS_ECP_DP_NONE ) + if ( ret == 0 && *id == MBEDTLS_ECP_DP_NONE ) ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; - return( ret ); + return ( ret ); } /* @@ -419,7 +409,7 @@ static int pk_group_id_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_group_init( &grp ); - if( ( ret = pk_group_from_specified( params, &grp ) ) != 0 ) + if ( ( ret = pk_group_from_specified( params, &grp ) ) != 0 ) goto cleanup; ret = pk_group_id_from_group( &grp, grp_id ); @@ -427,7 +417,7 @@ static int pk_group_id_from_specified( const mbedtls_asn1_buf *params, cleanup: mbedtls_ecp_group_free( &grp ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PK_PARSE_EC_EXTENDED */ @@ -444,31 +434,28 @@ static int pk_use_ecparams( const mbedtls_asn1_buf *params, mbedtls_ecp_group *g int ret; mbedtls_ecp_group_id grp_id; - if( params->tag == MBEDTLS_ASN1_OID ) - { - if( mbedtls_oid_get_ec_grp( params, &grp_id ) != 0 ) - return( MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE ); - } - else - { + if ( params->tag == MBEDTLS_ASN1_OID ) { + if ( mbedtls_oid_get_ec_grp( params, &grp_id ) != 0 ) + return ( MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE ); + } else { #if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) - if( ( ret = pk_group_id_from_specified( params, &grp_id ) ) != 0 ) - return( ret ); + if ( ( ret = pk_group_id_from_specified( params, &grp_id ) ) != 0 ) + return ( ret ); #else - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); #endif } /* * grp may already be initilialized; if so, make sure IDs match */ - if( grp->id != MBEDTLS_ECP_DP_NONE && grp->id != grp_id ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( grp->id != MBEDTLS_ECP_DP_NONE && grp->id != grp_id ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); - if( ( ret = mbedtls_ecp_group_load( grp, grp_id ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_group_load( grp, grp_id ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -483,9 +470,8 @@ static int pk_get_ecpubkey( unsigned char **p, const unsigned char *end, { int ret; - if( ( ret = mbedtls_ecp_point_read_binary( &key->grp, &key->Q, - (const unsigned char *) *p, end - *p ) ) == 0 ) - { + if ( ( ret = mbedtls_ecp_point_read_binary( &key->grp, &key->Q, + (const unsigned char *) *p, end - *p ) ) == 0 ) { ret = mbedtls_ecp_check_pubkey( &key->grp, &key->Q ); } @@ -494,7 +480,7 @@ static int pk_get_ecpubkey( unsigned char **p, const unsigned char *end, */ *p = (unsigned char *) end; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_C */ @@ -512,28 +498,28 @@ static int pk_get_rsapubkey( unsigned char **p, int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->N ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->E ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); + if ( ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->N ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->E ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); - if( *p != end ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( ret = mbedtls_rsa_check_pubkey( rsa ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY ); + if ( ( ret = mbedtls_rsa_check_pubkey( rsa ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY ); rsa->len = mbedtls_mpi_size( &rsa->N ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -552,23 +538,22 @@ static int pk_get_pk_alg( unsigned char **p, memset( params, 0, sizeof(mbedtls_asn1_buf) ); - if( ( ret = mbedtls_asn1_get_alg( p, end, &alg_oid, params ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_alg( p, end, &alg_oid, params ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_ALG + ret ); - if( mbedtls_oid_get_pk_alg( &alg_oid, pk_alg ) != 0 ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( mbedtls_oid_get_pk_alg( &alg_oid, pk_alg ) != 0 ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); /* * No parameters with RSA (only for EC) */ - if( *pk_alg == MBEDTLS_PK_RSA && - ( ( params->tag != MBEDTLS_ASN1_NULL && params->tag != 0 ) || - params->len != 0 ) ) - { - return( MBEDTLS_ERR_PK_INVALID_ALG ); + if ( *pk_alg == MBEDTLS_PK_RSA && + ( ( params->tag != MBEDTLS_ASN1_NULL && params->tag != 0 ) || + params->len != 0 ) ) { + return ( MBEDTLS_ERR_PK_INVALID_ALG ); } - return( 0 ); + return ( 0 ); } /* @@ -577,7 +562,7 @@ static int pk_get_pk_alg( unsigned char **p, * subjectPublicKey BIT STRING } */ int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, - mbedtls_pk_context *pk ) + mbedtls_pk_context *pk ) { int ret; size_t len; @@ -585,54 +570,51 @@ int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, mbedtls_pk_type_t pk_alg = MBEDTLS_PK_NONE; const mbedtls_pk_info_t *pk_info; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = *p + len; - if( ( ret = pk_get_pk_alg( p, end, &pk_alg, &alg_params ) ) != 0 ) - return( ret ); + if ( ( ret = pk_get_pk_alg( p, end, &pk_alg, &alg_params ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_RSA_C) - if( pk_alg == MBEDTLS_PK_RSA ) - { + if ( pk_alg == MBEDTLS_PK_RSA ) { ret = pk_get_rsapubkey( p, end, mbedtls_pk_rsa( *pk ) ); } else #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( pk_alg == MBEDTLS_PK_ECKEY_DH || pk_alg == MBEDTLS_PK_ECKEY ) - { - ret = pk_use_ecparams( &alg_params, &mbedtls_pk_ec( *pk )->grp ); - if( ret == 0 ) - ret = pk_get_ecpubkey( p, end, mbedtls_pk_ec( *pk ) ); - } else + if ( pk_alg == MBEDTLS_PK_ECKEY_DH || pk_alg == MBEDTLS_PK_ECKEY ) { + ret = pk_use_ecparams( &alg_params, &mbedtls_pk_ec( *pk )->grp ); + if ( ret == 0 ) + ret = pk_get_ecpubkey( p, end, mbedtls_pk_ec( *pk ) ); + } else #endif /* MBEDTLS_ECP_C */ - ret = MBEDTLS_ERR_PK_UNKNOWN_PK_ALG; + ret = MBEDTLS_ERR_PK_UNKNOWN_PK_ALG; - if( ret == 0 && *p != end ) + if ( ret == 0 && *p != end ) ret = MBEDTLS_ERR_PK_INVALID_PUBKEY MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; - if( ret != 0 ) + if ( ret != 0 ) mbedtls_pk_free( pk ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_RSA_C) @@ -666,53 +648,47 @@ static int pk_parse_key_pkcs1_der( mbedtls_rsa_context *rsa, * otherPrimeInfos OtherPrimeInfos OPTIONAL * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end, &rsa->ver ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &rsa->ver ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - if( rsa->ver != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); + if ( rsa->ver != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); } - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->N ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->E ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->D ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->P ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->Q ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DP ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DQ ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->QP ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->N ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->E ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->D ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->P ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->Q ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DP ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DQ ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->QP ) ) != 0 ) { mbedtls_rsa_free( rsa ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } rsa->len = mbedtls_mpi_size( &rsa->N ); - if( p != end ) - { + if ( p != end ) { mbedtls_rsa_free( rsa ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - if( ( ret = mbedtls_rsa_check_privkey( rsa ) ) != 0 ) - { + if ( ( ret = mbedtls_rsa_check_privkey( rsa ) ) != 0 ) { mbedtls_rsa_free( rsa ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -742,103 +718,90 @@ static int pk_parse_key_sec1_der( mbedtls_ecp_keypair *eck, * publicKey [1] BIT STRING OPTIONAL * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( version != 1 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); + if ( version != 1 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_mpi_read_binary( &eck->d, p, len ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_read_binary( &eck->d, p, len ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } p += len; pubkey_done = 0; - if( p != end ) - { + if ( p != end ) { /* * Is 'parameters' present? */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { - if( ( ret = pk_get_ecparams( &p, p + len, ¶ms) ) != 0 || - ( ret = pk_use_ecparams( ¶ms, &eck->grp ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) { + if ( ( ret = pk_get_ecparams( &p, p + len, ¶ms) ) != 0 || + ( ret = pk_use_ecparams( ¶ms, &eck->grp ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( ret ); + return ( ret ); } - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } /* * Is 'publickey' present? If not, or if we can't read it (eg because it * is compressed), create it from the private key. */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) { end2 = p + len; - if( ( ret = mbedtls_asn1_get_bitstring_null( &p, end2, &len ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring_null( &p, end2, &len ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( p + len != end2 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p + len != end2 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( ret = pk_get_ecpubkey( &p, end2, eck ) ) == 0 ) + if ( ( ret = pk_get_ecpubkey( &p, end2, eck ) ) == 0 ) pubkey_done = 1; - else - { + else { /* * The only acceptable failure mode of pk_get_ecpubkey() above * is if the point format is not recognized. */ - if( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } } - if( ! pubkey_done && - ( ret = mbedtls_ecp_mul( &eck->grp, &eck->Q, &eck->d, &eck->grp.G, - NULL, NULL ) ) != 0 ) - { + if ( ! pubkey_done && + ( ret = mbedtls_ecp_mul( &eck->grp, &eck->Q, &eck->d, &eck->grp.G, + NULL, NULL ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_ecp_check_privkey( &eck->grp, &eck->d ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_check_privkey( &eck->grp, &eck->d ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ECP_C */ @@ -846,9 +809,9 @@ static int pk_parse_key_sec1_der( mbedtls_ecp_keypair *eck, * Parse an unencrypted PKCS#8 encoded private key */ static int pk_parse_key_pkcs8_unencrypted_der( - mbedtls_pk_context *pk, - const unsigned char* key, - size_t keylen ) + mbedtls_pk_context *pk, + const unsigned char* key, + size_t keylen ) { int ret, version; size_t len; @@ -874,60 +837,55 @@ static int pk_parse_key_pkcs8_unencrypted_der( * The PrivateKey OCTET STRING is a SEC1 ECPrivateKey */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( version != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_VERSION + ret ); + if ( version != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_VERSION + ret ); - if( ( ret = pk_get_pk_alg( &p, end, &pk_alg, ¶ms ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = pk_get_pk_alg( &p, end, &pk_alg, ¶ms ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( len < 1 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( len < 1 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_RSA_C) - if( pk_alg == MBEDTLS_PK_RSA ) - { - if( ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), p, len ) ) != 0 ) - { + if ( pk_alg == MBEDTLS_PK_RSA ) { + if ( ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), p, len ) ) != 0 ) { mbedtls_pk_free( pk ); - return( ret ); + return ( ret ); } } else #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( pk_alg == MBEDTLS_PK_ECKEY || pk_alg == MBEDTLS_PK_ECKEY_DH ) - { - if( ( ret = pk_use_ecparams( ¶ms, &mbedtls_pk_ec( *pk )->grp ) ) != 0 || - ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), p, len ) ) != 0 ) - { - mbedtls_pk_free( pk ); - return( ret ); - } - } else + if ( pk_alg == MBEDTLS_PK_ECKEY || pk_alg == MBEDTLS_PK_ECKEY_DH ) { + if ( ( ret = pk_use_ecparams( ¶ms, &mbedtls_pk_ec( *pk )->grp ) ) != 0 || + ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), p, len ) ) != 0 ) { + mbedtls_pk_free( pk ); + return ( ret ); + } + } else #endif /* MBEDTLS_ECP_C */ - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - return( 0 ); + return ( 0 ); } /* @@ -935,9 +893,9 @@ static int pk_parse_key_pkcs8_unencrypted_der( */ #if defined(MBEDTLS_PKCS12_C) || defined(MBEDTLS_PKCS5_C) static int pk_parse_key_pkcs8_encrypted_der( - mbedtls_pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) + mbedtls_pk_context *pk, + const unsigned char *key, size_t keylen, + const unsigned char *pwd, size_t pwdlen ) { int ret, decrypted = 0; size_t len; @@ -954,8 +912,8 @@ static int pk_parse_key_pkcs8_encrypted_der( p = (unsigned char *) key; end = p + keylen; - if( pwdlen == 0 ) - return( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); + if ( pwdlen == 0 ) + return ( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); /* * This function parses the EncryptedPrivatKeyInfo object (PKCS#8) @@ -971,85 +929,75 @@ static int pk_parse_key_pkcs8_encrypted_der( * * The EncryptedData OCTET STRING is a PKCS#8 PrivateKeyInfo */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_alg( &p, end, &pbe_alg_oid, &pbe_params ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg( &p, end, &pbe_alg_oid, &pbe_params ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( len > sizeof( buf ) ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( len > sizeof( buf ) ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); /* * Decrypt EncryptedData with appropriate PDE */ #if defined(MBEDTLS_PKCS12_C) - if( mbedtls_oid_get_pkcs12_pbe_alg( &pbe_alg_oid, &md_alg, &cipher_alg ) == 0 ) - { - if( ( ret = mbedtls_pkcs12_pbe( &pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, - cipher_alg, md_alg, - pwd, pwdlen, p, len, buf ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + if ( mbedtls_oid_get_pkcs12_pbe_alg( &pbe_alg_oid, &md_alg, &cipher_alg ) == 0 ) { + if ( ( ret = mbedtls_pkcs12_pbe( &pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, + cipher_alg, md_alg, + pwd, pwdlen, p, len, buf ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - return( ret ); + return ( ret ); } decrypted = 1; - } - else if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128, &pbe_alg_oid ) == 0 ) - { - if( ( ret = mbedtls_pkcs12_pbe_sha1_rc4_128( &pbe_params, - MBEDTLS_PKCS12_PBE_DECRYPT, - pwd, pwdlen, - p, len, buf ) ) != 0 ) - { - return( ret ); + } else if ( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128, &pbe_alg_oid ) == 0 ) { + if ( ( ret = mbedtls_pkcs12_pbe_sha1_rc4_128( &pbe_params, + MBEDTLS_PKCS12_PBE_DECRYPT, + pwd, pwdlen, + p, len, buf ) ) != 0 ) { + return ( ret ); } // Best guess for password mismatch when using RC4. If first tag is // not MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE // - if( *buf != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + if ( *buf != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); decrypted = 1; - } - else + } else #endif /* MBEDTLS_PKCS12_C */ #if defined(MBEDTLS_PKCS5_C) - if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBES2, &pbe_alg_oid ) == 0 ) - { - if( ( ret = mbedtls_pkcs5_pbes2( &pbe_params, MBEDTLS_PKCS5_DECRYPT, pwd, pwdlen, - p, len, buf ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBES2, &pbe_alg_oid ) == 0 ) { + if ( ( ret = mbedtls_pkcs5_pbes2( &pbe_params, MBEDTLS_PKCS5_DECRYPT, pwd, pwdlen, + p, len, buf ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - return( ret ); + return ( ret ); + } + + decrypted = 1; + } else +#endif /* MBEDTLS_PKCS5_C */ + { + ((void) pwd); } - decrypted = 1; - } - else -#endif /* MBEDTLS_PKCS5_C */ - { - ((void) pwd); - } + if ( decrypted == 0 ) + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - if( decrypted == 0 ) - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - - return( pk_parse_key_pkcs8_unencrypted_der( pk, buf, len ) ); + return ( pk_parse_key_pkcs8_unencrypted_der( pk, buf, len ) ); } #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ @@ -1057,8 +1005,8 @@ static int pk_parse_key_pkcs8_encrypted_der( * Parse a private key */ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) + const unsigned char *key, size_t keylen, + const unsigned char *pwd, size_t pwdlen ) { int ret; const mbedtls_pk_info_t *pk_info; @@ -1071,114 +1019,102 @@ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, #if defined(MBEDTLS_RSA_C) /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN RSA PRIVATE KEY-----", - "-----END RSA PRIVATE KEY-----", - key, pwd, pwdlen, &len ); + "-----BEGIN RSA PRIVATE KEY-----", + "-----END RSA PRIVATE KEY-----", + key, pwd, pwdlen, &len ); - if( ret == 0 ) - { - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ret == 0 ) { + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), - pem.buf, pem.buflen ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), + pem.buf, pem.buflen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) - return( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) + return ( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); + else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN EC PRIVATE KEY-----", - "-----END EC PRIVATE KEY-----", - key, pwd, pwdlen, &len ); - if( ret == 0 ) - { - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + "-----BEGIN EC PRIVATE KEY-----", + "-----END EC PRIVATE KEY-----", + key, pwd, pwdlen, &len ); + if ( ret == 0 ) { + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), - pem.buf, pem.buflen ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), + pem.buf, pem.buflen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) - return( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) + return ( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); + else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #endif /* MBEDTLS_ECP_C */ /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN PRIVATE KEY-----", - "-----END PRIVATE KEY-----", - key, NULL, 0, &len ); - if( ret == 0 ) - { - if( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, - pem.buf, pem.buflen ) ) != 0 ) - { + "-----BEGIN PRIVATE KEY-----", + "-----END PRIVATE KEY-----", + key, NULL, 0, &len ); + if ( ret == 0 ) { + if ( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, + pem.buf, pem.buflen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #if defined(MBEDTLS_PKCS12_C) || defined(MBEDTLS_PKCS5_C) /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN ENCRYPTED PRIVATE KEY-----", - "-----END ENCRYPTED PRIVATE KEY-----", - key, NULL, 0, &len ); - if( ret == 0 ) - { - if( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, - pem.buf, pem.buflen, - pwd, pwdlen ) ) != 0 ) - { + "-----BEGIN ENCRYPTED PRIVATE KEY-----", + "-----END ENCRYPTED PRIVATE KEY-----", + key, NULL, 0, &len ); + if ( ret == 0 ) { + if ( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, + pem.buf, pem.buflen, + pwd, pwdlen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ #else ((void) ret); @@ -1194,59 +1130,55 @@ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, * error */ #if defined(MBEDTLS_PKCS12_C) || defined(MBEDTLS_PKCS5_C) - if( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, key, keylen, - pwd, pwdlen ) ) == 0 ) - { - return( 0 ); + if ( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, key, keylen, + pwd, pwdlen ) ) == 0 ) { + return ( 0 ); } mbedtls_pk_free( pk ); - if( ret == MBEDTLS_ERR_PK_PASSWORD_MISMATCH ) - { - return( ret ); + if ( ret == MBEDTLS_ERR_PK_PASSWORD_MISMATCH ) { + return ( ret ); } #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ - if( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, key, keylen ) ) == 0 ) - return( 0 ); + if ( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, key, keylen ) ) == 0 ) + return ( 0 ); mbedtls_pk_free( pk ); #if defined(MBEDTLS_RSA_C) - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), key, keylen ) ) == 0 ) - { - return( 0 ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), key, keylen ) ) == 0 ) { + return ( 0 ); } mbedtls_pk_free( pk ); #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), key, keylen ) ) == 0 ) - { - return( 0 ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), key, keylen ) ) == 0 ) { + return ( 0 ); } mbedtls_pk_free( pk ); #endif /* MBEDTLS_ECP_C */ - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } /* * Parse a public key */ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, - const unsigned char *key, size_t keylen ) + const unsigned char *key, size_t keylen ) { int ret; unsigned char *p; @@ -1257,26 +1189,23 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, mbedtls_pem_init( &pem ); /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN PUBLIC KEY-----", - "-----END PUBLIC KEY-----", - key, NULL, 0, &len ); + "-----BEGIN PUBLIC KEY-----", + "-----END PUBLIC KEY-----", + key, NULL, 0, &len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ key = pem.buf; keylen = pem.buflen; - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PEM_PARSE_C */ p = (unsigned char *) key; @@ -1287,7 +1216,7 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, mbedtls_pem_free( &pem ); #endif - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PK_PARSE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkwrite.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkwrite.c index 83b798c1..064965ae 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkwrite.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/pkwrite.c @@ -62,7 +62,7 @@ * } */ static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, - mbedtls_rsa_context *rsa ) + mbedtls_rsa_context *rsa ) { int ret; size_t len = 0; @@ -72,9 +72,9 @@ static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } #endif /* MBEDTLS_RSA_C */ @@ -83,26 +83,25 @@ static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, * EC public key is an EC point */ static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start, - mbedtls_ecp_keypair *ec ) + mbedtls_ecp_keypair *ec ) { int ret; size_t len = 0; unsigned char buf[MBEDTLS_ECP_MAX_PT_LEN]; - if( ( ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q, - MBEDTLS_ECP_PF_UNCOMPRESSED, - &len, buf, sizeof( buf ) ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q, + MBEDTLS_ECP_PF_UNCOMPRESSED, + &len, buf, sizeof( buf ) ) ) != 0 ) { + return ( ret ); } - if( *p < start || (size_t)( *p - start ) < len ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < len ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *p -= len; memcpy( *p, buf, len ); - return( (int) len ); + return ( (int) len ); } /* @@ -111,41 +110,41 @@ static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start, * } */ static int pk_write_ec_param( unsigned char **p, unsigned char *start, - mbedtls_ecp_keypair *ec ) + mbedtls_ecp_keypair *ec ) { int ret; size_t len = 0; const char *oid; size_t oid_len; - if( ( ret = mbedtls_oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 ) + return ( ret ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_oid( p, start, oid, oid_len ) ); - return( (int) len ); + return ( (int) len ); } #endif /* MBEDTLS_ECP_C */ int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start, - const mbedtls_pk_context *key ) + const mbedtls_pk_context *key ) { int ret; size_t len = 0; #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) MBEDTLS_ASN1_CHK_ADD( len, pk_write_rsa_pubkey( p, start, mbedtls_pk_rsa( *key ) ) ); else #endif #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - MBEDTLS_ASN1_CHK_ADD( len, pk_write_ec_pubkey( p, start, mbedtls_pk_ec( *key ) ) ); - else + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) + MBEDTLS_ASN1_CHK_ADD( len, pk_write_ec_pubkey( p, start, mbedtls_pk_ec( *key ) ) ); + else #endif - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - return( (int) len ); + return ( (int) len ); } int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, size_t size ) @@ -159,8 +158,8 @@ int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, si MBEDTLS_ASN1_CHK_ADD( len, mbedtls_pk_write_pubkey( &c, buf, key ) ); - if( c - buf < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( c - buf < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); /* * SubjectPublicKeyInfo ::= SEQUENCE { @@ -173,27 +172,25 @@ int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, si MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_BIT_STRING ) ); - if( ( ret = mbedtls_oid_get_oid_by_pk_alg( mbedtls_pk_get_type( key ), - &oid, &oid_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_oid_get_oid_by_pk_alg( mbedtls_pk_get_type( key ), + &oid, &oid_len ) ) != 0 ) { + return ( ret ); } #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - { + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) { MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, mbedtls_pk_ec( *key ) ) ); } #endif MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( &c, buf, oid, oid_len, - par_len ) ); + par_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_t size ) @@ -203,8 +200,7 @@ int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_ size_t len = 0; #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) - { + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) { mbedtls_rsa_context *rsa = mbedtls_pk_rsa( *key ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &rsa->QP ) ); @@ -219,67 +215,64 @@ int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); - } - else + MBEDTLS_ASN1_SEQUENCE ) ); + } else #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - { - mbedtls_ecp_keypair *ec = mbedtls_pk_ec( *key ); - size_t pub_len = 0, par_len = 0; + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) { + mbedtls_ecp_keypair *ec = mbedtls_pk_ec( *key ); + size_t pub_len = 0, par_len = 0; - /* - * RFC 5915, or SEC1 Appendix C.4 - * - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL - * } - */ + /* + * RFC 5915, or SEC1 Appendix C.4 + * + * ECPrivateKey ::= SEQUENCE { + * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + * privateKey OCTET STRING, + * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, + * publicKey [1] BIT STRING OPTIONAL + * } + */ - /* publicKey */ - MBEDTLS_ASN1_CHK_ADD( pub_len, pk_write_ec_pubkey( &c, buf, ec ) ); + /* publicKey */ + MBEDTLS_ASN1_CHK_ADD( pub_len, pk_write_ec_pubkey( &c, buf, ec ) ); - if( c - buf < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); - *--c = 0; - pub_len += 1; + if ( c - buf < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + *--c = 0; + pub_len += 1; - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_BIT_STRING ) ); + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_BIT_STRING ) ); - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ); - len += pub_len; + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ); + len += pub_len; - /* parameters */ - MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, ec ) ); + /* parameters */ + MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, ec ) ); - MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_len( &c, buf, par_len ) ); - MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_tag( &c, buf, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); - len += par_len; + MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_len( &c, buf, par_len ) ); + MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_tag( &c, buf, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); + len += par_len; - /* privateKey: write as MPI then fix tag */ - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &ec->d ) ); - *c = MBEDTLS_ASN1_OCTET_STRING; + /* privateKey: write as MPI then fix tag */ + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &ec->d ) ); + *c = MBEDTLS_ASN1_OCTET_STRING; - /* version */ - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, 1 ) ); + /* version */ + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, 1 ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); - } - else + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | + MBEDTLS_ASN1_SEQUENCE ) ); + } else #endif /* MBEDTLS_ECP_C */ - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - return( (int) len ); + return ( (int) len ); } #if defined(MBEDTLS_PEM_WRITE_C) @@ -381,20 +374,18 @@ int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *key, unsigned char *buf, si unsigned char output_buf[PUB_DER_MAX_BYTES]; size_t olen = 0; - if( ( ret = mbedtls_pk_write_pubkey_der( key, output_buf, - sizeof(output_buf) ) ) < 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pk_write_pubkey_der( key, output_buf, + sizeof(output_buf) ) ) < 0 ) { + return ( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_PUBLIC_KEY, PEM_END_PUBLIC_KEY, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_PUBLIC_KEY, PEM_END_PUBLIC_KEY, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } int mbedtls_pk_write_key_pem( mbedtls_pk_context *key, unsigned char *buf, size_t size ) @@ -404,35 +395,30 @@ int mbedtls_pk_write_key_pem( mbedtls_pk_context *key, unsigned char *buf, size_ const char *begin, *end; size_t olen = 0; - if( ( ret = mbedtls_pk_write_key_der( key, output_buf, sizeof(output_buf) ) ) < 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_write_key_der( key, output_buf, sizeof(output_buf) ) ) < 0 ) + return ( ret ); #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) - { + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) { begin = PEM_BEGIN_PRIVATE_KEY_RSA; end = PEM_END_PRIVATE_KEY_RSA; - } - else + } else #endif #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - { - begin = PEM_BEGIN_PRIVATE_KEY_EC; - end = PEM_END_PRIVATE_KEY_EC; - } - else + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) { + begin = PEM_BEGIN_PRIVATE_KEY_EC; + end = PEM_END_PRIVATE_KEY_EC; + } else #endif - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - if( ( ret = mbedtls_pem_write_buffer( begin, end, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( begin, end, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/platform.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/platform.c index 2591c45d..4e40c957 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/platform.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/platform.c @@ -35,7 +35,7 @@ static void *platform_calloc_uninit( size_t n, size_t size ) { ((void) n); ((void) size); - return( NULL ); + return ( NULL ); } #define MBEDTLS_PLATFORM_STD_CALLOC platform_calloc_uninit @@ -54,11 +54,11 @@ void * (*mbedtls_calloc)( size_t, size_t ) = MBEDTLS_PLATFORM_STD_CALLOC; void (*mbedtls_free)( void * ) = MBEDTLS_PLATFORM_STD_FREE; int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ), - void (*free_func)( void * ) ) + void (*free_func)( void * ) ) { mbedtls_calloc = calloc_func; mbedtls_free = free_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_MEMORY */ @@ -70,23 +70,22 @@ int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... ) va_list argp; /* Avoid calling the invalid parameter handler by checking ourselves */ - if( s == NULL || n == 0 || fmt == NULL ) - return( -1 ); + if ( s == NULL || n == 0 || fmt == NULL ) + return ( -1 ); va_start( argp, fmt ); #if defined(_TRUNCATE) ret = _vsnprintf_s( s, n, _TRUNCATE, fmt, argp ); #else ret = _vsnprintf( s, n, fmt, argp ); - if( ret < 0 || (size_t) ret == n ) - { - s[n-1] = '\0'; + if ( ret < 0 || (size_t) ret == n ) { + s[n - 1] = '\0'; ret = -1; } #endif va_end( argp ); - return( ret ); + return ( ret ); } #endif @@ -101,22 +100,22 @@ static int platform_snprintf_uninit( char * s, size_t n, ((void) s); ((void) n); ((void) format); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_SNPRINTF platform_snprintf_uninit #endif /* !MBEDTLS_PLATFORM_STD_SNPRINTF */ int (*mbedtls_snprintf)( char * s, size_t n, - const char * format, - ... ) = MBEDTLS_PLATFORM_STD_SNPRINTF; + const char * format, + ... ) = MBEDTLS_PLATFORM_STD_SNPRINTF; int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, - const char * format, - ... ) ) + const char * format, + ... ) ) { mbedtls_snprintf = snprintf_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ @@ -128,7 +127,7 @@ int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, static int platform_printf_uninit( const char *format, ... ) { ((void) format); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_PRINTF platform_printf_uninit @@ -139,7 +138,7 @@ int (*mbedtls_printf)( const char *, ... ) = MBEDTLS_PLATFORM_STD_PRINTF; int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) ) { mbedtls_printf = printf_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_PRINTF_ALT */ @@ -152,19 +151,19 @@ static int platform_fprintf_uninit( FILE *stream, const char *format, ... ) { ((void) stream); ((void) format); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_FPRINTF platform_fprintf_uninit #endif /* !MBEDTLS_PLATFORM_STD_FPRINTF */ int (*mbedtls_fprintf)( FILE *, const char *, ... ) = - MBEDTLS_PLATFORM_STD_FPRINTF; + MBEDTLS_PLATFORM_STD_FPRINTF; int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *, const char *, ... ) ) { mbedtls_fprintf = fprintf_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */ @@ -186,7 +185,7 @@ void (*mbedtls_exit)( int status ) = MBEDTLS_PLATFORM_STD_EXIT; int mbedtls_platform_set_exit( void (*exit_func)( int status ) ) { mbedtls_exit = exit_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_EXIT_ALT */ @@ -200,7 +199,7 @@ int mbedtls_platform_set_exit( void (*exit_func)( int status ) ) static mbedtls_time_t platform_time_uninit( mbedtls_time_t* timer ) { ((void) timer); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_TIME platform_time_uninit @@ -211,7 +210,7 @@ mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* timer ) = MBEDTLS_PLATFORM_STD_T int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* timer ) ) { mbedtls_time = time_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_TIME_ALT */ @@ -227,17 +226,16 @@ int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len ) FILE *file; size_t n; - if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL ) + if ( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL ) return -1; - if( ( n = fread( buf, 1, buf_len, file ) ) != buf_len ) - { + if ( ( n = fread( buf, 1, buf_len, file ) ) != buf_len ) { fclose( file ); return -1; } fclose( file ); - return( n ); + return ( n ); } int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ) @@ -245,17 +243,16 @@ int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ) FILE *file; size_t n; - if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL ) + if ( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL ) return -1; - if( ( n = fwrite( buf, 1, buf_len, file ) ) != buf_len ) - { + if ( ( n = fwrite( buf, 1, buf_len, file ) ) != buf_len ) { fclose( file ); return -1; } fclose( file ); - return( n ); + return ( n ); } #endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ @@ -268,7 +265,7 @@ static int platform_nv_seed_read_uninit( unsigned char *buf, size_t buf_len ) { ((void) buf); ((void) buf_len); - return( -1 ); + return ( -1 ); } #define MBEDTLS_PLATFORM_STD_NV_SEED_READ platform_nv_seed_read_uninit @@ -282,24 +279,24 @@ static int platform_nv_seed_write_uninit( unsigned char *buf, size_t buf_len ) { ((void) buf); ((void) buf_len); - return( -1 ); + return ( -1 ); } #define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE platform_nv_seed_write_uninit #endif /* !MBEDTLS_PLATFORM_STD_NV_SEED_WRITE */ int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ) = - MBEDTLS_PLATFORM_STD_NV_SEED_READ; + MBEDTLS_PLATFORM_STD_NV_SEED_READ; int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ) = - MBEDTLS_PLATFORM_STD_NV_SEED_WRITE; + MBEDTLS_PLATFORM_STD_NV_SEED_WRITE; int mbedtls_platform_set_nv_seed( - int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), - int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) ) + int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), + int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) ) { mbedtls_nv_seed_read = nv_seed_read_func; mbedtls_nv_seed_write = nv_seed_write_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ #endif /* MBEDTLS_ENTROPY_NV_SEED */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ripemd160.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ripemd160.c index cdb0a63c..72c33456 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ripemd160.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ripemd160.c @@ -70,8 +70,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ) @@ -81,14 +83,14 @@ void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ) void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_ripemd160_context ) ); } void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst, - const mbedtls_ripemd160_context *src ) + const mbedtls_ripemd160_context *src ) { *dst = *src; } @@ -294,12 +296,12 @@ void mbedtls_ripemd160_process( mbedtls_ripemd160_context *ctx, const unsigned c * RIPEMD-160 process buffer */ void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, - const unsigned char *input, size_t ilen ) + const unsigned char *input, size_t ilen ) { size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -308,11 +310,10 @@ void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_ripemd160_process( ctx, ctx->buffer ); input += fill; @@ -320,22 +321,19 @@ void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_ripemd160_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), input, ilen ); } } -static const unsigned char ripemd160_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char ripemd160_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -351,7 +349,7 @@ void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, unsigned char out unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_LE( low, msglen, 0 ); @@ -374,7 +372,7 @@ void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, unsigned char out * output = RIPEMD-160( input buffer ) */ void mbedtls_ripemd160( const unsigned char *input, size_t ilen, - unsigned char output[20] ) + unsigned char output[20] ) { mbedtls_ripemd160_context ctx; @@ -392,8 +390,7 @@ void mbedtls_ripemd160( const unsigned char *input, size_t ilen, */ #define TESTS 8 #define KEYS 2 -static const char *ripemd160_test_input[TESTS] = -{ +static const char *ripemd160_test_input[TESTS] = { "", "a", "abc", @@ -402,27 +399,42 @@ static const char *ripemd160_test_input[TESTS] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "1234567890123456789012345678901234567890" - "1234567890123456789012345678901234567890", + "1234567890123456789012345678901234567890", }; -static const unsigned char ripemd160_test_md[TESTS][20] = -{ - { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, - 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 }, - { 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, - 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe }, - { 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, - 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc }, - { 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, - 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 }, - { 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, - 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc }, - { 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, - 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b }, - { 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed, - 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 }, - { 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb, - 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb }, +static const unsigned char ripemd160_test_md[TESTS][20] = { + { + 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, + 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 + }, + { + 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, + 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe + }, + { + 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, + 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc + }, + { + 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, + 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 + }, + { + 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, + 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc + }, + { + 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, + 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b + }, + { + 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed, + 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 + }, + { + 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb, + 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb + }, }; /* @@ -435,31 +447,29 @@ int mbedtls_ripemd160_self_test( int verbose ) memset( output, 0, sizeof output ); - for( i = 0; i < TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " RIPEMD-160 test #%d: ", i + 1 ); mbedtls_ripemd160( (const unsigned char *) ripemd160_test_input[i], - strlen( ripemd160_test_input[i] ), - output ); + strlen( ripemd160_test_input[i] ), + output ); - if( memcmp( output, ripemd160_test_md[i], 20 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( output, ripemd160_test_md[i], 20 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/rsa.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/rsa.c index 40ef2a94..64dc3803 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/rsa.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/rsa.c @@ -65,8 +65,8 @@ * Initialize an RSA context */ void mbedtls_rsa_init( mbedtls_rsa_context *ctx, - int padding, - int hash_id ) + int padding, + int hash_id ) { memset( ctx, 0, sizeof( mbedtls_rsa_context ) ); @@ -92,21 +92,23 @@ void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding, int hash_id * Generate an RSA keypair */ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - unsigned int nbits, int exponent ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + unsigned int nbits, int exponent ) { int ret; mbedtls_mpi P1, Q1, H, G; - if( f_rng == NULL || nbits < 128 || exponent < 3 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL || nbits < 128 || exponent < 3 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( nbits % 2 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( nbits % 2 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); - mbedtls_mpi_init( &H ); mbedtls_mpi_init( &G ); + mbedtls_mpi_init( &P1 ); + mbedtls_mpi_init( &Q1 ); + mbedtls_mpi_init( &H ); + mbedtls_mpi_init( &G ); /* * find primes P and Q with Q < P so that: @@ -114,30 +116,28 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, */ MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &ctx->E, exponent ) ); - do - { + do { MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->P, nbits >> 1, 0, - f_rng, p_rng ) ); + f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->Q, nbits >> 1, 0, - f_rng, p_rng ) ); + f_rng, p_rng ) ); - if( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) + if ( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) continue; MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->N, &ctx->P, &ctx->Q ) ); - if( mbedtls_mpi_bitlen( &ctx->N ) != nbits ) + if ( mbedtls_mpi_bitlen( &ctx->N ) != nbits ) continue; - if( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) - mbedtls_mpi_swap( &ctx->P, &ctx->Q ); + if ( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) + mbedtls_mpi_swap( &ctx->P, &ctx->Q ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &P1, &ctx->P, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &Q1, &ctx->Q, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &H, &P1, &Q1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &G, &ctx->E, &H ) ); - } - while( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ); + } while ( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ); /* * D = E^-1 mod ((P-1)*(Q-1)) @@ -145,7 +145,7 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, * DQ = D mod (Q - 1) * QP = Q^-1 mod P */ - MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->D , &ctx->E, &H ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->D, &ctx->E, &H ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->DP, &ctx->D, &P1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->DQ, &ctx->D, &Q1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->QP, &ctx->Q, &ctx->P ) ); @@ -154,15 +154,17 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, cleanup: - mbedtls_mpi_free( &P1 ); mbedtls_mpi_free( &Q1 ); mbedtls_mpi_free( &H ); mbedtls_mpi_free( &G ); + mbedtls_mpi_free( &P1 ); + mbedtls_mpi_free( &Q1 ); + mbedtls_mpi_free( &H ); + mbedtls_mpi_free( &G ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_rsa_free( ctx ); - return( MBEDTLS_ERR_RSA_KEY_GEN_FAILED + ret ); + return ( MBEDTLS_ERR_RSA_KEY_GEN_FAILED + ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_GENPRIME */ @@ -172,22 +174,22 @@ cleanup: */ int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx ) { - if( !ctx->N.p || !ctx->E.p ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( !ctx->N.p || !ctx->E.p ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - if( ( ctx->N.p[0] & 1 ) == 0 || - ( ctx->E.p[0] & 1 ) == 0 ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( ( ctx->N.p[0] & 1 ) == 0 || + ( ctx->E.p[0] & 1 ) == 0 ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - if( mbedtls_mpi_bitlen( &ctx->N ) < 128 || - mbedtls_mpi_bitlen( &ctx->N ) > MBEDTLS_MPI_MAX_BITS ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_mpi_bitlen( &ctx->N ) < 128 || + mbedtls_mpi_bitlen( &ctx->N ) > MBEDTLS_MPI_MAX_BITS ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - if( mbedtls_mpi_bitlen( &ctx->E ) < 2 || - mbedtls_mpi_cmp_mpi( &ctx->E, &ctx->N ) >= 0 ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_mpi_bitlen( &ctx->E ) < 2 || + mbedtls_mpi_cmp_mpi( &ctx->E, &ctx->N ) >= 0 ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - return( 0 ); + return ( 0 ); } /* @@ -198,15 +200,24 @@ int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx ) int ret; mbedtls_mpi PQ, DE, P1, Q1, H, I, G, G2, L1, L2, DP, DQ, QP; - if( ( ret = mbedtls_rsa_check_pubkey( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_rsa_check_pubkey( ctx ) ) != 0 ) + return ( ret ); - if( !ctx->P.p || !ctx->Q.p || !ctx->D.p ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( !ctx->P.p || !ctx->Q.p || !ctx->D.p ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - mbedtls_mpi_init( &PQ ); mbedtls_mpi_init( &DE ); mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); - mbedtls_mpi_init( &H ); mbedtls_mpi_init( &I ); mbedtls_mpi_init( &G ); mbedtls_mpi_init( &G2 ); - mbedtls_mpi_init( &L1 ); mbedtls_mpi_init( &L2 ); mbedtls_mpi_init( &DP ); mbedtls_mpi_init( &DQ ); + mbedtls_mpi_init( &PQ ); + mbedtls_mpi_init( &DE ); + mbedtls_mpi_init( &P1 ); + mbedtls_mpi_init( &Q1 ); + mbedtls_mpi_init( &H ); + mbedtls_mpi_init( &I ); + mbedtls_mpi_init( &G ); + mbedtls_mpi_init( &G2 ); + mbedtls_mpi_init( &L1 ); + mbedtls_mpi_init( &L2 ); + mbedtls_mpi_init( &DP ); + mbedtls_mpi_init( &DQ ); mbedtls_mpi_init( &QP ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &PQ, &ctx->P, &ctx->Q ) ); @@ -226,30 +237,38 @@ int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx ) /* * Check for a valid PKCS1v2 private key */ - if( mbedtls_mpi_cmp_mpi( &PQ, &ctx->N ) != 0 || - mbedtls_mpi_cmp_mpi( &DP, &ctx->DP ) != 0 || - mbedtls_mpi_cmp_mpi( &DQ, &ctx->DQ ) != 0 || - mbedtls_mpi_cmp_mpi( &QP, &ctx->QP ) != 0 || - mbedtls_mpi_cmp_int( &L2, 0 ) != 0 || - mbedtls_mpi_cmp_int( &I, 1 ) != 0 || - mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &PQ, &ctx->N ) != 0 || + mbedtls_mpi_cmp_mpi( &DP, &ctx->DP ) != 0 || + mbedtls_mpi_cmp_mpi( &DQ, &ctx->DQ ) != 0 || + mbedtls_mpi_cmp_mpi( &QP, &ctx->QP ) != 0 || + mbedtls_mpi_cmp_int( &L2, 0 ) != 0 || + mbedtls_mpi_cmp_int( &I, 1 ) != 0 || + mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) { ret = MBEDTLS_ERR_RSA_KEY_CHECK_FAILED; } cleanup: - mbedtls_mpi_free( &PQ ); mbedtls_mpi_free( &DE ); mbedtls_mpi_free( &P1 ); mbedtls_mpi_free( &Q1 ); - mbedtls_mpi_free( &H ); mbedtls_mpi_free( &I ); mbedtls_mpi_free( &G ); mbedtls_mpi_free( &G2 ); - mbedtls_mpi_free( &L1 ); mbedtls_mpi_free( &L2 ); mbedtls_mpi_free( &DP ); mbedtls_mpi_free( &DQ ); + mbedtls_mpi_free( &PQ ); + mbedtls_mpi_free( &DE ); + mbedtls_mpi_free( &P1 ); + mbedtls_mpi_free( &Q1 ); + mbedtls_mpi_free( &H ); + mbedtls_mpi_free( &I ); + mbedtls_mpi_free( &G ); + mbedtls_mpi_free( &G2 ); + mbedtls_mpi_free( &L1 ); + mbedtls_mpi_free( &L2 ); + mbedtls_mpi_free( &DP ); + mbedtls_mpi_free( &DQ ); mbedtls_mpi_free( &QP ); - if( ret == MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ) - return( ret ); + if ( ret == MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ) + return ( ret ); - if( ret != 0 ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -257,27 +276,25 @@ cleanup: */ int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub, const mbedtls_rsa_context *prv ) { - if( mbedtls_rsa_check_pubkey( pub ) != 0 || - mbedtls_rsa_check_privkey( prv ) != 0 ) - { - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_rsa_check_pubkey( pub ) != 0 || + mbedtls_rsa_check_privkey( prv ) != 0 ) { + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - if( mbedtls_mpi_cmp_mpi( &pub->N, &prv->N ) != 0 || - mbedtls_mpi_cmp_mpi( &pub->E, &prv->E ) != 0 ) - { - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_mpi_cmp_mpi( &pub->N, &prv->N ) != 0 || + mbedtls_mpi_cmp_mpi( &pub->E, &prv->E ) != 0 ) { + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - return( 0 ); + return ( 0 ); } /* * Do an RSA public key operation */ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, - const unsigned char *input, - unsigned char *output ) + const unsigned char *input, + unsigned char *output ) { int ret; size_t olen; @@ -286,14 +303,13 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, mbedtls_mpi_init( &T ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &T, input, ctx->len ) ); - if( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) { ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; goto cleanup; } @@ -304,16 +320,16 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif mbedtls_mpi_free( &T ); - if( ret != 0 ) - return( MBEDTLS_ERR_RSA_PUBLIC_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_RSA_PUBLIC_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -323,12 +339,11 @@ cleanup: * Berlin Heidelberg, 1996. p. 104-113. */ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, count = 0; - if( ctx->Vf.p != NULL ) - { + if ( ctx->Vf.p != NULL ) { /* We already have blinding values, just update them by squaring */ MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->N ) ); @@ -340,12 +355,12 @@ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, /* Unblinding value: Vf = random number, invertible mod N */ do { - if( count++ > 10 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED ); MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &ctx->Vf, ctx->len - 1, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &ctx->Vi, &ctx->Vf, &ctx->N ) ); - } while( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ); + } while ( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ); /* Blinding value: Vi = Vf^(-e) mod N */ MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->Vi, &ctx->Vf, &ctx->N ) ); @@ -353,42 +368,42 @@ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, cleanup: - return( ret ); + return ( ret ); } /* * Do an RSA private key operation */ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + const unsigned char *input, + unsigned char *output ) { int ret; size_t olen; mbedtls_mpi T, T1, T2; /* Make sure we have private key info, prevent possible misuse */ - if( ctx->P.p == NULL || ctx->Q.p == NULL || ctx->D.p == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ctx->P.p == NULL || ctx->Q.p == NULL || ctx->D.p == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - mbedtls_mpi_init( &T ); mbedtls_mpi_init( &T1 ); mbedtls_mpi_init( &T2 ); + mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &T1 ); + mbedtls_mpi_init( &T2 ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &T, input, ctx->len ) ); - if( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) { ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; goto cleanup; } - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { /* * Blinding * T = T * Vi mod N @@ -424,8 +439,7 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &T, &T2, &T1 ) ); #endif /* MBEDTLS_RSA_NO_CRT */ - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { /* * Unblind * T = T * Vf mod N @@ -439,16 +453,18 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - mbedtls_mpi_free( &T ); mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &T1 ); + mbedtls_mpi_free( &T2 ); - if( ret != 0 ) - return( MBEDTLS_ERR_RSA_PRIVATE_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_RSA_PRIVATE_FAILED + ret ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_PKCS1_V21) @@ -478,10 +494,9 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, /* Generate and apply dbMask */ p = dst; - while( dlen > 0 ) - { + while ( dlen > 0 ) { use_len = hlen; - if( dlen < hlen ) + if ( dlen < hlen ) use_len = dlen; mbedtls_md_starts( md_ctx ); @@ -489,7 +504,7 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, mbedtls_md_update( md_ctx, counter, 4 ); mbedtls_md_finish( md_ctx, mask ); - for( i = 0; i < use_len; ++i ) + for ( i = 0; i < use_len; ++i ) *p++ ^= mask[i]; counter[3]++; @@ -504,13 +519,13 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, * Implementation of the PKCS#1 v2.1 RSAES-OAEP-ENCRYPT function */ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t ilen, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + const unsigned char *label, size_t label_len, + size_t ilen, + const unsigned char *input, + unsigned char *output ) { size_t olen; int ret; @@ -519,30 +534,30 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, const mbedtls_md_info_t *md_info; mbedtls_md_context_t md_ctx; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( f_rng == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); md_info = mbedtls_md_info_from_type( (mbedtls_md_type_t) ctx->hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; hlen = mbedtls_md_get_size( md_info ); /* first comparison checks for overflow */ - if( ilen + 2 * hlen + 2 < ilen || olen < ilen + 2 * hlen + 2 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen + 2 * hlen + 2 < ilen || olen < ilen + 2 * hlen + 2 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); memset( output, 0, olen ); *p++ = 0; /* Generate a random octet string seed */ - if( ( ret = f_rng( p_rng, p, hlen ) ) != 0 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); + if ( ( ret = f_rng( p_rng, p, hlen ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); p += hlen; @@ -554,25 +569,24 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, memcpy( p, input, ilen ); mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } /* maskedDB: Apply dbMask to DB */ mgf_mask( output + hlen + 1, olen - hlen - 1, output + 1, hlen, - &md_ctx ); + &md_ctx ); /* maskedSeed: Apply seedMask to seed */ mgf_mask( output + 1, hlen, output + hlen + 1, olen - hlen - 1, - &md_ctx ); + &md_ctx ); mbedtls_md_free( &md_ctx ); - return( ( mode == MBEDTLS_RSA_PUBLIC ) - ? mbedtls_rsa_public( ctx, output, output ) - : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); + return ( ( mode == MBEDTLS_RSA_PUBLIC ) + ? mbedtls_rsa_public( ctx, output, output ) + : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -581,65 +595,61 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-ENCRYPT function */ int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t ilen, + const unsigned char *input, + unsigned char *output ) { size_t nb_pad, olen; int ret; unsigned char *p = output; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); // We don't check p_rng because it won't be dereferenced here - if( f_rng == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL || input == NULL || output == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; /* first comparison checks for overflow */ - if( ilen + 11 < ilen || olen < ilen + 11 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen + 11 < ilen || olen < ilen + 11 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); nb_pad = olen - 3 - ilen; *p++ = 0; - if( mode == MBEDTLS_RSA_PUBLIC ) - { + if ( mode == MBEDTLS_RSA_PUBLIC ) { *p++ = MBEDTLS_RSA_CRYPT; - while( nb_pad-- > 0 ) - { + while ( nb_pad-- > 0 ) { int rng_dl = 100; do { ret = f_rng( p_rng, p, 1 ); - } while( *p == 0 && --rng_dl && ret == 0 ); + } while ( *p == 0 && --rng_dl && ret == 0 ); /* Check if RNG failed to generate data */ - if( rng_dl == 0 || ret != 0 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); + if ( rng_dl == 0 || ret != 0 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); p++; } - } - else - { + } else { *p++ = MBEDTLS_RSA_SIGN; - while( nb_pad-- > 0 ) + while ( nb_pad-- > 0 ) *p++ = 0xFF; } *p++ = 0; memcpy( p, input, ilen ); - return( ( mode == MBEDTLS_RSA_PUBLIC ) - ? mbedtls_rsa_public( ctx, output, output ) - : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); + return ( ( mode == MBEDTLS_RSA_PUBLIC ) + ? mbedtls_rsa_public( ctx, output, output ) + : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -647,28 +657,27 @@ int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx, * Add the message padding, then do an RSA operation */ int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t ilen, + const unsigned char *input, + unsigned char *output ) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsaes_pkcs1_v15_encrypt( ctx, f_rng, p_rng, mode, ilen, - input, output ); + input, output ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsaes_oaep_encrypt( ctx, f_rng, p_rng, mode, NULL, 0, - ilen, input, output ); + ilen, input, output ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -677,14 +686,14 @@ int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-OAEP-DECRYPT function */ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + const unsigned char *label, size_t label_len, + size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ) { int ret; size_t ilen, i, pad_len; @@ -698,23 +707,23 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, /* * Parameters sanity checks */ - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ilen = ctx->len; - if( ilen < 16 || ilen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen < 16 || ilen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); md_info = mbedtls_md_info_from_type( (mbedtls_md_type_t) ctx->hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hlen = mbedtls_md_get_size( md_info ); // checking for integer underflow - if( 2 * hlen + 2 > ilen ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( 2 * hlen + 2 > ilen ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); /* * RSA operation @@ -723,17 +732,16 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, ? mbedtls_rsa_public( ctx, input, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, input, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); /* * Unmask data and generate lHash */ mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } @@ -742,11 +750,11 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, /* seed: Apply seedMask to maskedSeed */ mgf_mask( buf + 1, hlen, buf + hlen + 1, ilen - hlen - 1, - &md_ctx ); + &md_ctx ); /* DB: Apply dbMask to maskedDB */ mgf_mask( buf + hlen + 1, ilen - hlen - 1, buf + 1, hlen, - &md_ctx ); + &md_ctx ); mbedtls_md_free( &md_ctx ); @@ -761,17 +769,16 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, p += hlen; /* Skip seed */ /* Check lHash */ - for( i = 0; i < hlen; i++ ) + for ( i = 0; i < hlen; i++ ) bad |= lhash[i] ^ *p++; /* Get zero-padding len, but always read till end of buffer * (minus one, for the 01 byte) */ pad_len = 0; pad_done = 0; - for( i = 0; i < ilen - 2 * hlen - 2; i++ ) - { + for ( i = 0; i < ilen - 2 * hlen - 2; i++ ) { pad_done |= p[i]; - pad_len += ((pad_done | (unsigned char)-pad_done) >> 7) ^ 1; + pad_len += ((pad_done | (unsigned char) - pad_done) >> 7) ^ 1; } p += pad_len; @@ -783,16 +790,16 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, * recommendations in PKCS#1 v2.2: an opponent cannot distinguish between * the different error conditions. */ - if( bad != 0 ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( bad != 0 ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - if( ilen - ( p - buf ) > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( ilen - ( p - buf ) > output_max_len ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); *olen = ilen - (p - buf); memcpy( output, p, *olen ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -801,32 +808,32 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-DECRYPT function */ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len) { int ret; size_t ilen, pad_count = 0, i; unsigned char *p, bad, pad_done = 0; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ilen = ctx->len; - if( ilen < 16 || ilen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen < 16 || ilen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ret = ( mode == MBEDTLS_RSA_PUBLIC ) ? mbedtls_rsa_public( ctx, input, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, input, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); p = buf; bad = 0; @@ -837,29 +844,24 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, bad |= *p++; /* First byte must be 0 */ /* This test does not depend on secret data */ - if( mode == MBEDTLS_RSA_PRIVATE ) - { + if ( mode == MBEDTLS_RSA_PRIVATE ) { bad |= *p++ ^ MBEDTLS_RSA_CRYPT; /* Get padding len, but always read till end of buffer * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { - pad_done |= ((p[i] | (unsigned char)-p[i]) >> 7) ^ 1; - pad_count += ((pad_done | (unsigned char)-pad_done) >> 7) ^ 1; + for ( i = 0; i < ilen - 3; i++ ) { + pad_done |= ((p[i] | (unsigned char) - p[i]) >> 7) ^ 1; + pad_count += ((pad_done | (unsigned char) - pad_done) >> 7) ^ 1; } p += pad_count; bad |= *p++; /* Must be zero */ - } - else - { + } else { bad |= *p++ ^ MBEDTLS_RSA_SIGN; /* Get padding len, but always read till end of buffer * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { + for ( i = 0; i < ilen - 3; i++ ) { pad_done |= ( p[i] != 0xFF ); pad_count += ( pad_done == 0 ); } @@ -870,16 +872,16 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, bad |= ( pad_count < 8 ); - if( bad ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( bad ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - if( ilen - ( p - buf ) > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( ilen - ( p - buf ) > output_max_len ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); *olen = ilen - (p - buf); memcpy( output, p, *olen ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -887,30 +889,29 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, * Do an RSA operation, then remove the message padding */ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsaes_pkcs1_v15_decrypt( ctx, f_rng, p_rng, mode, olen, - input, output, output_max_len ); + input, output, output_max_len ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsaes_oaep_decrypt( ctx, f_rng, p_rng, mode, NULL, 0, - olen, input, output, - output_max_len ); + olen, input, output, + output_max_len ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -919,13 +920,13 @@ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSASSA-PSS-SIGN function */ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { size_t olen; unsigned char *p = sig; @@ -936,39 +937,38 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, const mbedtls_md_info_t *md_info; mbedtls_md_context_t md_ctx; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( f_rng == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { /* Gather length of hash to sign */ md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); } md_info = mbedtls_md_info_from_type( (mbedtls_md_type_t) ctx->hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hlen = mbedtls_md_get_size( md_info ); slen = hlen; - if( olen < hlen + slen + 2 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( olen < hlen + slen + 2 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); memset( sig, 0, olen ); /* Generate salt of length slen */ - if( ( ret = f_rng( p_rng, salt, slen ) ) != 0 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); + if ( ( ret = f_rng( p_rng, salt, slen ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); /* Note: EMSA-PSS encoding is over the length of N - 1 bits */ msb = mbedtls_mpi_bitlen( &ctx->N ) - 1; @@ -978,10 +978,9 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, p += slen; mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } /* Generate H = Hash( M' ) */ @@ -992,7 +991,7 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, mbedtls_md_finish( &md_ctx, p ); /* Compensate for boundary condition when applying mask */ - if( msb % 8 == 0 ) + if ( msb % 8 == 0 ) offset = 1; /* maskedDB: Apply dbMask to DB */ @@ -1006,9 +1005,9 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, p += hlen; *p++ = 0xBC; - return( ( mode == MBEDTLS_RSA_PUBLIC ) - ? mbedtls_rsa_public( ctx, sig, sig ) - : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig ) ); + return ( ( mode == MBEDTLS_RSA_PUBLIC ) + ? mbedtls_rsa_public( ctx, sig, sig ) + : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig ) ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -1020,13 +1019,13 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, * Do an RSA operation to sign the message digest */ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { size_t nb_pad, olen, oid_size = 0; unsigned char *p = sig; @@ -1037,20 +1036,19 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, volatile unsigned char diff_no_optimize; int ret; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; nb_pad = olen - 3; - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); nb_pad -= 10 + oid_size; @@ -1059,8 +1057,8 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, nb_pad -= hashlen; - if( ( nb_pad < 8 ) || ( nb_pad > olen ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ( nb_pad < 8 ) || ( nb_pad > olen ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); *p++ = 0; *p++ = MBEDTLS_RSA_SIGN; @@ -1068,12 +1066,9 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, p += nb_pad; *p++ = 0; - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { memcpy( p, hash, hashlen ); - } - else - { + } else { /* * DigestInfo ::= SEQUENCE { * digestAlgorithm DigestAlgorithmIdentifier, @@ -1098,34 +1093,32 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, memcpy( p, hash, hashlen ); } - if( mode == MBEDTLS_RSA_PUBLIC ) - return( mbedtls_rsa_public( ctx, sig, sig ) ); + if ( mode == MBEDTLS_RSA_PUBLIC ) + return ( mbedtls_rsa_public( ctx, sig, sig ) ); /* * In order to prevent Lenstra's attack, make the signature in a * temporary buffer and check it before returning it. */ sig_try = mbedtls_calloc( 1, ctx->len ); - if( sig_try == NULL ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( sig_try == NULL ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); verif = mbedtls_calloc( 1, ctx->len ); - if( verif == NULL ) - { + if ( verif == NULL ) { mbedtls_free( sig_try ); - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); } MBEDTLS_MPI_CHK( mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig_try ) ); MBEDTLS_MPI_CHK( mbedtls_rsa_public( ctx, sig_try, verif ) ); /* Compare in constant time just in case */ - for( diff = 0, i = 0; i < ctx->len; i++ ) + for ( diff = 0, i = 0; i < ctx->len; i++ ) diff |= verif[i] ^ sig[i]; diff_no_optimize = diff; - if( diff_no_optimize != 0 ) - { + if ( diff_no_optimize != 0 ) { ret = MBEDTLS_ERR_RSA_PRIVATE_FAILED; goto cleanup; } @@ -1136,7 +1129,7 @@ cleanup: mbedtls_free( sig_try ); mbedtls_free( verif ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -1144,30 +1137,29 @@ cleanup: * Do an RSA operation to sign the message digest */ int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsassa_pkcs1_v15_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsassa_pss_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -1176,15 +1168,15 @@ int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSASSA-PSS-VERIFY function */ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - mbedtls_md_type_t mgf1_hash_id, - int expected_salt_len, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + mbedtls_md_type_t mgf1_hash_id, + int expected_salt_len, + const unsigned char *sig ) { int ret; size_t siglen; @@ -1197,39 +1189,38 @@ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, mbedtls_md_context_t md_ctx; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); siglen = ctx->len; - if( siglen < 16 || siglen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( siglen < 16 || siglen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ret = ( mode == MBEDTLS_RSA_PUBLIC ) ? mbedtls_rsa_public( ctx, sig, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); p = buf; - if( buf[siglen - 1] != 0xBC ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( buf[siglen - 1] != 0xBC ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { /* Gather length of hash to sign */ md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); } md_info = mbedtls_md_info_from_type( mgf1_hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hlen = mbedtls_md_get_size( md_info ); slen = siglen - hlen - 1; /* Currently length of salt + padding */ @@ -1242,43 +1233,39 @@ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, msb = mbedtls_mpi_bitlen( &ctx->N ) - 1; /* Compensate for boundary condition when applying mask */ - if( msb % 8 == 0 ) - { + if ( msb % 8 == 0 ) { p++; siglen -= 1; } - if( buf[0] >> ( 8 - siglen * 8 + msb ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( buf[0] >> ( 8 - siglen * 8 + msb ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } mgf_mask( p, siglen - hlen - 1, p + siglen - hlen - 1, hlen, &md_ctx ); buf[0] &= 0xFF >> ( siglen * 8 - msb ); - while( p < buf + siglen && *p == 0 ) + while ( p < buf + siglen && *p == 0 ) p++; - if( p == buf + siglen || - *p++ != 0x01 ) - { + if ( p == buf + siglen || + *p++ != 0x01 ) { mbedtls_md_free( &md_ctx ); - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } /* Actual salt len */ slen -= p - buf; - if( expected_salt_len != MBEDTLS_RSA_SALT_LEN_ANY && - slen != (size_t) expected_salt_len ) - { + if ( expected_salt_len != MBEDTLS_RSA_SALT_LEN_ANY && + slen != (size_t) expected_salt_len ) { mbedtls_md_free( &md_ctx ); - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } /* @@ -1292,32 +1279,32 @@ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, mbedtls_md_free( &md_ctx ); - if( memcmp( p + slen, result, hlen ) == 0 ) - return( 0 ); + if ( memcmp( p + slen, result, hlen ) == 0 ) + return ( 0 ); else - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); } /* * Simplified PKCS#1 v2.1 RSASSA-PSS-VERIFY function */ int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ) { mbedtls_md_type_t mgf1_hash_id = ( ctx->hash_id != MBEDTLS_MD_NONE ) - ? (mbedtls_md_type_t) ctx->hash_id - : md_alg; + ? (mbedtls_md_type_t) ctx->hash_id + : md_alg; - return( mbedtls_rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode, - md_alg, hashlen, hash, - mgf1_hash_id, MBEDTLS_RSA_SALT_LEN_ANY, - sig ) ); + return ( mbedtls_rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode, + md_alg, hashlen, hash, + mgf1_hash_id, MBEDTLS_RSA_SALT_LEN_ANY, + sig ) ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -1327,13 +1314,13 @@ int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-v1_5-VERIFY function */ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ) { int ret; size_t len, siglen, asn1_len; @@ -1343,47 +1330,45 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, mbedtls_asn1_buf oid; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); siglen = ctx->len; - if( siglen < 16 || siglen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( siglen < 16 || siglen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ret = ( mode == MBEDTLS_RSA_PUBLIC ) ? mbedtls_rsa_public( ctx, sig, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); p = buf; - if( *p++ != 0 || *p++ != MBEDTLS_RSA_SIGN ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( *p++ != 0 || *p++ != MBEDTLS_RSA_SIGN ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - while( *p != 0 ) - { - if( p >= buf + siglen - 1 || *p != 0xFF ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + while ( *p != 0 ) { + if ( p >= buf + siglen - 1 || *p != 0xFF ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); p++; } p++; len = siglen - ( p - buf ); - if( len == hashlen && md_alg == MBEDTLS_MD_NONE ) - { - if( memcmp( p, hash, hashlen ) == 0 ) - return( 0 ); + if ( len == hashlen && md_alg == MBEDTLS_MD_NONE ) { + if ( memcmp( p, hash, hashlen ) == 0 ) + return ( 0 ); else - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); } md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); end = p + len; @@ -1391,53 +1376,53 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, /* * Parse the ASN.1 structure inside the PKCS#1 v1.5 structure */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( asn1_len + 2 != len ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( asn1_len + 2 != len ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( asn1_len + 6 + hashlen != len ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( asn1_len + 6 + hashlen != len ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); oid.p = p; p += oid.len; - if( mbedtls_oid_get_md_alg( &oid, &msg_md_alg ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( mbedtls_oid_get_md_alg( &oid, &msg_md_alg ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( md_alg != msg_md_alg ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( md_alg != msg_md_alg ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); /* * assume the algorithm parameters must be NULL */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_NULL ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_NULL ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( asn1_len != hashlen ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( asn1_len != hashlen ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( memcmp( p, hash, hashlen ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( memcmp( p, hash, hashlen ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); p += hashlen; - if( p != end ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( p != end ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -1445,30 +1430,29 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, * Do an RSA operation and check the message digest */ int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsassa_pkcs1_v15_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsassa_pss_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -1503,10 +1487,10 @@ int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src ) dst->hash_id = src->hash_id; cleanup: - if( ret != 0 ) + if ( ret != 0 ) mbedtls_rsa_free( dst ); - return( ret ); + return ( ret ); } /* @@ -1514,11 +1498,19 @@ cleanup: */ void mbedtls_rsa_free( mbedtls_rsa_context *ctx ) { - mbedtls_mpi_free( &ctx->Vi ); mbedtls_mpi_free( &ctx->Vf ); - mbedtls_mpi_free( &ctx->RQ ); mbedtls_mpi_free( &ctx->RP ); mbedtls_mpi_free( &ctx->RN ); - mbedtls_mpi_free( &ctx->QP ); mbedtls_mpi_free( &ctx->DQ ); mbedtls_mpi_free( &ctx->DP ); - mbedtls_mpi_free( &ctx->Q ); mbedtls_mpi_free( &ctx->P ); mbedtls_mpi_free( &ctx->D ); - mbedtls_mpi_free( &ctx->E ); mbedtls_mpi_free( &ctx->N ); + mbedtls_mpi_free( &ctx->Vi ); + mbedtls_mpi_free( &ctx->Vf ); + mbedtls_mpi_free( &ctx->RQ ); + mbedtls_mpi_free( &ctx->RP ); + mbedtls_mpi_free( &ctx->RN ); + mbedtls_mpi_free( &ctx->QP ); + mbedtls_mpi_free( &ctx->DQ ); + mbedtls_mpi_free( &ctx->DP ); + mbedtls_mpi_free( &ctx->Q ); + mbedtls_mpi_free( &ctx->P ); + mbedtls_mpi_free( &ctx->D ); + mbedtls_mpi_free( &ctx->E ); + mbedtls_mpi_free( &ctx->N ); #if defined(MBEDTLS_THREADING_C) mbedtls_mutex_free( &ctx->mutex ); @@ -1589,19 +1581,19 @@ static int myrand( void *rng_state, unsigned char *output, size_t len ) #if !defined(__OpenBSD__) size_t i; - if( rng_state != NULL ) + if ( rng_state != NULL ) rng_state = NULL; - for( i = 0; i < len; ++i ) + for ( i = 0; i < len; ++i ) output[i] = rand(); #else - if( rng_state != NULL ) + if ( rng_state != NULL ) rng_state = NULL; arc4random_buf( output, len ); #endif /* !OpenBSD */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -1624,97 +1616,91 @@ int mbedtls_rsa_self_test( int verbose ) mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 ); rsa.len = KEY_LEN; - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.N , 16, RSA_N ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.E , 16, RSA_E ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.D , 16, RSA_D ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.P , 16, RSA_P ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.Q , 16, RSA_Q ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.N, 16, RSA_N ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.E, 16, RSA_E ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.D, 16, RSA_D ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.P, 16, RSA_P ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.Q, 16, RSA_Q ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.DP, 16, RSA_DP ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.DQ, 16, RSA_DQ ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.QP, 16, RSA_QP ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " RSA key validation: " ); - if( mbedtls_rsa_check_pubkey( &rsa ) != 0 || - mbedtls_rsa_check_privkey( &rsa ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_check_pubkey( &rsa ) != 0 || + mbedtls_rsa_check_privkey( &rsa ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n PKCS#1 encryption : " ); memcpy( rsa_plaintext, RSA_PT, PT_LEN ); - if( mbedtls_rsa_pkcs1_encrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PUBLIC, PT_LEN, - rsa_plaintext, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_encrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PUBLIC, PT_LEN, + rsa_plaintext, rsa_ciphertext ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n PKCS#1 decryption : " ); - if( mbedtls_rsa_pkcs1_decrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, &len, - rsa_ciphertext, rsa_decrypted, - sizeof(rsa_decrypted) ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_decrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, &len, + rsa_ciphertext, rsa_decrypted, + sizeof(rsa_decrypted) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); #if defined(MBEDTLS_SHA1_C) - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " PKCS#1 data sign : " ); mbedtls_sha1( rsa_plaintext, PT_LEN, sha1sum ); - if( mbedtls_rsa_pkcs1_sign( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, MBEDTLS_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_sign( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, MBEDTLS_MD_SHA1, 0, + sha1sum, rsa_ciphertext ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n PKCS#1 sig. verify: " ); - if( mbedtls_rsa_pkcs1_verify( &rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_verify( &rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA1, 0, + sha1sum, rsa_ciphertext ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); #endif /* MBEDTLS_SHA1_C */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); cleanup: @@ -1722,7 +1708,7 @@ cleanup: #else /* MBEDTLS_PKCS1_V15 */ ((void) verbose); #endif /* MBEDTLS_PKCS1_V15 */ - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha1.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha1.c index 2ccf2a2f..2fad9f7d 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha1.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha1.c @@ -48,8 +48,10 @@ #if !defined(MBEDTLS_SHA1_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -82,7 +84,7 @@ void mbedtls_sha1_init( mbedtls_sha1_context *ctx ) void mbedtls_sha1_free( mbedtls_sha1_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_sha1_context ) ); @@ -275,7 +277,7 @@ void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -284,11 +286,10 @@ void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_sha1_process( ctx, ctx->buffer ); input += fill; @@ -296,20 +297,18 @@ void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_sha1_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) + if ( ilen > 0 ) memcpy( (void *) (ctx->buffer + left), input, ilen ); } -static const unsigned char sha1_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char sha1_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -325,7 +324,7 @@ void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, unsigned char output[20] ) unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_BE( high, msglen, 0 ); @@ -364,26 +363,29 @@ void mbedtls_sha1( const unsigned char *input, size_t ilen, unsigned char output /* * FIPS-180-1 test vectors */ -static const unsigned char sha1_test_buf[3][57] = -{ +static const unsigned char sha1_test_buf[3][57] = { { "abc" }, { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, { "" } }; -static const int sha1_test_buflen[3] = -{ +static const int sha1_test_buflen[3] = { 3, 56, 1000 }; -static const unsigned char sha1_test_sum[3][20] = -{ - { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, - 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, - { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, - 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, - { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, - 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } +static const unsigned char sha1_test_sum[3][20] = { + { + 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, + 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D + }, + { + 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, + 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 + }, + { + 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, + 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F + } }; /* @@ -401,46 +403,42 @@ int mbedtls_sha1_self_test( int verbose ) /* * SHA-1 */ - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 3; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " SHA-1 test #%d: ", i + 1 ); mbedtls_sha1_starts( &ctx ); - if( i == 2 ) - { + if ( i == 2 ) { memset( buf, 'a', buflen = 1000 ); - for( j = 0; j < 1000; j++ ) + for ( j = 0; j < 1000; j++ ) mbedtls_sha1_update( &ctx, buf, buflen ); - } - else + } else mbedtls_sha1_update( &ctx, sha1_test_buf[i], - sha1_test_buflen[i] ); + sha1_test_buflen[i] ); mbedtls_sha1_finish( &ctx, sha1sum ); - if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_sha1_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha256.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha256.c index ad25d383..1906fe96 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha256.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha256.c @@ -51,8 +51,10 @@ #if !defined(MBEDTLS_SHA256_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -85,7 +87,7 @@ void mbedtls_sha256_init( mbedtls_sha256_context *ctx ) void mbedtls_sha256_free( mbedtls_sha256_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_sha256_context ) ); @@ -105,8 +107,7 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ) ctx->total[0] = 0; ctx->total[1] = 0; - if( is224 == 0 ) - { + if ( is224 == 0 ) { /* SHA-256 */ ctx->state[0] = 0x6A09E667; ctx->state[1] = 0xBB67AE85; @@ -116,9 +117,7 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ) ctx->state[5] = 0x9B05688C; ctx->state[6] = 0x1F83D9AB; ctx->state[7] = 0x5BE0CD19; - } - else - { + } else { /* SHA-224 */ ctx->state[0] = 0xC1059ED8; ctx->state[1] = 0x367CD507; @@ -134,8 +133,7 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ) } #if !defined(MBEDTLS_SHA256_PROCESS_ALT) -static const uint32_t K[] = -{ +static const uint32_t K[] = { 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, @@ -185,52 +183,56 @@ void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char da uint32_t A[8]; unsigned int i; - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) A[i] = ctx->state[i]; #if defined(MBEDTLS_SHA256_SMALLER) - for( i = 0; i < 64; i++ ) - { - if( i < 16 ) + for ( i = 0; i < 64; i++ ) { + if ( i < 16 ) GET_UINT32_BE( W[i], data, 4 * i ); else R( i ); P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i], K[i] ); - temp1 = A[7]; A[7] = A[6]; A[6] = A[5]; A[5] = A[4]; A[4] = A[3]; - A[3] = A[2]; A[2] = A[1]; A[1] = A[0]; A[0] = temp1; + temp1 = A[7]; + A[7] = A[6]; + A[6] = A[5]; + A[5] = A[4]; + A[4] = A[3]; + A[3] = A[2]; + A[2] = A[1]; + A[1] = A[0]; + A[0] = temp1; } #else /* MBEDTLS_SHA256_SMALLER */ - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) GET_UINT32_BE( W[i], data, 4 * i ); - for( i = 0; i < 16; i += 8 ) - { - P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i+0], K[i+0] ); - P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], W[i+1], K[i+1] ); - P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], W[i+2], K[i+2] ); - P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], W[i+3], K[i+3] ); - P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], W[i+4], K[i+4] ); - P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], W[i+5], K[i+5] ); - P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], W[i+6], K[i+6] ); - P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], W[i+7], K[i+7] ); + for ( i = 0; i < 16; i += 8 ) { + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i + 0], K[i + 0] ); + P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], W[i + 1], K[i + 1] ); + P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], W[i + 2], K[i + 2] ); + P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], W[i + 3], K[i + 3] ); + P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], W[i + 4], K[i + 4] ); + P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], W[i + 5], K[i + 5] ); + P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], W[i + 6], K[i + 6] ); + P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], W[i + 7], K[i + 7] ); } - for( i = 16; i < 64; i += 8 ) - { - P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], R(i+0), K[i+0] ); - P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], R(i+1), K[i+1] ); - P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], R(i+2), K[i+2] ); - P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], R(i+3), K[i+3] ); - P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], R(i+4), K[i+4] ); - P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], R(i+5), K[i+5] ); - P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], R(i+6), K[i+6] ); - P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], R(i+7), K[i+7] ); + for ( i = 16; i < 64; i += 8 ) { + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], R(i + 0), K[i + 0] ); + P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], R(i + 1), K[i + 1] ); + P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], R(i + 2), K[i + 2] ); + P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], R(i + 3), K[i + 3] ); + P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], R(i + 4), K[i + 4] ); + P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], R(i + 5), K[i + 5] ); + P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], R(i + 6), K[i + 6] ); + P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], R(i + 7), K[i + 7] ); } #endif /* MBEDTLS_SHA256_SMALLER */ - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) ctx->state[i] += A[i]; } #endif /* !MBEDTLS_SHA256_PROCESS_ALT */ @@ -239,12 +241,12 @@ void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char da * SHA-256 process buffer */ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input, - size_t ilen ) + size_t ilen ) { size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -253,11 +255,10 @@ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *in ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_sha256_process( ctx, ctx->buffer ); input += fill; @@ -265,20 +266,18 @@ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *in left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_sha256_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) + if ( ilen > 0 ) memcpy( (void *) (ctx->buffer + left), input, ilen ); } -static const unsigned char sha256_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char sha256_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -294,7 +293,7 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32 unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_BE( high, msglen, 0 ); @@ -314,7 +313,7 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32 PUT_UINT32_BE( ctx->state[5], output, 20 ); PUT_UINT32_BE( ctx->state[6], output, 24 ); - if( ctx->is224 == 0 ) + if ( ctx->is224 == 0 ) PUT_UINT32_BE( ctx->state[7], output, 28 ); } @@ -324,7 +323,7 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32 * output = SHA-256( input buffer ) */ void mbedtls_sha256( const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) + unsigned char output[32], int is224 ) { mbedtls_sha256_context ctx; @@ -339,51 +338,60 @@ void mbedtls_sha256( const unsigned char *input, size_t ilen, /* * FIPS-180-2 test vectors */ -static const unsigned char sha256_test_buf[3][57] = -{ +static const unsigned char sha256_test_buf[3][57] = { { "abc" }, { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, { "" } }; -static const int sha256_test_buflen[3] = -{ +static const int sha256_test_buflen[3] = { 3, 56, 1000 }; -static const unsigned char sha256_test_sum[6][32] = -{ +static const unsigned char sha256_test_sum[6][32] = { /* * SHA-224 test vectors */ - { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, - 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, - 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, - 0xE3, 0x6C, 0x9D, 0xA7 }, - { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, - 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, - 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, - 0x52, 0x52, 0x25, 0x25 }, - { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, - 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, - 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, - 0x4E, 0xE7, 0xAD, 0x67 }, + { + 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, + 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, + 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, + 0xE3, 0x6C, 0x9D, 0xA7 + }, + { + 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, + 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, + 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, + 0x52, 0x52, 0x25, 0x25 + }, + { + 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, + 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, + 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, + 0x4E, 0xE7, 0xAD, 0x67 + }, /* * SHA-256 test vectors */ - { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, - 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, - 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, - 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD }, - { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, - 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, - 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, - 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 }, - { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, - 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, - 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, - 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 } + { + 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, + 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, + 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, + 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD + }, + { + 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, + 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, + 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, + 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 + }, + { + 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, + 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, + 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, + 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 + } }; /* @@ -397,60 +405,55 @@ int mbedtls_sha256_self_test( int verbose ) mbedtls_sha256_context ctx; buf = mbedtls_calloc( 1024, sizeof(unsigned char) ); - if( NULL == buf ) - { - if( verbose != 0 ) + if ( NULL == buf ) { + if ( verbose != 0 ) mbedtls_printf( "Buffer allocation failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_sha256_init( &ctx ); - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { j = i % 3; k = i < 3; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " SHA-%d test #%d: ", 256 - k * 32, j + 1 ); mbedtls_sha256_starts( &ctx, k ); - if( j == 2 ) - { + if ( j == 2 ) { memset( buf, 'a', buflen = 1000 ); - for( j = 0; j < 1000; j++ ) + for ( j = 0; j < 1000; j++ ) mbedtls_sha256_update( &ctx, buf, buflen ); - } - else + } else mbedtls_sha256_update( &ctx, sha256_test_buf[j], - sha256_test_buflen[j] ); + sha256_test_buflen[j] ); mbedtls_sha256_finish( &ctx, sha256sum ); - if( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_sha256_free( &ctx ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha512.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha512.c index 724522ac..18a58ebc 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha512.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/sha512.c @@ -35,9 +35,9 @@ #include "mbedtls/sha512.h" #if defined(_MSC_VER) || defined(__WATCOMC__) - #define UL64(x) x##ui64 +#define UL64(x) x##ui64 #else - #define UL64(x) x##ULL +#define UL64(x) x##ULL #endif #include @@ -57,8 +57,10 @@ #if !defined(MBEDTLS_SHA512_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -99,7 +101,7 @@ void mbedtls_sha512_init( mbedtls_sha512_context *ctx ) void mbedtls_sha512_free( mbedtls_sha512_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_sha512_context ) ); @@ -119,8 +121,7 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ) ctx->total[0] = 0; ctx->total[1] = 0; - if( is384 == 0 ) - { + if ( is384 == 0 ) { /* SHA-512 */ ctx->state[0] = UL64(0x6A09E667F3BCC908); ctx->state[1] = UL64(0xBB67AE8584CAA73B); @@ -130,9 +131,7 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ) ctx->state[5] = UL64(0x9B05688C2B3E6C1F); ctx->state[6] = UL64(0x1F83D9ABFB41BD6B); ctx->state[7] = UL64(0x5BE0CD19137E2179); - } - else - { + } else { /* SHA-384 */ ctx->state[0] = UL64(0xCBBB9D5DC1059ED8); ctx->state[1] = UL64(0x629A292A367CD507); @@ -152,8 +151,7 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ) /* * Round constants */ -static const uint64_t K[80] = -{ +static const uint64_t K[80] = { UL64(0x428A2F98D728AE22), UL64(0x7137449123EF65CD), UL64(0xB5C0FBCFEC4D3B2F), UL64(0xE9B5DBA58189DBBC), UL64(0x3956C25BF348B538), UL64(0x59F111F1B605D019), @@ -221,13 +219,11 @@ void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char da d += temp1; h = temp1 + temp2; \ } - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { GET_UINT64_BE( W[i], data, i << 3 ); } - for( ; i < 80; i++ ) - { + for ( ; i < 80; i++ ) { W[i] = S1(W[i - 2]) + W[i - 7] + S0(W[i - 15]) + W[i - 16]; } @@ -242,18 +238,24 @@ void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char da H = ctx->state[7]; i = 0; - do - { - P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++; - P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++; - P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++; - P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++; - P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++; - P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++; - P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++; - P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++; - } - while( i < 80 ); + do { + P( A, B, C, D, E, F, G, H, W[i], K[i] ); + i++; + P( H, A, B, C, D, E, F, G, W[i], K[i] ); + i++; + P( G, H, A, B, C, D, E, F, W[i], K[i] ); + i++; + P( F, G, H, A, B, C, D, E, W[i], K[i] ); + i++; + P( E, F, G, H, A, B, C, D, W[i], K[i] ); + i++; + P( D, E, F, G, H, A, B, C, W[i], K[i] ); + i++; + P( C, D, E, F, G, H, A, B, W[i], K[i] ); + i++; + P( B, C, D, E, F, G, H, A, W[i], K[i] ); + i++; + } while ( i < 80 ); ctx->state[0] += A; ctx->state[1] += B; @@ -270,12 +272,12 @@ void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char da * SHA-512 process buffer */ void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *input, - size_t ilen ) + size_t ilen ) { size_t fill; unsigned int left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = (unsigned int) (ctx->total[0] & 0x7F); @@ -283,11 +285,10 @@ void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *in ctx->total[0] += (uint64_t) ilen; - if( ctx->total[0] < (uint64_t) ilen ) + if ( ctx->total[0] < (uint64_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_sha512_process( ctx, ctx->buffer ); input += fill; @@ -295,20 +296,18 @@ void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *in left = 0; } - while( ilen >= 128 ) - { + while ( ilen >= 128 ) { mbedtls_sha512_process( ctx, input ); input += 128; ilen -= 128; } - if( ilen > 0 ) + if ( ilen > 0 ) memcpy( (void *) (ctx->buffer + left), input, ilen ); } -static const unsigned char sha512_padding[128] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char sha512_padding[128] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -328,7 +327,7 @@ void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64 unsigned char msglen[16]; high = ( ctx->total[0] >> 61 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT64_BE( high, msglen, 0 ); @@ -347,8 +346,7 @@ void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64 PUT_UINT64_BE( ctx->state[4], output, 32 ); PUT_UINT64_BE( ctx->state[5], output, 40 ); - if( ctx->is384 == 0 ) - { + if ( ctx->is384 == 0 ) { PUT_UINT64_BE( ctx->state[6], output, 48 ); PUT_UINT64_BE( ctx->state[7], output, 56 ); } @@ -360,7 +358,7 @@ void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64 * output = SHA-512( input buffer ) */ void mbedtls_sha512( const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) + unsigned char output[64], int is384 ) { mbedtls_sha512_context ctx; @@ -376,70 +374,81 @@ void mbedtls_sha512( const unsigned char *input, size_t ilen, /* * FIPS-180-2 test vectors */ -static const unsigned char sha512_test_buf[3][113] = -{ +static const unsigned char sha512_test_buf[3][113] = { { "abc" }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" - "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" }, + { + "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" + "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" + }, { "" } }; -static const int sha512_test_buflen[3] = -{ +static const int sha512_test_buflen[3] = { 3, 112, 1000 }; -static const unsigned char sha512_test_sum[6][64] = -{ +static const unsigned char sha512_test_sum[6][64] = { /* * SHA-384 test vectors */ - { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, - 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, - 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, - 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, - 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, - 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 }, - { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, - 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, - 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, - 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, - 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, - 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 }, - { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, - 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, - 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, - 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, - 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, - 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 }, + { + 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, + 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, + 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, + 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, + 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, + 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 + }, + { + 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, + 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, + 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, + 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, + 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, + 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 + }, + { + 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, + 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, + 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, + 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, + 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, + 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 + }, /* * SHA-512 test vectors */ - { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, - 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, - 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, - 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, - 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, - 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, - 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, - 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F }, - { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, - 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, - 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, - 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, - 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, - 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, - 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, - 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 }, - { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, - 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, - 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, - 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, - 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, - 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, - 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, - 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B } + { + 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, + 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, + 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, + 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, + 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, + 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, + 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, + 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F + }, + { + 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, + 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, + 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, + 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, + 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, + 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, + 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, + 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 + }, + { + 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, + 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, + 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, + 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, + 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, + 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, + 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, + 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B + } }; /* @@ -453,60 +462,55 @@ int mbedtls_sha512_self_test( int verbose ) mbedtls_sha512_context ctx; buf = mbedtls_calloc( 1024, sizeof(unsigned char) ); - if( NULL == buf ) - { - if( verbose != 0 ) + if ( NULL == buf ) { + if ( verbose != 0 ) mbedtls_printf( "Buffer allocation failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_sha512_init( &ctx ); - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { j = i % 3; k = i < 3; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " SHA-%d test #%d: ", 512 - k * 128, j + 1 ); mbedtls_sha512_starts( &ctx, k ); - if( j == 2 ) - { + if ( j == 2 ) { memset( buf, 'a', buflen = 1000 ); - for( j = 0; j < 1000; j++ ) + for ( j = 0; j < 1000; j++ ) mbedtls_sha512_update( &ctx, buf, buflen ); - } - else + } else mbedtls_sha512_update( &ctx, sha512_test_buf[j], - sha512_test_buflen[j] ); + sha512_test_buflen[j] ); mbedtls_sha512_finish( &ctx, sha512sum ); - if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_sha512_free( &ctx ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cache.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cache.c index 9b62de2d..5a249724 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cache.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cache.c @@ -65,31 +65,30 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) mbedtls_ssl_cache_entry *cur, *entry; #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_lock( &cache->mutex ) != 0 ) - return( 1 ); + if ( mbedtls_mutex_lock( &cache->mutex ) != 0 ) + return ( 1 ); #endif cur = cache->chain; entry = NULL; - while( cur != NULL ) - { + while ( cur != NULL ) { entry = cur; cur = cur->next; #if defined(MBEDTLS_HAVE_TIME) - if( cache->timeout != 0 && - (int) ( t - entry->timestamp ) > cache->timeout ) + if ( cache->timeout != 0 && + (int) ( t - entry->timestamp ) > cache->timeout ) continue; #endif - if( session->ciphersuite != entry->session.ciphersuite || - session->compression != entry->session.compression || - session->id_len != entry->session.id_len ) + if ( session->ciphersuite != entry->session.ciphersuite || + session->compression != entry->session.compression || + session->id_len != entry->session.id_len ) continue; - if( memcmp( session->id, entry->session.id, - entry->session.id_len ) != 0 ) + if ( memcmp( session->id, entry->session.id, + entry->session.id_len ) != 0 ) continue; memcpy( session->master, entry->session.master, 48 ); @@ -100,19 +99,16 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) /* * Restore peer certificate (without rest of the original chain) */ - if( entry->peer_cert.p != NULL ) - { - if( ( session->peer_cert = mbedtls_calloc( 1, - sizeof(mbedtls_x509_crt) ) ) == NULL ) - { + if ( entry->peer_cert.p != NULL ) { + if ( ( session->peer_cert = mbedtls_calloc( 1, + sizeof(mbedtls_x509_crt) ) ) == NULL ) { ret = 1; goto exit; } mbedtls_x509_crt_init( session->peer_cert ); - if( mbedtls_x509_crt_parse( session->peer_cert, entry->peer_cert.p, - entry->peer_cert.len ) != 0 ) - { + if ( mbedtls_x509_crt_parse( session->peer_cert, entry->peer_cert.p, + entry->peer_cert.len ) != 0 ) { mbedtls_free( session->peer_cert ); session->peer_cert = NULL; ret = 1; @@ -127,11 +123,11 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) + if ( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) ret = 1; #endif - return( ret ); + return ( ret ); } int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) @@ -146,32 +142,29 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) int count = 0; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &cache->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &cache->mutex ) ) != 0 ) + return ( ret ); #endif cur = cache->chain; prv = NULL; - while( cur != NULL ) - { + while ( cur != NULL ) { count++; #if defined(MBEDTLS_HAVE_TIME) - if( cache->timeout != 0 && - (int) ( t - cur->timestamp ) > cache->timeout ) - { + if ( cache->timeout != 0 && + (int) ( t - cur->timestamp ) > cache->timeout ) { cur->timestamp = t; break; /* expired, reuse this slot, update timestamp */ } #endif - if( memcmp( session->id, cur->session.id, cur->session.id_len ) == 0 ) + if ( memcmp( session->id, cur->session.id, cur->session.id_len ) == 0 ) break; /* client reconnected, keep timestamp for session id */ #if defined(MBEDTLS_HAVE_TIME) - if( oldest == 0 || cur->timestamp < oldest ) - { + if ( oldest == 0 || cur->timestamp < oldest ) { oldest = cur->timestamp; old = cur; } @@ -181,16 +174,13 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) cur = cur->next; } - if( cur == NULL ) - { + if ( cur == NULL ) { #if defined(MBEDTLS_HAVE_TIME) /* * Reuse oldest entry if max_entries reached */ - if( count >= cache->max_entries ) - { - if( old == NULL ) - { + if ( count >= cache->max_entries ) { + if ( old == NULL ) { ret = 1; goto exit; } @@ -202,10 +192,8 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) * Reuse first entry in chain if max_entries reached, * but move to last place */ - if( count >= cache->max_entries ) - { - if( cache->chain == NULL ) - { + if ( count >= cache->max_entries ) { + if ( cache->chain == NULL ) { ret = 1; goto exit; } @@ -216,19 +204,17 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) prv->next = cur; } #endif /* MBEDTLS_HAVE_TIME */ - else - { + else { /* * max_entries not reached, create new entry */ cur = mbedtls_calloc( 1, sizeof(mbedtls_ssl_cache_entry) ); - if( cur == NULL ) - { + if ( cur == NULL ) { ret = 1; goto exit; } - if( prv == NULL ) + if ( prv == NULL ) cache->chain = cur; else prv->next = cur; @@ -245,8 +231,7 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) /* * If we're reusing an entry, free its certificate first */ - if( cur->peer_cert.p != NULL ) - { + if ( cur->peer_cert.p != NULL ) { mbedtls_free( cur->peer_cert.p ); memset( &cur->peer_cert, 0, sizeof(mbedtls_x509_buf) ); } @@ -254,11 +239,9 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) /* * Store peer certificate */ - if( session->peer_cert != NULL ) - { + if ( session->peer_cert != NULL ) { cur->peer_cert.p = mbedtls_calloc( 1, session->peer_cert->raw.len ); - if( cur->peer_cert.p == NULL ) - { + if ( cur->peer_cert.p == NULL ) { ret = 1; goto exit; } @@ -275,17 +258,17 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) + if ( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) ret = 1; #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_HAVE_TIME) void mbedtls_ssl_cache_set_timeout( mbedtls_ssl_cache_context *cache, int timeout ) { - if( timeout < 0 ) timeout = 0; + if ( timeout < 0 ) timeout = 0; cache->timeout = timeout; } @@ -293,7 +276,7 @@ void mbedtls_ssl_cache_set_timeout( mbedtls_ssl_cache_context *cache, int timeou void mbedtls_ssl_cache_set_max_entries( mbedtls_ssl_cache_context *cache, int max ) { - if( max < 0 ) max = 0; + if ( max < 0 ) max = 0; cache->max_entries = max; } @@ -304,8 +287,7 @@ void mbedtls_ssl_cache_free( mbedtls_ssl_cache_context *cache ) cur = cache->chain; - while( cur != NULL ) - { + while ( cur != NULL ) { prv = cur; cur = cur->next; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c index a762bf7c..9d0186d0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c @@ -52,8 +52,7 @@ * 4. By hash function used when relevant * 5. By key exchange/auth again: EC > non-EC */ -static const int ciphersuite_preference[] = -{ +static const int ciphersuite_preference[] = { #if defined(MBEDTLS_SSL_CIPHERSUITES) MBEDTLS_SSL_CIPHERSUITES, #else @@ -264,112 +263,139 @@ static const int ciphersuite_preference[] = 0 }; -static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = -{ +static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = { #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -377,32 +403,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS-ECDHE-ECDSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS-ECDHE-ECDSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA, "TLS-ECDHE-ECDSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA, "TLS-ECDHE-ECDSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ @@ -411,48 +443,60 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_AES_C */ @@ -460,35 +504,43 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -496,32 +548,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS-ECDHE-RSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS-ECDHE-RSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA, "TLS-ECDHE-RSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA, "TLS-ECDHE-RSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ @@ -529,121 +587,153 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C && MBEDTLS_GCM_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM, "TLS-DHE-RSA-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8, "TLS-DHE-RSA-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM, "TLS-DHE-RSA-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8, "TLS-DHE-RSA-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM, "TLS-DHE-RSA-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8, "TLS-DHE-RSA-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM, "TLS-DHE-RSA-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8, "TLS-DHE-RSA-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -651,11 +741,13 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ @@ -664,122 +756,154 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C && MBEDTLS_GCM_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256, "TLS-RSA-WITH-AES-256-CBC-SHA256", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256, "TLS-RSA-WITH-AES-256-CBC-SHA256", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA, "TLS-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA, "TLS-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA, "TLS-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA, "TLS-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_RSA_WITH_AES_256_CCM, "TLS-RSA-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8, "TLS-RSA-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_RSA_WITH_AES_128_CCM, "TLS-RSA-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8, "TLS-RSA-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_CCM, "TLS-RSA-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8, "TLS-RSA-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CCM, "TLS-RSA-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8, "TLS-RSA-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -787,30 +911,36 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_MD5_C) - { MBEDTLS_TLS_RSA_WITH_RC4_128_MD5, "TLS-RSA-WITH-RC4-128-MD5", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_RSA_WITH_RC4_128_MD5, "TLS-RSA-WITH-RC4-128-MD5", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_RC4_128_SHA, "TLS-RSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_RSA_WITH_RC4_128_SHA, "TLS-RSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ @@ -819,48 +949,60 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_AES_C */ @@ -868,35 +1010,43 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -904,32 +1054,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA, "TLS-ECDH-RSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA, "TLS-ECDH-RSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA, "TLS-ECDH-RSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA, "TLS-ECDH-RSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED */ @@ -938,48 +1094,60 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_AES_C */ @@ -987,35 +1155,43 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1023,32 +1199,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA, "TLS-ECDH-ECDSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA, "TLS-ECDH-ECDSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA, "TLS-ECDH-ECDSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA, "TLS-ECDH-ECDSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ @@ -1057,111 +1239,139 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256, "TLS-PSK-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256, "TLS-PSK-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384, "TLS-PSK-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384, "TLS-PSK-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, "TLS-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, "TLS-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384, "TLS-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384, "TLS-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, "TLS-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, "TLS-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, "TLS-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, "TLS-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_PSK_WITH_AES_256_CCM, "TLS-PSK-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, "TLS-PSK-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_PSK_WITH_AES_128_CCM, "TLS-PSK-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, "TLS-PSK-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CCM, "TLS-PSK-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, "TLS-PSK-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CCM, "TLS-PSK-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, "TLS-PSK-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-PSK-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-PSK-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-PSK-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-PSK-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1169,22 +1379,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_RC4_128_SHA, "TLS-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_PSK_WITH_RC4_128_SHA, "TLS-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ @@ -1193,111 +1407,139 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, "TLS-DHE-PSK-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, "TLS-DHE-PSK-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, "TLS-DHE-PSK-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, "TLS-DHE-PSK-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM, "TLS-DHE-PSK-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8, "TLS-DHE-PSK-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM, "TLS-DHE-PSK-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8, "TLS-DHE-PSK-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM, "TLS-DHE-PSK-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8, "TLS-DHE-PSK-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM, "TLS-DHE-PSK-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8, "TLS-DHE-PSK-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1305,22 +1547,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA, "TLS-DHE-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA, "TLS-DHE-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ @@ -1330,33 +1576,41 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_AES_C */ @@ -1364,19 +1618,23 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1384,22 +1642,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA, "TLS-ECDHE-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA, "TLS-ECDHE-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ @@ -1408,51 +1670,63 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, "TLS-RSA-PSK-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, "TLS-RSA-PSK-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, "TLS-RSA-PSK-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, "TLS-RSA-PSK-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, - { MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_AES_C */ @@ -1460,37 +1734,45 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1498,22 +1780,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA, "TLS-RSA-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA, "TLS-RSA-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ @@ -1521,11 +1807,13 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, "TLS-ECJPAKE-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECJPAKE, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, "TLS-ECJPAKE-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECJPAKE, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -1534,131 +1822,161 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) #if defined(MBEDTLS_MD5_C) - { MBEDTLS_TLS_RSA_WITH_NULL_MD5, "TLS-RSA-WITH-NULL-MD5", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_NULL_MD5, "TLS-RSA-WITH-NULL-MD5", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_NULL_SHA, "TLS-RSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_NULL_SHA, "TLS-RSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_WITH_NULL_SHA256, "TLS-RSA-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_NULL_SHA256, "TLS-RSA-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_NULL_SHA, "TLS-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_PSK_WITH_NULL_SHA, "TLS-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_NULL_SHA256, "TLS-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_PSK_WITH_NULL_SHA256, "TLS-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_NULL_SHA384, "TLS-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_PSK_WITH_NULL_SHA384, "TLS-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA, "TLS-DHE-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA, "TLS-DHE-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256, "TLS-DHE-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256, "TLS-DHE-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384, "TLS-DHE-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384, "TLS-DHE-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA, "TLS-ECDHE-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA, "TLS-ECDHE-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256, "TLS-ECDHE-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256, "TLS-ECDHE-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384, "TLS-ECDHE-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384, "TLS-ECDHE-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA, "TLS-RSA-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA, "TLS-RSA-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256, "TLS-RSA-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256, "TLS-RSA-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384, "TLS-RSA-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384, "TLS-RSA-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ @@ -1667,36 +1985,42 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA, "TLS-DHE-RSA-WITH-DES-CBC-SHA", - MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA, "TLS-DHE-RSA-WITH-DES-CBC-SHA", + MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA, "TLS-RSA-WITH-DES-CBC-SHA", - MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA, "TLS-RSA-WITH-DES-CBC-SHA", + MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #endif /* MBEDTLS_ENABLE_WEAK_CIPHERSUITES */ - { 0, "", - MBEDTLS_CIPHER_NONE, MBEDTLS_MD_NONE, MBEDTLS_KEY_EXCHANGE_NONE, - 0, 0, 0, 0, 0 } + { + 0, "", + MBEDTLS_CIPHER_NONE, MBEDTLS_MD_NONE, MBEDTLS_KEY_EXCHANGE_NONE, + 0, 0, 0, 0, 0 + } }; #if defined(MBEDTLS_SSL_CIPHERSUITES) const int *mbedtls_ssl_list_ciphersuites( void ) { - return( ciphersuite_preference ); + return ( ciphersuite_preference ); } #else #define MAX_CIPHERSUITES sizeof( ciphersuite_definitions ) / \ @@ -1710,65 +2034,61 @@ const int *mbedtls_ssl_list_ciphersuites( void ) * On initial call filter out all ciphersuites not supported by current * build based on presence in the ciphersuite_definitions. */ - if( supported_init == 0 ) - { + if ( supported_init == 0 ) { const int *p; int *q; - for( p = ciphersuite_preference, q = supported_ciphersuites; - *p != 0 && q < supported_ciphersuites + MAX_CIPHERSUITES - 1; - p++ ) - { + for ( p = ciphersuite_preference, q = supported_ciphersuites; + *p != 0 && q < supported_ciphersuites + MAX_CIPHERSUITES - 1; + p++ ) { #if defined(MBEDTLS_REMOVE_ARC4_CIPHERSUITES) const mbedtls_ssl_ciphersuite_t *cs_info; - if( ( cs_info = mbedtls_ssl_ciphersuite_from_id( *p ) ) != NULL && - cs_info->cipher != MBEDTLS_CIPHER_ARC4_128 ) + if ( ( cs_info = mbedtls_ssl_ciphersuite_from_id( *p ) ) != NULL && + cs_info->cipher != MBEDTLS_CIPHER_ARC4_128 ) #else - if( mbedtls_ssl_ciphersuite_from_id( *p ) != NULL ) + if ( mbedtls_ssl_ciphersuite_from_id( *p ) != NULL ) #endif - *(q++) = *p; + * (q++) = *p; } *q = 0; supported_init = 1; } - return( supported_ciphersuites ); + return ( supported_ciphersuites ); } #endif /* MBEDTLS_SSL_CIPHERSUITES */ const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_string( - const char *ciphersuite_name ) + const char *ciphersuite_name ) { const mbedtls_ssl_ciphersuite_t *cur = ciphersuite_definitions; - if( NULL == ciphersuite_name ) - return( NULL ); + if ( NULL == ciphersuite_name ) + return ( NULL ); - while( cur->id != 0 ) - { - if( 0 == strcmp( cur->name, ciphersuite_name ) ) - return( cur ); + while ( cur->id != 0 ) { + if ( 0 == strcmp( cur->name, ciphersuite_name ) ) + return ( cur ); cur++; } - return( NULL ); + return ( NULL ); } const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id( int ciphersuite ) { const mbedtls_ssl_ciphersuite_t *cur = ciphersuite_definitions; - while( cur->id != 0 ) - { - if( cur->id == ciphersuite ) - return( cur ); + while ( cur->id != 0 ) { + if ( cur->id == ciphersuite ) + return ( cur ); cur++; } - return( NULL ); + return ( NULL ); } const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ) @@ -1777,10 +2097,10 @@ const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ) cur = mbedtls_ssl_ciphersuite_from_id( ciphersuite_id ); - if( cur == NULL ) - return( "unknown" ); + if ( cur == NULL ) + return ( "unknown" ); - return( cur->name ); + return ( cur->name ); } int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ) @@ -1789,32 +2109,31 @@ int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ) cur = mbedtls_ssl_ciphersuite_from_string( ciphersuite_name ); - if( cur == NULL ) - return( 0 ); + if ( cur == NULL ) + return ( 0 ); - return( cur->id ); + return ( cur->id ); } #if defined(MBEDTLS_PK_C) mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg( const mbedtls_ssl_ciphersuite_t *info ) { - switch( info->key_exchange ) - { + switch ( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_RSA: case MBEDTLS_KEY_EXCHANGE_DHE_RSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: case MBEDTLS_KEY_EXCHANGE_RSA_PSK: - return( MBEDTLS_PK_RSA ); + return ( MBEDTLS_PK_RSA ); case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: - return( MBEDTLS_PK_ECDSA ); + return ( MBEDTLS_PK_ECDSA ); case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: - return( MBEDTLS_PK_ECKEY ); + return ( MBEDTLS_PK_ECKEY ); default: - return( MBEDTLS_PK_NONE ); + return ( MBEDTLS_PK_NONE ); } } #endif /* MBEDTLS_PK_C */ @@ -1822,17 +2141,16 @@ mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg( const mbedtls_ssl_ciph #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) int mbedtls_ssl_ciphersuite_uses_ec( const mbedtls_ssl_ciphersuite_t *info ) { - switch( info->key_exchange ) - { + switch ( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK: case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: - return( 1 ); + return ( 1 ); default: - return( 0 ); + return ( 0 ); } } #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C */ @@ -1840,16 +2158,15 @@ int mbedtls_ssl_ciphersuite_uses_ec( const mbedtls_ssl_ciphersuite_t *info ) #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) int mbedtls_ssl_ciphersuite_uses_psk( const mbedtls_ssl_ciphersuite_t *info ) { - switch( info->key_exchange ) - { + switch ( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_PSK: case MBEDTLS_KEY_EXCHANGE_RSA_PSK: case MBEDTLS_KEY_EXCHANGE_DHE_PSK: case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK: - return( 1 ); + return ( 1 ); default: - return( 0 ); + return ( 0 ); } } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cli.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cli.c index 223823b3..b1b81c98 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cli.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cli.c @@ -49,8 +49,10 @@ #if defined(MBEDTLS_SSL_SESSION_TICKETS) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #endif @@ -65,16 +67,15 @@ static void ssl_write_hostname_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->hostname == NULL ) + if ( ssl->hostname == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding server name extension: %s", - ssl->hostname ) ); + ssl->hostname ) ); hostname_len = strlen( ssl->hostname ); - if( end < p || (size_t)( end - p ) < hostname_len + 9 ) - { + if ( end < p || (size_t)( end - p ) < hostname_len + 9 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -118,21 +119,20 @@ static void ssl_write_hostname_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_RENEGOTIATION) static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) + if ( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding renegotiation extension" ) ); - if( end < p || (size_t)( end - p ) < 5 + ssl->verify_data_len ) - { + if ( end < p || (size_t)( end - p ) < 5 + ssl->verify_data_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -159,8 +159,8 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -172,13 +172,12 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->max_minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( ssl->conf->max_minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding signature_algorithms extension" ) ); - for( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) - { + for ( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) { #if defined(MBEDTLS_ECDSA_C) sig_alg_len += 2; #endif @@ -187,8 +186,7 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, #endif } - if( end < p || (size_t)( end - p ) < sig_alg_len + 6 ) - { + if ( end < p || (size_t)( end - p ) < sig_alg_len + 6 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -198,8 +196,7 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, */ sig_alg_len = 0; - for( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) - { + for ( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) { #if defined(MBEDTLS_ECDSA_C) sig_alg_list[sig_alg_len++] = mbedtls_ssl_hash_from_md_alg( *md ); sig_alg_list[sig_alg_len++] = MBEDTLS_SSL_SIG_ECDSA; @@ -244,8 +241,8 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -263,15 +260,12 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding supported_elliptic_curves extension" ) ); #if defined(MBEDTLS_ECP_C) - for( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) - { + for ( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) { info = mbedtls_ecp_curve_info_from_grp_id( *grp_id ); #else - for( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) - { + for ( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) { #endif - if( info == NULL ) - { + if ( info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid curve in ssl configuration" ) ); return; } @@ -279,8 +273,7 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, elliptic_curve_len += 2; } - if( end < p || (size_t)( end - p ) < 6 + elliptic_curve_len ) - { + if ( end < p || (size_t)( end - p ) < 6 + elliptic_curve_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -288,18 +281,16 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, elliptic_curve_len = 0; #if defined(MBEDTLS_ECP_C) - for( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) - { + for ( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) { info = mbedtls_ecp_curve_info_from_grp_id( *grp_id ); #else - for( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) - { + for ( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) { #endif elliptic_curve_list[elliptic_curve_len++] = info->tls_id >> 8; elliptic_curve_list[elliptic_curve_len++] = info->tls_id & 0xFF; } - if( elliptic_curve_len == 0 ) + if ( elliptic_curve_len == 0 ) return; *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES >> 8 ) & 0xFF ); @@ -315,8 +306,8 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, } static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -325,8 +316,7 @@ static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding supported_point_formats extension" ) ); - if( end < p || (size_t)( end - p ) < 6 ) - { + if ( end < p || (size_t)( end - p ) < 6 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -358,13 +348,12 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, *olen = 0; /* Skip costly extension if we can't use EC J-PAKE anyway */ - if( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) + if ( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding ecjpake_kkpp extension" ) ); - if( end - p < 4 ) - { + if ( end - p < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -377,38 +366,32 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, * We don't want to compute fresh values every time (both for performance * and consistency reasons), so cache the extension content. */ - if( ssl->handshake->ecjpake_cache == NULL || - ssl->handshake->ecjpake_cache_len == 0 ) - { + if ( ssl->handshake->ecjpake_cache == NULL || + ssl->handshake->ecjpake_cache_len == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "generating new ecjpake parameters" ) ); ret = mbedtls_ecjpake_write_round_one( &ssl->handshake->ecjpake_ctx, - p + 2, end - p - 2, &kkpp_len, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1 , "mbedtls_ecjpake_write_round_one", ret ); + p + 2, end - p - 2, &kkpp_len, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_one", ret ); return; } ssl->handshake->ecjpake_cache = mbedtls_calloc( 1, kkpp_len ); - if( ssl->handshake->ecjpake_cache == NULL ) - { + if ( ssl->handshake->ecjpake_cache == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "allocation failed" ) ); return; } memcpy( ssl->handshake->ecjpake_cache, p + 2, kkpp_len ); ssl->handshake->ecjpake_cache_len = kkpp_len; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 3, ( "re-using cached ecjpake parameters" ) ); kkpp_len = ssl->handshake->ecjpake_cache_len; - if( (size_t)( end - p - 2 ) < kkpp_len ) - { + if ( (size_t)( end - p - 2 ) < kkpp_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -425,22 +408,21 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) { + if ( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding max_fragment_length extension" ) ); - if( end < p || (size_t)( end - p ) < 5 ) - { + if ( end < p || (size_t)( end - p ) < 5 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -459,22 +441,20 @@ static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, size_t *olen ) + unsigned char *buf, size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) - { + if ( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding truncated_hmac extension" ) ); - if( end < p || (size_t)( end - p ) < 4 ) - { + if ( end < p || (size_t)( end - p ) < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -491,24 +471,22 @@ static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, size_t *olen ) + unsigned char *buf, size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || - ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || + ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding encrypt_then_mac " - "extension" ) ); + "extension" ) ); - if( end < p || (size_t)( end - p ) < 4 ) - { + if ( end < p || (size_t)( end - p ) < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -532,17 +510,15 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding extended_master_secret " - "extension" ) ); + "extension" ) ); - if( end < p || (size_t)( end - p ) < 4 ) - { + if ( end < p || (size_t)( end - p ) < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -559,7 +535,7 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_SESSION_TICKETS) static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, size_t *olen ) + unsigned char *buf, size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -567,15 +543,13 @@ static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED ) - { + if ( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding session ticket extension" ) ); - if( end < p || (size_t)( end - p ) < 4 + tlen ) - { + if ( end < p || (size_t)( end - p ) < 4 + tlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -588,8 +562,7 @@ static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, *olen = 4; - if( ssl->session_negotiate->ticket == NULL || tlen == 0 ) - { + if ( ssl->session_negotiate->ticket == NULL || tlen == 0 ) { return; } @@ -612,18 +585,16 @@ static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->alpn_list == NULL ) - { + if ( ssl->conf->alpn_list == NULL ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding alpn extension" ) ); - for( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) + for ( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) alpnlen += (unsigned char)( strlen( *cur ) & 0xFF ) + 1; - if( end < p || (size_t)( end - p ) < 6 + alpnlen ) - { + if ( end < p || (size_t)( end - p ) < 6 + alpnlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -642,8 +613,7 @@ static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl, /* Skip writing extension and list length for now */ p += 4; - for( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) - { + for ( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) { *p = (unsigned char)( strlen( *cur ) & 0xFF ); memcpy( p + 1, *cur, *p ); p += 1 + *p; @@ -676,10 +646,9 @@ static int ssl_generate_random( mbedtls_ssl_context *ssl ) * When responding to a verify request, MUST reuse random (RFC 6347 4.2.1) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->verify_cookie != NULL ) - { - return( 0 ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->verify_cookie != NULL ) { + return ( 0 ); } #endif @@ -692,16 +661,16 @@ static int ssl_generate_random( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, current time: %lu", t ) ); #else - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) + return ( ret ); p += 4; #endif /* MBEDTLS_HAVE_TIME */ - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) @@ -716,25 +685,23 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client hello" ) ); - if( ssl->conf->f_rng == NULL ) - { + if ( ssl->conf->f_rng == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no RNG provided") ); - return( MBEDTLS_ERR_SSL_NO_RNG ); + return ( MBEDTLS_ERR_SSL_NO_RNG ); } #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { ssl->major_ver = ssl->conf->min_major_ver; ssl->minor_ver = ssl->conf->min_minor_ver; } - if( ssl->conf->max_major_ver == 0 ) - { + if ( ssl->conf->max_major_ver == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "configured max major version is invalid, " - "consider using mbedtls_ssl_config_defaults()" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "consider using mbedtls_ssl_config_defaults()" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* @@ -748,16 +715,15 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) p = buf + 4; mbedtls_ssl_write_version( ssl->conf->max_major_ver, ssl->conf->max_minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); p += 2; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, max version: [%d:%d]", - buf[4], buf[5] ) ); + buf[4], buf[5] ) ); - if( ( ret = ssl_generate_random( ssl ) ) != 0 ) - { + if ( ( ret = ssl_generate_random( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_generate_random", ret ); - return( ret ); + return ( ret ); } memcpy( p, ssl->handshake->randbytes, 32 ); @@ -778,12 +744,11 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) */ n = ssl->session_negotiate->id_len; - if( n < 16 || n > 32 || + if ( n < 16 || n > 32 || #if defined(MBEDTLS_SSL_RENEGOTIATION) - ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || + ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || #endif - ssl->handshake->resume == 0 ) - { + ssl->handshake->resume == 0 ) { n = 0; } @@ -793,16 +758,15 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * generate and include a Session ID in the TLS ClientHello." */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { - if( ssl->session_negotiate->ticket != NULL && - ssl->session_negotiate->ticket_len != 0 ) - { + if ( ssl->session_negotiate->ticket != NULL && + ssl->session_negotiate->ticket_len != 0 ) { ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id, 32 ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); ssl->session_negotiate->id_len = n = 32; } @@ -811,7 +775,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) *p++ = (unsigned char) n; - for( i = 0; i < n; i++ ) + for ( i = 0; i < n; i++ ) *p++ = ssl->session_negotiate->id[i]; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, session id len.: %d", n ) ); @@ -821,22 +785,18 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * DTLS cookie */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( ssl->handshake->verify_cookie == NULL ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( ssl->handshake->verify_cookie == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "no verify cookie to send" ) ); *p++ = 0; - } - else - { + } else { MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, cookie", - ssl->handshake->verify_cookie, - ssl->handshake->verify_cookie_len ); + ssl->handshake->verify_cookie, + ssl->handshake->verify_cookie_len ); *p++ = ssl->handshake->verify_cookie_len; memcpy( p, ssl->handshake->verify_cookie, - ssl->handshake->verify_cookie_len ); + ssl->handshake->verify_cookie_len ); p += ssl->handshake->verify_cookie_len; } } @@ -852,32 +812,31 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) q = p; p += 2; - for( i = 0; ciphersuites[i] != 0; i++ ) - { + for ( i = 0; ciphersuites[i] != 0; i++ ) { ciphersuite_info = mbedtls_ssl_ciphersuite_from_id( ciphersuites[i] ); - if( ciphersuite_info == NULL ) + if ( ciphersuite_info == NULL ) continue; - if( ciphersuite_info->min_minor_ver > ssl->conf->max_minor_ver || - ciphersuite_info->max_minor_ver < ssl->conf->min_minor_ver ) + if ( ciphersuite_info->min_minor_ver > ssl->conf->max_minor_ver || + ciphersuite_info->max_minor_ver < ssl->conf->min_minor_ver ) continue; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ( ciphersuite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ( ciphersuite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) continue; #endif #if defined(MBEDTLS_ARC4_C) - if( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && - ciphersuite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) + if ( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && + ciphersuite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) continue; #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && - mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && + mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) continue; #endif @@ -893,7 +852,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * Add TLS_EMPTY_RENEGOTIATION_INFO_SCSV */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { *p++ = (unsigned char)( MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO >> 8 ); @@ -903,8 +862,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) /* Some versions of OpenSSL don't handle it correctly if not at end */ #if defined(MBEDTLS_SSL_FALLBACK_SCSV) - if( ssl->conf->fallback == MBEDTLS_SSL_IS_FALLBACK ) - { + if ( ssl->conf->fallback == MBEDTLS_SSL_IS_FALLBACK ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "adding FALLBACK_SCSV" ) ); *p++ = (unsigned char)( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ); *p++ = (unsigned char)( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ); @@ -930,25 +888,22 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * an actual need for it. */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) offer_compress = 0; #endif - if( offer_compress ) - { + if ( offer_compress ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 2 ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d %d", - MBEDTLS_SSL_COMPRESS_DEFLATE, MBEDTLS_SSL_COMPRESS_NULL ) ); + MBEDTLS_SSL_COMPRESS_DEFLATE, MBEDTLS_SSL_COMPRESS_NULL ) ); *p++ = 2; *p++ = MBEDTLS_SSL_COMPRESS_DEFLATE; *p++ = MBEDTLS_SSL_COMPRESS_NULL; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 1 ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d", - MBEDTLS_SSL_COMPRESS_NULL ) ); + MBEDTLS_SSL_COMPRESS_NULL ) ); *p++ = 1; *p++ = MBEDTLS_SSL_COMPRESS_NULL; @@ -1020,10 +975,9 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) ((void) olen); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, total extension length: %d", - ext_len ) ); + ext_len ) ); - if( ext_len > 0 ) - { + if ( ext_len > 0 ) { *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( ext_len ) & 0xFF ); p += ext_len; @@ -1036,193 +990,180 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write client hello" ) ); - return( 0 ); + return ( 0 ); } static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { int ret; #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { /* Check verify-data in constant-time. The length OTOH is no secret */ - if( len != 1 + ssl->verify_data_len * 2 || - buf[0] != ssl->verify_data_len * 2 || - mbedtls_ssl_safer_memcmp( buf + 1, - ssl->own_verify_data, ssl->verify_data_len ) != 0 || - mbedtls_ssl_safer_memcmp( buf + 1 + ssl->verify_data_len, - ssl->peer_verify_data, ssl->verify_data_len ) != 0 ) - { + if ( len != 1 + ssl->verify_data_len * 2 || + buf[0] != ssl->verify_data_len * 2 || + mbedtls_ssl_safer_memcmp( buf + 1, + ssl->own_verify_data, ssl->verify_data_len ) != 0 || + mbedtls_ssl_safer_memcmp( buf + 1 + ssl->verify_data_len, + ssl->peer_verify_data, ssl->verify_data_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-matching renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - } - else + } else #endif /* MBEDTLS_SSL_RENEGOTIATION */ { - if( len != 1 || buf[0] != 0x00 ) - { + if ( len != 1 || buf[0] != 0x00 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-zero length renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static int ssl_parse_max_fragment_length_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { /* * server should use the extension only if we did, * and if so the server's value should match ours (and len is always 1) */ - if( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE || - len != 1 || - buf[0] != ssl->conf->mfl_code ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE || + len != 1 || + buf[0] != ssl->conf->mfl_code ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->session_negotiate->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) static int ssl_parse_extended_ms_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->handshake->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->handshake->new_session_ticket = 1; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static int ssl_parse_supported_point_formats_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t list_size; const unsigned char *p; list_size = buf[0]; - if( list_size + 1 != len ) - { + if ( list_size + 1 != len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } p = buf + 1; - while( list_size > 0 ) - { - if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || - p[0] == MBEDTLS_ECP_PF_COMPRESSED ) - { + while ( list_size > 0 ) { + if ( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || + p[0] == MBEDTLS_ECP_PF_COMPRESSED ) { #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) ssl->handshake->ecdh_ctx.point_format = p[0]; -#endif +#endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) ssl->handshake->ecjpake_ctx.point_format = p[0]; #endif MBEDTLS_SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) ); - return( 0 ); + return ( 0 ); } list_size--; @@ -1230,7 +1171,7 @@ static int ssl_parse_supported_point_formats_ext( mbedtls_ssl_context *ssl, } MBEDTLS_SSL_DEBUG_MSG( 1, ( "no point format in common" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -1242,11 +1183,10 @@ static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl, { int ret; - if( ssl->transform_negotiate->ciphersuite_info->key_exchange != - MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ssl->transform_negotiate->ciphersuite_info->key_exchange != + MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip ecjpake kkpp extension" ) ); - return( 0 ); + return ( 0 ); } /* If we got here, we no longer need our cached extension */ @@ -1254,14 +1194,13 @@ static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl, ssl->handshake->ecjpake_cache = NULL; ssl->handshake->ecjpake_cache_len = 0; - if( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, - buf, len ) ) != 0 ) - { + if ( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, + buf, len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_one", ret ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -1273,8 +1212,8 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, const char **p; /* If we didn't send it, the server shouldn't send it */ - if( ssl->conf->alpn_list == NULL ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->alpn_list == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); /* * opaque ProtocolName<1..2^8-1>; @@ -1287,29 +1226,27 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, */ /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */ - if( len < 4 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( len < 4 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); list_len = ( buf[0] << 8 ) | buf[1]; - if( list_len != len - 2 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( list_len != len - 2 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); name_len = buf[2]; - if( name_len != list_len - 1 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( name_len != list_len - 1 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); /* Check that the server chosen protocol was in our list and save it */ - for( p = ssl->conf->alpn_list; *p != NULL; p++ ) - { - if( name_len == strlen( *p ) && - memcmp( buf + 3, *p, name_len ) == 0 ) - { + for ( p = ssl->conf->alpn_list; *p != NULL; p++ ) { + if ( name_len == strlen( *p ) && + memcmp( buf + 3, *p, name_len ) == 0 ) { ssl->alpn_chosen = *p; - return( 0 ); + return ( 0 ); } } - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } #endif /* MBEDTLS_SSL_ALPN */ @@ -1339,38 +1276,35 @@ static int ssl_parse_hello_verify_request( mbedtls_ssl_context *ssl ) * Since the RFC is not clear on this point, accept DTLS 1.0 (TLS 1.1) * even is lower than our min version. */ - if( major_ver < MBEDTLS_SSL_MAJOR_VERSION_3 || - minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 || - major_ver > ssl->conf->max_major_ver || - minor_ver > ssl->conf->max_minor_ver ) - { + if ( major_ver < MBEDTLS_SSL_MAJOR_VERSION_3 || + minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 || + major_ver > ssl->conf->max_major_ver || + minor_ver > ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server version" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } cookie_len = *p++; MBEDTLS_SSL_DEBUG_BUF( 3, "cookie", p, cookie_len ); - if( ( ssl->in_msg + ssl->in_msglen ) - p < cookie_len ) - { + if ( ( ssl->in_msg + ssl->in_msglen ) - p < cookie_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, - ( "cookie length does not match incoming message size" ) ); + ( "cookie length does not match incoming message size" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } mbedtls_free( ssl->handshake->verify_cookie ); ssl->handshake->verify_cookie = mbedtls_calloc( 1, cookie_len ); - if( ssl->handshake->verify_cookie == NULL ) - { + if ( ssl->handshake->verify_cookie == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc failed (%d bytes)", cookie_len ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } memcpy( ssl->handshake->verify_cookie, p, cookie_len ); @@ -1384,7 +1318,7 @@ static int ssl_parse_hello_verify_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse hello verify request" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -1411,47 +1345,39 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) buf = ssl->in_msg; - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { ssl->renego_records_seen++; - if( ssl->conf->renego_max_records >= 0 && - ssl->renego_records_seen > ssl->conf->renego_max_records ) - { + if ( ssl->conf->renego_max_records >= 0 && + ssl->renego_records_seen > ssl->conf->renego_max_records ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation requested, " - "but not honored by server" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + "but not honored by server" ) ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-handshake message during renego" ) ); - return( MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ); + return ( MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( buf[0] == MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( buf[0] == MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received hello verify request" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello" ) ); - return( ssl_parse_hello_verify_request( ssl ) ); - } - else - { + return ( ssl_parse_hello_verify_request( ssl ) ); + } else { /* We made it through the verification process */ mbedtls_free( ssl->handshake->verify_cookie ); ssl->handshake->verify_cookie = NULL; @@ -1460,11 +1386,10 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - if( ssl->in_hslen < 38 + mbedtls_ssl_hs_hdr_len( ssl ) || - buf[0] != MBEDTLS_SSL_HS_SERVER_HELLO ) - { + if ( ssl->in_hslen < 38 + mbedtls_ssl_hs_hdr_len( ssl ) || + buf[0] != MBEDTLS_SSL_HS_SERVER_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } /* @@ -1482,30 +1407,29 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, version", buf + 0, 2 ); mbedtls_ssl_read_version( &ssl->major_ver, &ssl->minor_ver, - ssl->conf->transport, buf + 0 ); + ssl->conf->transport, buf + 0 ); - if( ssl->major_ver < ssl->conf->min_major_ver || - ssl->minor_ver < ssl->conf->min_minor_ver || - ssl->major_ver > ssl->conf->max_major_ver || - ssl->minor_ver > ssl->conf->max_minor_ver ) - { + if ( ssl->major_ver < ssl->conf->min_major_ver || + ssl->minor_ver < ssl->conf->min_minor_ver || + ssl->major_ver > ssl->conf->max_major_ver || + ssl->minor_ver > ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server version out of bounds - " - " min: [%d:%d], server: [%d:%d], max: [%d:%d]", - ssl->conf->min_major_ver, ssl->conf->min_minor_ver, - ssl->major_ver, ssl->minor_ver, - ssl->conf->max_major_ver, ssl->conf->max_minor_ver ) ); + " min: [%d:%d], server: [%d:%d], max: [%d:%d]", + ssl->conf->min_major_ver, ssl->conf->min_minor_ver, + ssl->major_ver, ssl->minor_ver, + ssl->conf->max_major_ver, ssl->conf->max_minor_ver ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } #if defined(MBEDTLS_DEBUG_C) t = ( (uint32_t) buf[2] << 24 ) - | ( (uint32_t) buf[3] << 16 ) - | ( (uint32_t) buf[4] << 8 ) - | ( (uint32_t) buf[5] ); + | ( (uint32_t) buf[3] << 16 ) + | ( (uint32_t) buf[4] << 8 ) + | ( (uint32_t) buf[5] ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) ); #endif @@ -1515,32 +1439,25 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, random bytes", buf + 2, 32 ); - if( n > 32 ) - { + if ( n > 32 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - if( ssl->in_hslen > mbedtls_ssl_hs_hdr_len( ssl ) + 39 + n ) - { + if ( ssl->in_hslen > mbedtls_ssl_hs_hdr_len( ssl ) + 39 + n ) { ext_len = ( ( buf[38 + n] << 8 ) - | ( buf[39 + n] ) ); + | ( buf[39 + n] ) ); - if( ( ext_len > 0 && ext_len < 4 ) || - ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 40 + n + ext_len ) - { + if ( ( ext_len > 0 && ext_len < 4 ) || + ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 40 + n + ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - } - else if( ssl->in_hslen == mbedtls_ssl_hs_hdr_len( ssl ) + 38 + n ) - { + } else if ( ssl->in_hslen == mbedtls_ssl_hs_hdr_len( ssl ) + 38 + n ) { ext_len = 0; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } /* ciphersuite (used later) */ @@ -1554,20 +1471,20 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_ZLIB_SUPPORT) /* See comments in ssl_write_client_hello() */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) accept_comp = 0; else #endif accept_comp = 1; - if( comp != MBEDTLS_SSL_COMPRESS_NULL && - ( comp != MBEDTLS_SSL_COMPRESS_DEFLATE || accept_comp == 0 ) ) + if ( comp != MBEDTLS_SSL_COMPRESS_NULL && + ( comp != MBEDTLS_SSL_COMPRESS_DEFLATE || accept_comp == 0 ) ) #else /* MBEDTLS_ZLIB_SUPPORT */ - if( comp != MBEDTLS_SSL_COMPRESS_NULL ) + if ( comp != MBEDTLS_SSL_COMPRESS_NULL ) #endif/* MBEDTLS_ZLIB_SUPPORT */ { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server hello, bad compression: %d", comp ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } /* @@ -1575,10 +1492,9 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) */ ssl->transform_negotiate->ciphersuite_info = mbedtls_ssl_ciphersuite_from_id( i ); - if( ssl->transform_negotiate->ciphersuite_info == NULL ) - { + if ( ssl->transform_negotiate->ciphersuite_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ciphersuite info for %04x not found", i ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } mbedtls_ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); @@ -1589,15 +1505,14 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) /* * Check if the session can be resumed */ - if( ssl->handshake->resume == 0 || n == 0 || + if ( ssl->handshake->resume == 0 || n == 0 || #if defined(MBEDTLS_SSL_RENEGOTIATION) - ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || + ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || #endif - ssl->session_negotiate->ciphersuite != i || - ssl->session_negotiate->compression != comp || - ssl->session_negotiate->id_len != n || - memcmp( ssl->session_negotiate->id, buf + 35, n ) != 0 ) - { + ssl->session_negotiate->ciphersuite != i || + ssl->session_negotiate->compression != comp || + ssl->session_negotiate->id_len != n || + memcmp( ssl->session_negotiate->id, buf + 35, n ) != 0 ) { ssl->state++; ssl->handshake->resume = 0; #if defined(MBEDTLS_HAVE_TIME) @@ -1607,62 +1522,54 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) ssl->session_negotiate->compression = comp; ssl->session_negotiate->id_len = n; memcpy( ssl->session_negotiate->id, buf + 35, n ); - } - else - { + } else { ssl->state = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC; - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } } MBEDTLS_SSL_DEBUG_MSG( 3, ( "%s session has been resumed", - ssl->handshake->resume ? "a" : "no" ) ); + ssl->handshake->resume ? "a" : "no" ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %04x", i ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: %d", buf[37 + n] ) ); suite_info = mbedtls_ssl_ciphersuite_from_id( ssl->session_negotiate->ciphersuite ); - if( suite_info == NULL + if ( suite_info == NULL #if defined(MBEDTLS_ARC4_C) - || ( ssl->conf->arc4_disabled && - suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) + || ( ssl->conf->arc4_disabled && + suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) #endif - ) - { + ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %s", suite_info->name ) ); i = 0; - while( 1 ) - { - if( ssl->conf->ciphersuite_list[ssl->minor_ver][i] == 0 ) - { + while ( 1 ) { + if ( ssl->conf->ciphersuite_list[ssl->minor_ver][i] == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - if( ssl->conf->ciphersuite_list[ssl->minor_ver][i++] == - ssl->session_negotiate->ciphersuite ) - { + if ( ssl->conf->ciphersuite_list[ssl->minor_ver][i++] == + ssl->session_negotiate->ciphersuite ) { break; } } - if( comp != MBEDTLS_SSL_COMPRESS_NULL + if ( comp != MBEDTLS_SSL_COMPRESS_NULL #if defined(MBEDTLS_ZLIB_SUPPORT) - && comp != MBEDTLS_SSL_COMPRESS_DEFLATE + && comp != MBEDTLS_SSL_COMPRESS_DEFLATE #endif - ) - { + ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ssl->session_negotiate->compression = comp; @@ -1670,195 +1577,177 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "server hello, total extension length: %d", ext_len ) ); - while( ext_len ) - { + while ( ext_len ) { unsigned int ext_id = ( ( ext[0] << 8 ) - | ( ext[1] ) ); + | ( ext[1] ) ); unsigned int ext_size = ( ( ext[2] << 8 ) - | ( ext[3] ) ); + | ( ext[3] ) ); - if( ext_size + 4 > ext_len ) - { + if ( ext_size + 4 > ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - switch( ext_id ) - { - case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); + switch ( ext_id ) { + case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - renegotiation_info_seen = 1; + renegotiation_info_seen = 1; #endif - if( ( ret = ssl_parse_renegotiation_info( ssl, ext + 4, - ext_size ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_parse_renegotiation_info( ssl, ext + 4, + ext_size ) ) != 0 ) + return ( ret ); - break; + break; #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max_fragment_length extension" ) ); + case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max_fragment_length extension" ) ); - if( ( ret = ssl_parse_max_fragment_length_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_max_fragment_length_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated_hmac extension" ) ); + case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated_hmac extension" ) ); - if( ( ret = ssl_parse_truncated_hmac_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_truncated_hmac_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt_then_mac extension" ) ); + case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt_then_mac extension" ) ); - if( ( ret = ssl_parse_encrypt_then_mac_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_encrypt_then_mac_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended_master_secret extension" ) ); + case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended_master_secret extension" ) ); - if( ( ret = ssl_parse_extended_ms_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_extended_ms_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - case MBEDTLS_TLS_EXT_SESSION_TICKET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session_ticket extension" ) ); + case MBEDTLS_TLS_EXT_SESSION_TICKET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session_ticket extension" ) ); - if( ( ret = ssl_parse_session_ticket_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_session_ticket_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported_point_formats extension" ) ); + case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported_point_formats extension" ) ); - if( ( ret = ssl_parse_supported_point_formats_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_supported_point_formats_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake_kkpp extension" ) ); + case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake_kkpp extension" ) ); - if( ( ret = ssl_parse_ecjpake_kkpp( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_ecjpake_kkpp( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_SSL_ALPN) - case MBEDTLS_TLS_EXT_ALPN: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); + case MBEDTLS_TLS_EXT_ALPN: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); - if( ( ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ) ) != 0 ) + return ( ret ); - break; + break; #endif /* MBEDTLS_SSL_ALPN */ - default: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", - ext_id ) ); + default: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", + ext_id ) ); } ext_len -= 4 + ext_size; ext += 4 + ext_size; - if( ext_len > 0 && ext_len < 4 ) - { + if ( ext_len > 0 && ext_len < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } } /* * Renegotiation security checks */ - if( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) - { + if ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); handshake_failure = 1; } #if defined(MBEDTLS_SSL_RENEGOTIATION) - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && - renegotiation_info_seen == 0 ) - { + else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && + renegotiation_info_seen == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - renegotiation_info_seen == 1 ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + renegotiation_info_seen == 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) ); handshake_failure = 1; } #endif /* MBEDTLS_SSL_RENEGOTIATION */ - if( handshake_failure == 1 ) - { - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( handshake_failure == 1 ) { + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ @@ -1877,25 +1766,23 @@ static int ssl_parse_server_dh_params( mbedtls_ssl_context *ssl, unsigned char * * opaque dh_Ys<1..2^16-1>; * } ServerDHParams; */ - if( ( ret = mbedtls_dhm_read_params( &ssl->handshake->dhm_ctx, p, end ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_read_params( &ssl->handshake->dhm_ctx, p, end ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 2, ( "mbedtls_dhm_read_params" ), ret ); - return( ret ); + return ( ret ); } - if( ssl->handshake->dhm_ctx.len * 8 < ssl->conf->dhm_min_bitlen ) - { + if ( ssl->handshake->dhm_ctx.len * 8 < ssl->conf->dhm_min_bitlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "DHM prime too short: %d < %d", ssl->handshake->dhm_ctx.len * 8, ssl->conf->dhm_min_bitlen ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: P ", &ssl->handshake->dhm_ctx.P ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: G ", &ssl->handshake->dhm_ctx.G ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ @@ -1910,25 +1797,24 @@ static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl ) const mbedtls_ecp_curve_info *curve_info; curve_info = mbedtls_ecp_curve_info_from_grp_id( ssl->handshake->ecdh_ctx.grp.id ); - if( curve_info == NULL ) - { + if ( curve_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDH curve: %s", curve_info->name ) ); #if defined(MBEDTLS_ECP_C) - if( mbedtls_ssl_check_curve( ssl, ssl->handshake->ecdh_ctx.grp.id ) != 0 ) + if ( mbedtls_ssl_check_curve( ssl, ssl->handshake->ecdh_ctx.grp.id ) != 0 ) #else - if( ssl->handshake->ecdh_ctx.grp.nbits < 163 || - ssl->handshake->ecdh_ctx.grp.nbits > 521 ) + if ( ssl->handshake->ecdh_ctx.grp.nbits < 163 || + ssl->handshake->ecdh_ctx.grp.nbits > 521 ) #endif - return( -1 ); + return ( -1 ); MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp", &ssl->handshake->ecdh_ctx.Qp ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || @@ -1940,8 +1826,8 @@ static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl ) defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl, - unsigned char **p, - unsigned char *end ) + unsigned char **p, + unsigned char *end ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; @@ -1953,20 +1839,18 @@ static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl, * ECPoint public; * } ServerECDHParams; */ - if( ( ret = mbedtls_ecdh_read_params( &ssl->handshake->ecdh_ctx, - (const unsigned char **) p, end ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_read_params( &ssl->handshake->ecdh_ctx, + (const unsigned char **) p, end ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_read_params" ), ret ); - return( ret ); + return ( ret ); } - if( ssl_check_server_ecdh_params( ssl ) != 0 ) - { + if ( ssl_check_server_ecdh_params( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message (ECDHE curve)" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || @@ -1989,10 +1873,9 @@ static int ssl_parse_server_psk_hint( mbedtls_ssl_context *ssl, len = (*p)[0] << 8 | (*p)[1]; *p += 2; - if( (*p) + len > end ) - { + if ( (*p) + len > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message (psk_identity_hint length)" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } /* @@ -2003,7 +1886,7 @@ static int ssl_parse_server_psk_hint( mbedtls_ssl_context *ssl, *p += len; ret = 0; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ @@ -2020,10 +1903,9 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, size_t len_bytes = ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ? 0 : 2; unsigned char *p = ssl->handshake->premaster + pms_offset; - if( offset + len_bytes > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( offset + len_bytes > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small for encrypted pms" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } /* @@ -2034,53 +1916,48 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, * } PreMasterSecret; */ mbedtls_ssl_write_version( ssl->conf->max_major_ver, ssl->conf->max_minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p + 2, 46 ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p + 2, 46 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "f_rng", ret ); - return( ret ); + return ( ret ); } ssl->handshake->pmslen = 48; - if( ssl->session_negotiate->peer_cert == NULL ) - { + if ( ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "certificate required" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* * Now write it out, encrypted */ - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, - MBEDTLS_PK_RSA ) ) - { + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, + MBEDTLS_PK_RSA ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "certificate key type mismatch" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_pk_encrypt( &ssl->session_negotiate->peer_cert->pk, - p, ssl->handshake->pmslen, - ssl->out_msg + offset + len_bytes, olen, - MBEDTLS_SSL_MAX_CONTENT_LEN - offset - len_bytes, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_encrypt( &ssl->session_negotiate->peer_cert->pk, + p, ssl->handshake->pmslen, + ssl->out_msg + offset + len_bytes, olen, + MBEDTLS_SSL_MAX_CONTENT_LEN - offset - len_bytes, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_rsa_pkcs1_encrypt", ret ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( len_bytes == 2 ) - { - ssl->out_msg[offset+0] = (unsigned char)( *olen >> 8 ); - ssl->out_msg[offset+1] = (unsigned char)( *olen ); + if ( len_bytes == 2 ) { + ssl->out_msg[offset + 0] = (unsigned char)( *olen >> 8 ); + ssl->out_msg[offset + 1] = (unsigned char)( *olen ); *olen += 2; } #endif - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ @@ -2090,59 +1967,55 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) static int ssl_parse_signature_algorithm( mbedtls_ssl_context *ssl, - unsigned char **p, - unsigned char *end, - mbedtls_md_type_t *md_alg, - mbedtls_pk_type_t *pk_alg ) + unsigned char **p, + unsigned char *end, + mbedtls_md_type_t *md_alg, + mbedtls_pk_type_t *pk_alg ) { ((void) ssl); *md_alg = MBEDTLS_MD_NONE; *pk_alg = MBEDTLS_PK_NONE; /* Only in TLS 1.2 */ - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) - { - return( 0 ); + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { + return ( 0 ); } - if( (*p) + 2 > end ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + if ( (*p) + 2 > end ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); /* * Get hash algorithm */ - if( ( *md_alg = mbedtls_ssl_md_alg_from_hash( (*p)[0] ) ) == MBEDTLS_MD_NONE ) - { + if ( ( *md_alg = mbedtls_ssl_md_alg_from_hash( (*p)[0] ) ) == MBEDTLS_MD_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Server used unsupported " - "HashAlgorithm %d", *(p)[0] ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + "HashAlgorithm %d", *(p)[0] ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } /* * Get signature algorithm */ - if( ( *pk_alg = mbedtls_ssl_pk_alg_from_sig( (*p)[1] ) ) == MBEDTLS_PK_NONE ) - { + if ( ( *pk_alg = mbedtls_ssl_pk_alg_from_sig( (*p)[1] ) ) == MBEDTLS_PK_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server used unsupported " - "SignatureAlgorithm %d", (*p)[1] ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + "SignatureAlgorithm %d", (*p)[1] ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } /* * Check if the hash is acceptable */ - if( mbedtls_ssl_check_sig_hash( ssl, *md_alg ) != 0 ) - { + if ( mbedtls_ssl_check_sig_hash( ssl, *md_alg ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server used HashAlgorithm " "that was not offered" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "Server used SignatureAlgorithm %d", (*p)[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "Server used HashAlgorithm %d", (*p)[0] ) ); *p += 2; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || @@ -2156,35 +2029,31 @@ static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl ) int ret; const mbedtls_ecp_keypair *peer_key; - if( ssl->session_negotiate->peer_cert == NULL ) - { + if ( ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "certificate required" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, - MBEDTLS_PK_ECKEY ) ) - { + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, + MBEDTLS_PK_ECKEY ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } peer_key = mbedtls_pk_ec( ssl->session_negotiate->peer_cert->pk ); - if( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, peer_key, - MBEDTLS_ECDH_THEIRS ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, peer_key, + MBEDTLS_ECDH_THEIRS ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_get_params" ), ret ); - return( ret ); + return ( ret ); } - if( ssl_check_server_ecdh_params( ssl ) != 0 ) - { + if ( ssl_check_server_ecdh_params( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server certificate (ECDH curve)" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ @@ -2198,11 +2067,10 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse server key exchange" ) ); #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } ((void) p); ((void) end); @@ -2210,51 +2078,45 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { - if( ( ret = ssl_get_ecdh_params_from_cert( ssl ) ) != 0 ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { + if ( ( ret = ssl_get_ecdh_params_from_cert( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_get_ecdh_params_from_cert", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } ((void) p); ((void) end); #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* * ServerKeyExchange may be skipped with PSK and RSA-PSK when the server * doesn't use a psk_identity_hint */ - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE ) - { - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE ) { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { ssl->record_read = 1; goto exit; } MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); @@ -2262,83 +2124,71 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "server key exchange", p, end - p ); #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - if( ssl_parse_server_psk_hint( ssl, &p, end ) != 0 ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + if ( ssl_parse_server_psk_hint( ssl, &p, end ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } } /* FALLTROUGH */ #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) ; /* nothing more to do */ else #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED || MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - if( ssl_parse_server_dh_params( ssl, &p, end ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + if ( ssl_parse_server_dh_params( ssl, &p, end ) != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { - if( ssl_parse_server_ecdh_params( ssl, &p, end ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { + if ( ssl_parse_server_ecdh_params( ssl, &p, end ) != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { - ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, - p, end - p ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { + ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, + p, end - p ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { size_t sig_len, hashlen; unsigned char hash[64]; mbedtls_md_type_t md_alg = MBEDTLS_MD_NONE; @@ -2350,39 +2200,33 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) * Handle the digitally-signed structure */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - if( ssl_parse_signature_algorithm( ssl, &p, end, - &md_alg, &pk_alg ) != 0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + if ( ssl_parse_signature_algorithm( ssl, &p, end, + &md_alg, &pk_alg ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - if( pk_alg != mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ) ) - { + if ( pk_alg != mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) - { - pk_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) { + pk_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); - /* Default hash for ECDSA is SHA-1 */ - if( pk_alg == MBEDTLS_PK_ECDSA && md_alg == MBEDTLS_MD_NONE ) - md_alg = MBEDTLS_MD_SHA1; - } - else + /* Default hash for ECDSA is SHA-1 */ + if ( pk_alg == MBEDTLS_PK_ECDSA && md_alg == MBEDTLS_MD_NONE ) + md_alg = MBEDTLS_MD_SHA1; + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* * Read signature @@ -2390,10 +2234,9 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) sig_len = ( p[0] << 8 ) | p[1]; p += 2; - if( end != p + sig_len ) - { + if ( end != p + sig_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } MBEDTLS_SSL_DEBUG_BUF( 3, "signature", p, sig_len ); @@ -2403,8 +2246,7 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { mbedtls_md5_context mbedtls_md5; mbedtls_sha1_context mbedtls_sha1; @@ -2438,72 +2280,65 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) mbedtls_md5_free( &mbedtls_md5 ); mbedtls_sha1_free( &mbedtls_sha1 ); - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( md_alg != MBEDTLS_MD_NONE ) - { - mbedtls_md_context_t ctx; + if ( md_alg != MBEDTLS_MD_NONE ) { + mbedtls_md_context_t ctx; - mbedtls_md_init( &ctx ); + mbedtls_md_init( &ctx ); - /* Info from md_alg will be used instead */ - hashlen = 0; + /* Info from md_alg will be used instead */ + hashlen = 0; - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = mbedtls_md_setup( &ctx, - mbedtls_md_info_from_type( md_alg ), 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - return( ret ); - } + /* + * digitally-signed struct { + * opaque client_random[32]; + * opaque server_random[32]; + * ServerDHParams params; + * }; + */ + if ( ( ret = mbedtls_md_setup( &ctx, + mbedtls_md_info_from_type( md_alg ), 0 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); + return ( ret ); + } - mbedtls_md_starts( &ctx ); - mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); - mbedtls_md_update( &ctx, params, params_len ); - mbedtls_md_finish( &ctx, hash ); - mbedtls_md_free( &ctx ); - } - else + mbedtls_md_starts( &ctx ); + mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); + mbedtls_md_update( &ctx, params, params_len ); + mbedtls_md_finish( &ctx, hash ); + mbedtls_md_free( &ctx ); + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen : - (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); + (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); - if( ssl->session_negotiate->peer_cert == NULL ) - { + if ( ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "certificate required" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* * Verify signature */ - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) - { + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, - md_alg, hash, hashlen, p, sig_len ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, + md_alg, hash, hashlen, p, sig_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_verify", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || @@ -2515,7 +2350,7 @@ exit: MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server key exchange" ) ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -2530,19 +2365,18 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) @@ -2555,29 +2389,25 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } - if( ssl->record_read == 0 ) - { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ssl->record_read == 0 ) { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } ssl->record_read = 1; @@ -2586,13 +2416,13 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) ssl->client_auth = 0; ssl->state++; - if( ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE_REQUEST ) + if ( ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE_REQUEST ) ssl->client_auth++; MBEDTLS_SSL_DEBUG_MSG( 3, ( "got %s certificate request", - ssl->client_auth ? "a" : "no" ) ); + ssl->client_auth ? "a" : "no" ) ); - if( ssl->client_auth == 0 ) + if ( ssl->client_auth == 0 ) goto exit; ssl->record_read = 0; @@ -2627,53 +2457,48 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) cert_type_len = buf[mbedtls_ssl_hs_hdr_len( ssl )]; n = cert_type_len; - if( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) - { + if ( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } /* supported_signature_algorithms */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { size_t sig_alg_len = ( ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 1 + n] << 8 ) - | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); + | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); #if defined(MBEDTLS_DEBUG_C) unsigned char* sig_alg = buf + mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n; size_t i; - for( i = 0; i < sig_alg_len; i += 2 ) - { + for ( i = 0; i < sig_alg_len; i += 2 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "Supported Signature Algorithm found: %d,%d", sig_alg[i], sig_alg[i + 1] ) ); } #endif n += 2 + sig_alg_len; - if( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) - { + if ( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ /* certificate_authorities */ dn_len = ( ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 1 + n] << 8 ) - | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); + | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); n += dn_len; - if( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n ) - { + if ( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } exit: MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate request" ) ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -2688,39 +2513,35 @@ static int ssl_parse_server_hello_done( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse server hello done" ) ); - if( ssl->record_read == 0 ) - { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ssl->record_read == 0 ) { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } } ssl->record_read = 0; - if( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) || - ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_HELLO_DONE ) - { + if ( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) || + ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_HELLO_DONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE ); } ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello done" ) ); - return( 0 ); + return ( 0 ); } static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) @@ -2732,8 +2553,7 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client key exchange" ) ); #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) { /* * DHM key exchange -- send G^X mod P */ @@ -2744,223 +2564,194 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) i = 6; ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, - (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), - &ssl->out_msg[i], n, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { + (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), + &ssl->out_msg[i], n, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX ); - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, - ssl->handshake->premaster, - MBEDTLS_PREMASTER_SIZE, - &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, + ssl->handshake->premaster, + MBEDTLS_PREMASTER_SIZE, + &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { - /* - * ECDH key exchange -- send client public value - */ - i = 4; + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { + /* + * ECDH key exchange -- send client public value + */ + i = 4; - ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, - &n, - &ssl->out_msg[i], 1000, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); - return( ret ); - } + ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, + &n, + &ssl->out_msg[i], 1000, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); + return ( ret ); + } - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, - &ssl->handshake->pmslen, - ssl->handshake->premaster, - MBEDTLS_MPI_MAX_SIZE, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); - return( ret ); - } + if ( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, + &ssl->handshake->pmslen, + ssl->handshake->premaster, + MBEDTLS_MPI_MAX_SIZE, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); + return ( ret ); + } - MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * opaque psk_identity<0..2^16-1>; - */ - if( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for PSK" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + /* + * opaque psk_identity<0..2^16-1>; + */ + if ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for PSK" ) ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + } - i = 4; - n = ssl->conf->psk_identity_len; + i = 4; + n = ssl->conf->psk_identity_len; - if( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity too long or " - "SSL buffer too short" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - } + if ( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity too long or " + "SSL buffer too short" ) ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + } - ssl->out_msg[i++] = (unsigned char)( n >> 8 ); - ssl->out_msg[i++] = (unsigned char)( n ); + ssl->out_msg[i++] = (unsigned char)( n >> 8 ); + ssl->out_msg[i++] = (unsigned char)( n ); - memcpy( ssl->out_msg + i, ssl->conf->psk_identity, ssl->conf->psk_identity_len ); - i += ssl->conf->psk_identity_len; + memcpy( ssl->out_msg + i, ssl->conf->psk_identity, ssl->conf->psk_identity_len ); + i += ssl->conf->psk_identity_len; #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) - { - n = 0; - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) { + n = 0; + } else #endif #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { - if( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 2 ) ) != 0 ) - return( ret ); - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { + if ( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 2 ) ) != 0 ) + return ( ret ); + } else #endif #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - /* - * ClientDiffieHellmanPublic public (DHM send G^X mod P) - */ - n = ssl->handshake->dhm_ctx.len; + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + /* + * ClientDiffieHellmanPublic public (DHM send G^X mod P) + */ + n = ssl->handshake->dhm_ctx.len; - if( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity or DHM size too long" - " or SSL buffer too short" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - } + if ( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity or DHM size too long" + " or SSL buffer too short" ) ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + } - ssl->out_msg[i++] = (unsigned char)( n >> 8 ); - ssl->out_msg[i++] = (unsigned char)( n ); + ssl->out_msg[i++] = (unsigned char)( n >> 8 ); + ssl->out_msg[i++] = (unsigned char)( n ); - ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, - (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), - &ssl->out_msg[i], n, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); - return( ret ); - } - } - else + ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, + (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), + &ssl->out_msg[i], n, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * ClientECDiffieHellmanPublic public; - */ - ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, &n, - &ssl->out_msg[i], MBEDTLS_SSL_MAX_CONTENT_LEN - i, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); - return( ret ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + /* + * ClientECDiffieHellmanPublic public; + */ + ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, &n, + &ssl->out_msg[i], MBEDTLS_SSL_MAX_CONTENT_LEN - i, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); + return ( ret ); + } - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); - } - else + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) - { - i = 4; - if( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 0 ) ) != 0 ) - return( ret ); - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { + i = 4; + if ( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 0 ) ) != 0 ) + return ( ret ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { - i = 4; + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { + i = 4; - ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, - ssl->out_msg + i, MBEDTLS_SSL_MAX_CONTENT_LEN - i, &n, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); - return( ret ); - } + ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, + ssl->out_msg + i, MBEDTLS_SSL_MAX_CONTENT_LEN - i, &n, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); + return ( ret ); + } - ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, - ssl->handshake->premaster, 32, &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); - return( ret ); - } - } - else + ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, + ssl->handshake->premaster, 32, &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ - { - ((void) ciphersuite_info); - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + ((void) ciphersuite_info); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } ssl->out_msglen = i + n; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; @@ -2968,15 +2759,14 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write client key exchange" ) ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -2992,25 +2782,23 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) @@ -3025,34 +2813,30 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } - if( ssl->client_auth == 0 || mbedtls_ssl_own_cert( ssl ) == NULL ) - { + if ( ssl->client_auth == 0 || mbedtls_ssl_own_cert( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } - if( mbedtls_ssl_own_key( ssl ) == NULL ) - { + if ( mbedtls_ssl_own_key( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for certificate" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } /* @@ -3062,8 +2846,7 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { /* * digitally-signed struct { * opaque md5_hash[16]; @@ -3082,64 +2865,56 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) /* * For ECDSA, default hash is SHA-1 only */ - if( mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECDSA ) ) - { + if ( mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECDSA ) ) { hash_start += 16; hashlen -= 16; md_alg = MBEDTLS_MD_SHA1; } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - /* - * digitally-signed struct { - * opaque handshake_messages[handshake_messages_length]; - * }; - * - * Taking shortcut here. We assume that the server always allows the - * PRF Hash function and has sent it in the allowed signature - * algorithms list received in the Certificate Request message. - * - * Until we encounter a server that does not, we will take this - * shortcut. - * - * Reason: Otherwise we should have running hashes for SHA512 and SHA224 - * in order to satisfy 'weird' needs from the server side. - */ - if( ssl->transform_negotiate->ciphersuite_info->mac == - MBEDTLS_MD_SHA384 ) - { - md_alg = MBEDTLS_MD_SHA384; - ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA384; - } - else - { - md_alg = MBEDTLS_MD_SHA256; - ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA256; - } - ssl->out_msg[5] = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + /* + * digitally-signed struct { + * opaque handshake_messages[handshake_messages_length]; + * }; + * + * Taking shortcut here. We assume that the server always allows the + * PRF Hash function and has sent it in the allowed signature + * algorithms list received in the Certificate Request message. + * + * Until we encounter a server that does not, we will take this + * shortcut. + * + * Reason: Otherwise we should have running hashes for SHA512 and SHA224 + * in order to satisfy 'weird' needs from the server side. + */ + if ( ssl->transform_negotiate->ciphersuite_info->mac == + MBEDTLS_MD_SHA384 ) { + md_alg = MBEDTLS_MD_SHA384; + ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA384; + } else { + md_alg = MBEDTLS_MD_SHA256; + ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA256; + } + ssl->out_msg[5] = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); - /* Info from md_alg will be used instead */ - hashlen = 0; - offset = 2; - } - else + /* Info from md_alg will be used instead */ + hashlen = 0; + offset = 2; + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash_start, hashlen, - ssl->out_msg + 6 + offset, &n, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash_start, hashlen, + ssl->out_msg + 6 + offset, &n, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_sign", ret ); - return( ret ); + return ( ret ); } ssl->out_msg[4 + offset] = (unsigned char)( n >> 8 ); @@ -3151,15 +2926,14 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate verify" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -3179,16 +2953,14 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse new session ticket" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* @@ -3201,11 +2973,10 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) * 4 . 5 ticket_len (n) * 6 . 5+n ticket content */ - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_NEW_SESSION_TICKET || - ssl->in_hslen < 6 + mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_NEW_SESSION_TICKET || + ssl->in_hslen < 6 + mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); + return ( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); } msg = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); @@ -3215,10 +2986,9 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) ticket_len = ( msg[4] << 8 ) | ( msg[5] ); - if( ticket_len + 6 + mbedtls_ssl_hs_hdr_len( ssl ) != ssl->in_hslen ) - { + if ( ticket_len + 6 + mbedtls_ssl_hs_hdr_len( ssl ) != ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); + return ( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket length: %d", ticket_len ) ); @@ -3231,19 +3001,18 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) * Zero-length ticket means the server changed his mind and doesn't want * to send a ticket after all, so just forget it */ - if( ticket_len == 0 ) - return( 0 ); + if ( ticket_len == 0 ) + return ( 0 ); mbedtls_zeroize( ssl->session_negotiate->ticket, - ssl->session_negotiate->ticket_len ); + ssl->session_negotiate->ticket_len ); mbedtls_free( ssl->session_negotiate->ticket ); ssl->session_negotiate->ticket = NULL; ssl->session_negotiate->ticket_len = 0; - if( ( ticket = mbedtls_calloc( 1, ticket_len ) ) == NULL ) - { + if ( ( ticket = mbedtls_calloc( 1, ticket_len ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ticket alloc failed" ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } memcpy( ticket, msg + 6, ticket_len ); @@ -3262,7 +3031,7 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse new session ticket" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ @@ -3273,133 +3042,130 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) ); - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - return( ret ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) + return ( ret ); } #endif /* Change state now, so that it is right in mbedtls_ssl_read_record(), used * by DTLS for dropping out-of-sequence ChangeCipherSpec records */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - if( ssl->state == MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC && - ssl->handshake->new_session_ticket != 0 ) - { + if ( ssl->state == MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC && + ssl->handshake->new_session_ticket != 0 ) { ssl->state = MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET; } #endif - switch( ssl->state ) - { + switch ( ssl->state ) { case MBEDTLS_SSL_HELLO_REQUEST: ssl->state = MBEDTLS_SSL_CLIENT_HELLO; break; - /* - * ==> ClientHello - */ - case MBEDTLS_SSL_CLIENT_HELLO: - ret = ssl_write_client_hello( ssl ); - break; + /* + * ==> ClientHello + */ + case MBEDTLS_SSL_CLIENT_HELLO: + ret = ssl_write_client_hello( ssl ); + break; - /* - * <== ServerHello - * Certificate - * ( ServerKeyExchange ) - * ( CertificateRequest ) - * ServerHelloDone - */ - case MBEDTLS_SSL_SERVER_HELLO: - ret = ssl_parse_server_hello( ssl ); - break; + /* + * <== ServerHello + * Certificate + * ( ServerKeyExchange ) + * ( CertificateRequest ) + * ServerHelloDone + */ + case MBEDTLS_SSL_SERVER_HELLO: + ret = ssl_parse_server_hello( ssl ); + break; - case MBEDTLS_SSL_SERVER_CERTIFICATE: - ret = mbedtls_ssl_parse_certificate( ssl ); - break; + case MBEDTLS_SSL_SERVER_CERTIFICATE: + ret = mbedtls_ssl_parse_certificate( ssl ); + break; - case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: - ret = ssl_parse_server_key_exchange( ssl ); - break; + case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: + ret = ssl_parse_server_key_exchange( ssl ); + break; - case MBEDTLS_SSL_CERTIFICATE_REQUEST: - ret = ssl_parse_certificate_request( ssl ); - break; + case MBEDTLS_SSL_CERTIFICATE_REQUEST: + ret = ssl_parse_certificate_request( ssl ); + break; - case MBEDTLS_SSL_SERVER_HELLO_DONE: - ret = ssl_parse_server_hello_done( ssl ); - break; + case MBEDTLS_SSL_SERVER_HELLO_DONE: + ret = ssl_parse_server_hello_done( ssl ); + break; - /* - * ==> ( Certificate/Alert ) - * ClientKeyExchange - * ( CertificateVerify ) - * ChangeCipherSpec - * Finished - */ - case MBEDTLS_SSL_CLIENT_CERTIFICATE: - ret = mbedtls_ssl_write_certificate( ssl ); - break; + /* + * ==> ( Certificate/Alert ) + * ClientKeyExchange + * ( CertificateVerify ) + * ChangeCipherSpec + * Finished + */ + case MBEDTLS_SSL_CLIENT_CERTIFICATE: + ret = mbedtls_ssl_write_certificate( ssl ); + break; - case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: - ret = ssl_write_client_key_exchange( ssl ); - break; + case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: + ret = ssl_write_client_key_exchange( ssl ); + break; - case MBEDTLS_SSL_CERTIFICATE_VERIFY: - ret = ssl_write_certificate_verify( ssl ); - break; + case MBEDTLS_SSL_CERTIFICATE_VERIFY: + ret = ssl_write_certificate_verify( ssl ); + break; - case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: - ret = mbedtls_ssl_write_change_cipher_spec( ssl ); - break; + case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: + ret = mbedtls_ssl_write_change_cipher_spec( ssl ); + break; - case MBEDTLS_SSL_CLIENT_FINISHED: - ret = mbedtls_ssl_write_finished( ssl ); - break; + case MBEDTLS_SSL_CLIENT_FINISHED: + ret = mbedtls_ssl_write_finished( ssl ); + break; - /* - * <== ( NewSessionTicket ) - * ChangeCipherSpec - * Finished - */ + /* + * <== ( NewSessionTicket ) + * ChangeCipherSpec + * Finished + */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - case MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET: - ret = ssl_parse_new_session_ticket( ssl ); - break; + case MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET: + ret = ssl_parse_new_session_ticket( ssl ); + break; #endif - case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: - ret = mbedtls_ssl_parse_change_cipher_spec( ssl ); - break; + case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: + ret = mbedtls_ssl_parse_change_cipher_spec( ssl ); + break; - case MBEDTLS_SSL_SERVER_FINISHED: - ret = mbedtls_ssl_parse_finished( ssl ); - break; + case MBEDTLS_SSL_SERVER_FINISHED: + ret = mbedtls_ssl_parse_finished( ssl ); + break; - case MBEDTLS_SSL_FLUSH_BUFFERS: - MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); - ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; - break; + case MBEDTLS_SSL_FLUSH_BUFFERS: + MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); + ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; + break; - case MBEDTLS_SSL_HANDSHAKE_WRAPUP: - mbedtls_ssl_handshake_wrapup( ssl ); - break; + case MBEDTLS_SSL_HANDSHAKE_WRAPUP: + mbedtls_ssl_handshake_wrapup( ssl ); + break; - default: - MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - } + default: + MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SSL_CLI_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cookie.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cookie.c index 9fb32de7..5db3d94f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cookie.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_cookie.c @@ -44,8 +44,10 @@ #include /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -105,26 +107,26 @@ void mbedtls_ssl_cookie_free( mbedtls_ssl_cookie_ctx *ctx ) } int mbedtls_ssl_cookie_setup( mbedtls_ssl_cookie_ctx *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char key[COOKIE_MD_OUTLEN]; - if( ( ret = f_rng( p_rng, key, sizeof( key ) ) ) != 0 ) - return( ret ); + if ( ( ret = f_rng( p_rng, key, sizeof( key ) ) ) != 0 ) + return ( ret ); ret = mbedtls_md_setup( &ctx->hmac_ctx, mbedtls_md_info_from_type( COOKIE_MD ), 1 ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); ret = mbedtls_md_hmac_starts( &ctx->hmac_ctx, key, sizeof( key ) ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); mbedtls_zeroize( key, sizeof( key ) ); - return( 0 ); + return ( 0 ); } /* @@ -137,39 +139,38 @@ static int ssl_cookie_hmac( mbedtls_md_context_t *hmac_ctx, { unsigned char hmac_out[COOKIE_MD_OUTLEN]; - if( (size_t)( end - *p ) < COOKIE_HMAC_LEN ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( (size_t)( end - *p ) < COOKIE_HMAC_LEN ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - if( mbedtls_md_hmac_reset( hmac_ctx ) != 0 || - mbedtls_md_hmac_update( hmac_ctx, time, 4 ) != 0 || - mbedtls_md_hmac_update( hmac_ctx, cli_id, cli_id_len ) != 0 || - mbedtls_md_hmac_finish( hmac_ctx, hmac_out ) != 0 ) - { - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( mbedtls_md_hmac_reset( hmac_ctx ) != 0 || + mbedtls_md_hmac_update( hmac_ctx, time, 4 ) != 0 || + mbedtls_md_hmac_update( hmac_ctx, cli_id, cli_id_len ) != 0 || + mbedtls_md_hmac_finish( hmac_ctx, hmac_out ) != 0 ) { + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } memcpy( *p, hmac_out, COOKIE_HMAC_LEN ); *p += COOKIE_HMAC_LEN; - return( 0 ); + return ( 0 ); } /* * Generate cookie for DTLS ClientHello verification */ int mbedtls_ssl_cookie_write( void *p_ctx, - unsigned char **p, unsigned char *end, - const unsigned char *cli_id, size_t cli_id_len ) + unsigned char **p, unsigned char *end, + const unsigned char *cli_id, size_t cli_id_len ) { int ret; mbedtls_ssl_cookie_ctx *ctx = (mbedtls_ssl_cookie_ctx *) p_ctx; unsigned long t; - if( ctx == NULL || cli_id == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || cli_id == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( (size_t)( end - *p ) < COOKIE_LEN ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( (size_t)( end - *p ) < COOKIE_LEN ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); #if defined(MBEDTLS_HAVE_TIME) t = (unsigned long) mbedtls_time( NULL ); @@ -184,28 +185,28 @@ int mbedtls_ssl_cookie_write( void *p_ctx, *p += 4; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); #endif ret = ssl_cookie_hmac( &ctx->hmac_ctx, *p - 4, p, end, cli_id, cli_id_len ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + - MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + + MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* * Check a cookie */ int mbedtls_ssl_cookie_check( void *p_ctx, - const unsigned char *cookie, size_t cookie_len, - const unsigned char *cli_id, size_t cli_id_len ) + const unsigned char *cookie, size_t cookie_len, + const unsigned char *cli_id, size_t cli_id_len ) { unsigned char ref_hmac[COOKIE_HMAC_LEN]; int ret = 0; @@ -213,33 +214,33 @@ int mbedtls_ssl_cookie_check( void *p_ctx, mbedtls_ssl_cookie_ctx *ctx = (mbedtls_ssl_cookie_ctx *) p_ctx; unsigned long cur_time, cookie_time; - if( ctx == NULL || cli_id == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || cli_id == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( cookie_len != COOKIE_LEN ) - return( -1 ); + if ( cookie_len != COOKIE_LEN ) + return ( -1 ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); #endif - if( ssl_cookie_hmac( &ctx->hmac_ctx, cookie, - &p, p + sizeof( ref_hmac ), - cli_id, cli_id_len ) != 0 ) + if ( ssl_cookie_hmac( &ctx->hmac_ctx, cookie, + &p, p + sizeof( ref_hmac ), + cli_id, cli_id_len ) != 0 ) ret = -1; #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + - MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + + MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); - if( mbedtls_ssl_safer_memcmp( cookie + 4, ref_hmac, sizeof( ref_hmac ) ) != 0 ) - return( -1 ); + if ( mbedtls_ssl_safer_memcmp( cookie + 4, ref_hmac, sizeof( ref_hmac ) ) != 0 ) + return ( -1 ); #if defined(MBEDTLS_HAVE_TIME) cur_time = (unsigned long) mbedtls_time( NULL ); @@ -252,9 +253,9 @@ int mbedtls_ssl_cookie_check( void *p_ctx, ( (unsigned long) cookie[2] << 8 ) | ( (unsigned long) cookie[3] ); - if( ctx->timeout != 0 && cur_time - cookie_time > ctx->timeout ) - return( -1 ); + if ( ctx->timeout != 0 && cur_time - cookie_time > ctx->timeout ) + return ( -1 ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_COOKIE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_srv.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_srv.c index fc0d2d7b..470854c4 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_srv.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_srv.c @@ -51,34 +51,36 @@ #if defined(MBEDTLS_SSL_SESSION_TICKETS) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #endif #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl, - const unsigned char *info, - size_t ilen ) + const unsigned char *info, + size_t ilen ) { - if( ssl->conf->endpoint != MBEDTLS_SSL_IS_SERVER ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->conf->endpoint != MBEDTLS_SSL_IS_SERVER ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); mbedtls_free( ssl->cli_id ); - if( ( ssl->cli_id = mbedtls_calloc( 1, ilen ) ) == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ( ssl->cli_id = mbedtls_calloc( 1, ilen ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( ssl->cli_id, info, ilen ); ssl->cli_id_len = ilen; - return( 0 ); + return ( 0 ); } void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, - mbedtls_ssl_cookie_write_t *f_cookie_write, - mbedtls_ssl_cookie_check_t *f_cookie_check, - void *p_cookie ) + mbedtls_ssl_cookie_write_t *f_cookie_write, + mbedtls_ssl_cookie_check_t *f_cookie_check, + void *p_cookie ) { conf->f_cookie_write = f_cookie_write; conf->f_cookie_check = f_cookie_check; @@ -98,97 +100,87 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "parse ServerName extension" ) ); servername_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( servername_list_size + 2 != len ) - { + if ( servername_list_size + 2 != len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } p = buf + 2; - while( servername_list_size > 0 ) - { + while ( servername_list_size > 0 ) { hostname_len = ( ( p[1] << 8 ) | p[2] ); - if( hostname_len + 3 > servername_list_size ) - { + if ( hostname_len + 3 > servername_list_size ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( p[0] == MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME ) - { + if ( p[0] == MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME ) { ret = ssl->conf->f_sni( ssl->conf->p_sni, ssl, p + 3, hostname_len ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_sni_wrapper", ret ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - return( 0 ); + return ( 0 ); } servername_list_size -= hostname_len + 3; p += hostname_len + 3; } - if( servername_list_size != 0 ) - { + if ( servername_list_size != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { int ret; #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { /* Check verify-data in constant-time. The length OTOH is no secret */ - if( len != 1 + ssl->verify_data_len || - buf[0] != ssl->verify_data_len || - mbedtls_ssl_safer_memcmp( buf + 1, ssl->peer_verify_data, - ssl->verify_data_len ) != 0 ) - { + if ( len != 1 + ssl->verify_data_len || + buf[0] != ssl->verify_data_len || + mbedtls_ssl_safer_memcmp( buf + 1, ssl->peer_verify_data, + ssl->verify_data_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-matching renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - } - else + } else #endif /* MBEDTLS_SSL_RENEGOTIATION */ { - if( len != 1 || buf[0] != 0x0 ) - { + if ( len != 1 || buf[0] != 0x0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-zero length renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t sig_alg_list_size; const unsigned char *p; @@ -197,11 +189,10 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, sig_alg_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( sig_alg_list_size + 2 != len || - sig_alg_list_size % 2 != 0 ) - { + if ( sig_alg_list_size + 2 != len || + sig_alg_list_size % 2 != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* @@ -210,9 +201,9 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, * * So, just look at the HashAlgorithm part. */ - for( md_cur = ssl->conf->sig_hashes; *md_cur != MBEDTLS_MD_NONE; md_cur++ ) { - for( p = buf + 2; p < end; p += 2 ) { - if( *md_cur == (int) mbedtls_ssl_md_alg_from_hash( p[0] ) ) { + for ( md_cur = ssl->conf->sig_hashes; *md_cur != MBEDTLS_MD_NONE; md_cur++ ) { + for ( p = buf + 2; p < end; p += 2 ) { + if ( *md_cur == (int) mbedtls_ssl_md_alg_from_hash( p[0] ) ) { ssl->handshake->sig_alg = p[0]; goto have_sig_alg; } @@ -221,13 +212,13 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, /* Some key echanges do not need signatures at all */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "no signature_algorithm in common" ) ); - return( 0 ); + return ( 0 ); have_sig_alg: MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext: %d", - ssl->handshake->sig_alg ) ); + ssl->handshake->sig_alg ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 && MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ @@ -235,46 +226,42 @@ have_sig_alg: #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static int ssl_parse_supported_elliptic_curves( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t list_size, our_size; const unsigned char *p; const mbedtls_ecp_curve_info *curve_info, **curves; list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( list_size + 2 != len || - list_size % 2 != 0 ) - { + if ( list_size + 2 != len || + list_size % 2 != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* Should never happen unless client duplicates the extension */ - if( ssl->handshake->curves != NULL ) - { + if ( ssl->handshake->curves != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* Don't allow our peer to make us allocate too much memory, * and leave room for a final 0 */ our_size = list_size / 2 + 1; - if( our_size > MBEDTLS_ECP_DP_MAX ) + if ( our_size > MBEDTLS_ECP_DP_MAX ) our_size = MBEDTLS_ECP_DP_MAX; - if( ( curves = mbedtls_calloc( our_size, sizeof( *curves ) ) ) == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ( curves = mbedtls_calloc( our_size, sizeof( *curves ) ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); ssl->handshake->curves = curves; p = buf + 2; - while( list_size > 0 && our_size > 1 ) - { + while ( list_size > 0 && our_size > 1 ) { curve_info = mbedtls_ecp_curve_info_from_tls_id( ( p[0] << 8 ) | p[1] ); - if( curve_info != NULL ) - { + if ( curve_info != NULL ) { *curves++ = curve_info; our_size--; } @@ -283,29 +270,26 @@ static int ssl_parse_supported_elliptic_curves( mbedtls_ssl_context *ssl, p += 2; } - return( 0 ); + return ( 0 ); } static int ssl_parse_supported_point_formats( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t list_size; const unsigned char *p; list_size = buf[0]; - if( list_size + 1 != len ) - { + if ( list_size + 1 != len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } p = buf + 1; - while( list_size > 0 ) - { - if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || - p[0] == MBEDTLS_ECP_PF_COMPRESSED ) - { + while ( list_size > 0 ) { + if ( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || + p[0] == MBEDTLS_ECP_PF_COMPRESSED ) { #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) ssl->handshake->ecdh_ctx.point_format = p[0]; #endif @@ -313,14 +297,14 @@ static int ssl_parse_supported_point_formats( mbedtls_ssl_context *ssl, ssl->handshake->ecjpake_ctx.point_format = p[0]; #endif MBEDTLS_SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) ); - return( 0 ); + return ( 0 ); } list_size--; p++; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -332,83 +316,77 @@ static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl, { int ret; - if( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) - { + if ( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip ecjpake kkpp extension" ) ); - return( 0 ); + return ( 0 ); } - if( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, - buf, len ) ) != 0 ) - { + if ( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, + buf, len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_one", ret ); - return( ret ); + return ( ret ); } /* Only mark the extension as OK when we're sure it is */ ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static int ssl_parse_max_fragment_length_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( len != 1 || buf[0] >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID ) - { + if ( len != 1 || buf[0] >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->session_negotiate->mfl_code = buf[0]; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( len != 0 ) - { + if ( len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ((void) buf); - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) + if ( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( len != 0 ) - { + if ( len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ((void) buf); - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED && - ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED && + ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->session_negotiate->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ @@ -417,38 +395,35 @@ static int ssl_parse_extended_ms_ext( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) { - if( len != 0 ) - { + if ( len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ((void) buf); - if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED && - ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED && + ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->handshake->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t len ) + unsigned char *buf, + size_t len ) { int ret; mbedtls_ssl_session session; mbedtls_ssl_session_init( &session ); - if( ssl->conf->f_ticket_parse == NULL || - ssl->conf->f_ticket_write == NULL ) - { - return( 0 ); + if ( ssl->conf->f_ticket_parse == NULL || + ssl->conf->f_ticket_write == NULL ) { + return ( 0 ); } /* Remember the client asked us to send a new ticket */ @@ -456,33 +431,31 @@ static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket length: %d", len ) ); - if( len == 0 ) - return( 0 ); + if ( len == 0 ) + return ( 0 ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket rejected: renegotiating" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ /* * Failures are ok: just ignore the ticket and proceed. */ - if( ( ret = ssl->conf->f_ticket_parse( ssl->conf->p_ticket, &session, - buf, len ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_ticket_parse( ssl->conf->p_ticket, &session, + buf, len ) ) != 0 ) { mbedtls_ssl_session_free( &session ); - if( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) + if ( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket is not authentic" ) ); - else if( ret == MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED ) + else if ( ret == MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket is expired" ) ); else MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_parse", ret ); - return( 0 ); + return ( 0 ); } /* @@ -505,7 +478,7 @@ static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, /* Don't send a new ticket after all, this one is OK */ ssl->handshake->new_session_ticket = 0; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ @@ -518,8 +491,8 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, const char **ours; /* If ALPN not configured, just ignore the extension */ - if( ssl->conf->alpn_list == NULL ) - return( 0 ); + if ( ssl->conf->alpn_list == NULL ) + return ( 0 ); /* * opaque ProtocolName<1..2^8-1>; @@ -530,46 +503,43 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, */ /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */ - if( len < 4 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( len < 4 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); list_len = ( buf[0] << 8 ) | buf[1]; - if( list_len != len - 2 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( list_len != len - 2 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); /* * Use our order of preference */ start = buf + 2; end = buf + len; - for( ours = ssl->conf->alpn_list; *ours != NULL; ours++ ) - { + for ( ours = ssl->conf->alpn_list; *ours != NULL; ours++ ) { ours_len = strlen( *ours ); - for( theirs = start; theirs != end; theirs += cur_len ) - { + for ( theirs = start; theirs != end; theirs += cur_len ) { /* If the list is well formed, we should get equality first */ - if( theirs > end ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( theirs > end ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); cur_len = *theirs++; /* Empty strings MUST NOT be included */ - if( cur_len == 0 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( cur_len == 0 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); - if( cur_len == ours_len && - memcmp( theirs, *ours, cur_len ) == 0 ) - { + if ( cur_len == ours_len && + memcmp( theirs, *ours, cur_len ) == 0 ) { ssl->alpn_chosen = *ours; - return( 0 ); + return ( 0 ); } } } /* If we get there, no match was found */ mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif /* MBEDTLS_SSL_ALPN */ @@ -588,14 +558,13 @@ static int ssl_check_key_curve( mbedtls_pk_context *pk, const mbedtls_ecp_curve_info **crv = curves; mbedtls_ecp_group_id grp_id = mbedtls_pk_ec( *pk )->grp.id; - while( *crv != NULL ) - { - if( (*crv)->grp_id == grp_id ) - return( 0 ); + while ( *crv != NULL ) { + if ( (*crv)->grp_id == grp_id ) + return ( 0 ); crv++; } - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_ECDSA_C */ @@ -611,30 +580,27 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, uint32_t flags; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_key_cert != NULL ) + if ( ssl->handshake->sni_key_cert != NULL ) list = ssl->handshake->sni_key_cert; else #endif list = ssl->conf->key_cert; - if( pk_alg == MBEDTLS_PK_NONE ) - return( 0 ); + if ( pk_alg == MBEDTLS_PK_NONE ) + return ( 0 ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite requires certificate" ) ); - if( list == NULL ) - { + if ( list == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "server has no certificate" ) ); - return( -1 ); + return ( -1 ); } - for( cur = list; cur != NULL; cur = cur->next ) - { + for ( cur = list; cur != NULL; cur = cur->next ) { MBEDTLS_SSL_DEBUG_CRT( 3, "candidate certificate chain, certificate", - cur->cert ); + cur->cert ); - if( ! mbedtls_pk_can_do( cur->key, pk_alg ) ) - { + if ( ! mbedtls_pk_can_do( cur->key, pk_alg ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: key type" ) ); continue; } @@ -647,18 +613,16 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, * different uses based on keyUsage, eg if they want to avoid signing * and decrypting with the same RSA key. */ - if( mbedtls_ssl_check_cert_usage( cur->cert, ciphersuite_info, - MBEDTLS_SSL_IS_SERVER, &flags ) != 0 ) - { + if ( mbedtls_ssl_check_cert_usage( cur->cert, ciphersuite_info, + MBEDTLS_SSL_IS_SERVER, &flags ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: " - "(extended) key usage extension" ) ); + "(extended) key usage extension" ) ); continue; } #if defined(MBEDTLS_ECDSA_C) - if( pk_alg == MBEDTLS_PK_ECDSA && - ssl_check_key_curve( cur->key, ssl->handshake->curves ) != 0 ) - { + if ( pk_alg == MBEDTLS_PK_ECDSA && + ssl_check_key_curve( cur->key, ssl->handshake->curves ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: elliptic curve" ) ); continue; } @@ -669,15 +633,14 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, * present them a SHA-higher cert rather than failing if it's the only * one we got that satisfies the other conditions. */ - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 && - cur->cert->sig_md != MBEDTLS_MD_SHA1 ) - { - if( fallback == NULL ) + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 && + cur->cert->sig_md != MBEDTLS_MD_SHA1 ) { + if ( fallback == NULL ) fallback = cur; { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate not preferred: " - "sha-2 with pre-TLS 1.2 client" ) ); - continue; + "sha-2 with pre-TLS 1.2 client" ) ); + continue; } } @@ -685,19 +648,18 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, break; } - if( cur == NULL ) + if ( cur == NULL ) cur = fallback; /* Do not update ssl->handshake->key_cert unless there is a match */ - if( cur != NULL ) - { + if ( cur != NULL ) { ssl->handshake->key_cert = cur; MBEDTLS_SSL_DEBUG_CRT( 3, "selected certificate chain, certificate", - ssl->handshake->key_cert->cert ); - return( 0 ); + ssl->handshake->key_cert->cert ); + return ( 0 ); } - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ @@ -711,68 +673,62 @@ static int ssl_ciphersuite_match( mbedtls_ssl_context *ssl, int suite_id, const mbedtls_ssl_ciphersuite_t *suite_info; suite_info = mbedtls_ssl_ciphersuite_from_id( suite_id ); - if( suite_info == NULL ) - { + if ( suite_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "trying ciphersuite: %s", suite_info->name ) ); - if( suite_info->min_minor_ver > ssl->minor_ver || - suite_info->max_minor_ver < ssl->minor_ver ) - { + if ( suite_info->min_minor_ver > ssl->minor_ver || + suite_info->max_minor_ver < ssl->minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: version" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ( suite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) - return( 0 ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ( suite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) + return ( 0 ); #endif #if defined(MBEDTLS_ARC4_C) - if( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && - suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) - { + if ( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && + suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: rc4" ) ); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( suite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && - ( ssl->handshake->cli_exts & MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK ) == 0 ) - { + if ( suite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && + ( ssl->handshake->cli_exts & MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: ecjpake " "not configured or ext missing" ) ); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) - if( mbedtls_ssl_ciphersuite_uses_ec( suite_info ) && - ( ssl->handshake->curves == NULL || - ssl->handshake->curves[0] == NULL ) ) - { + if ( mbedtls_ssl_ciphersuite_uses_ec( suite_info ) && + ( ssl->handshake->curves == NULL || + ssl->handshake->curves[0] == NULL ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: " - "no common elliptic curve" ) ); - return( 0 ); + "no common elliptic curve" ) ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) /* If the ciphersuite requires a pre-shared key and we don't * have one, skip it now rather than failing later */ - if( mbedtls_ssl_ciphersuite_uses_psk( suite_info ) && - ssl->conf->f_psk == NULL && - ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || - ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) - { + if ( mbedtls_ssl_ciphersuite_uses_psk( suite_info ) && + ssl->conf->f_psk == NULL && + ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || + ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: no pre-shared key" ) ); - return( 0 ); + return ( 0 ); } #endif @@ -784,16 +740,15 @@ static int ssl_ciphersuite_match( mbedtls_ssl_context *ssl, int suite_id, * - try the next ciphersuite if we don't * This must be done last since we modify the key_cert list. */ - if( ssl_pick_cert( ssl, suite_info ) != 0 ) - { + if ( ssl_pick_cert( ssl, suite_info ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: " - "no suitable certificate" ) ); - return( 0 ); + "no suitable certificate" ) ); + return ( 0 ); } #endif *ciphersuite_info = suite_info; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) @@ -810,14 +765,13 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client hello v2" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "client hello v2 illegal for renegotiation" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ @@ -826,11 +780,11 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 4, "record header", buf, 5 ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, message type: %d", - buf[2] ) ); + buf[2] ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, message len.: %d", - ( ( buf[0] & 0x7F ) << 8 ) | buf[1] ) ); + ( ( buf[0] & 0x7F ) << 8 ) | buf[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, max. version: [%d:%d]", - buf[3], buf[4] ) ); + buf[3], buf[4] ) ); /* * SSLv2 Client Hello @@ -842,44 +796,40 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) * 2 . 2 message type * 3 . 4 protocol version */ - if( buf[2] != MBEDTLS_SSL_HS_CLIENT_HELLO || - buf[3] != MBEDTLS_SSL_MAJOR_VERSION_3 ) - { + if ( buf[2] != MBEDTLS_SSL_HS_CLIENT_HELLO || + buf[3] != MBEDTLS_SSL_MAJOR_VERSION_3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } n = ( ( buf[0] << 8 ) | buf[1] ) & 0x7FFF; - if( n < 17 || n > 512 ) - { + if ( n < 17 || n > 512 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->major_ver = MBEDTLS_SSL_MAJOR_VERSION_3; ssl->minor_ver = ( buf[4] <= ssl->conf->max_minor_ver ) ? buf[4] : ssl->conf->max_minor_ver; - if( ssl->minor_ver < ssl->conf->min_minor_ver ) - { + if ( ssl->minor_ver < ssl->conf->min_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", - ssl->major_ver, ssl->minor_ver, - ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); + " [%d:%d] < [%d:%d]", + ssl->major_ver, ssl->minor_ver, + ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } ssl->handshake->max_major_ver = buf[3]; ssl->handshake->max_minor_ver = buf[4]; - if( ( ret = mbedtls_ssl_fetch_input( ssl, 2 + n ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, 2 + n ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } ssl->handshake->update_checksum( ssl, buf + 2, n ); @@ -902,41 +852,37 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) chal_len = ( buf[4] << 8 ) | buf[5]; MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciph_len: %d, sess_len: %d, chal_len: %d", - ciph_len, sess_len, chal_len ) ); + ciph_len, sess_len, chal_len ) ); /* * Make sure each parameter length is valid */ - if( ciph_len < 3 || ( ciph_len % 3 ) != 0 ) - { + if ( ciph_len < 3 || ( ciph_len % 3 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( sess_len > 32 ) - { + if ( sess_len > 32 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( chal_len < 8 || chal_len > 32 ) - { + if ( chal_len < 8 || chal_len > 32 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( n != 6 + ciph_len + sess_len + chal_len ) - { + if ( n != 6 + ciph_len + sess_len + chal_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist", - buf + 6, ciph_len ); + buf + 6, ciph_len ); MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, session id", - buf + 6 + ciph_len, sess_len ); + buf + 6 + ciph_len, sess_len ); MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, challenge", - buf + 6 + ciph_len + sess_len, chal_len ); + buf + 6 + ciph_len + sess_len, chal_len ); p = buf + 6 + ciph_len; ssl->session_negotiate->id_len = sess_len; @@ -951,21 +897,18 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) /* * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */ - for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) - { - if( p[0] == 0 && p[1] == 0 && p[2] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) - { + for ( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) { + if ( p[0] == 0 && p[1] == 0 && p[2] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV " - "during renegotiation" ) ); + "during renegotiation" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; @@ -974,22 +917,19 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) } #if defined(MBEDTLS_SSL_FALLBACK_SCSV) - for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) - { - if( p[0] == 0 && - p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && - p[2] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) - { + for ( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) { + if ( p[0] == 0 && + p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && + p[2] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "received FALLBACK_SCSV" ) ); - if( ssl->minor_ver < ssl->conf->max_minor_ver ) - { + if ( ssl->minor_ver < ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); + MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } break; @@ -1001,41 +941,36 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver]; ciphersuite_info = NULL; #if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) - { - for( i = 0; ciphersuites[i] != 0; i++ ) + for ( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) { + for ( i = 0; ciphersuites[i] != 0; i++ ) #else - for( i = 0; ciphersuites[i] != 0; i++ ) - { - for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) + for ( i = 0; ciphersuites[i] != 0; i++ ) { + for ( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) #endif { - if( p[0] != 0 || - p[1] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || - p[2] != ( ( ciphersuites[i] ) & 0xFF ) ) + if ( p[0] != 0 || + p[1] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || + p[2] != ( ( ciphersuites[i] ) & 0xFF ) ) continue; got_common_suite = 1; - if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], - &ciphersuite_info ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], + &ciphersuite_info ) ) != 0 ) + return ( ret ); - if( ciphersuite_info != NULL ) + if ( ciphersuite_info != NULL ) goto have_ciphersuite_v2; } } - if( got_common_suite ) - { + if ( got_common_suite ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got ciphersuites in common, " - "but none of them usable" ) ); - return( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); - } - else - { + "but none of them usable" ) ); + return ( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); + } else { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) ); - return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); + return ( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } have_ciphersuite_v2: @@ -1047,15 +982,14 @@ have_ciphersuite_v2: /* * SSLv2 Client Hello relevant renegotiation security checks */ - if( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) - { + if ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->in_left = 0; @@ -1063,7 +997,7 @@ have_ciphersuite_v2: MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client hello v2" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO */ @@ -1096,13 +1030,12 @@ read_record_header: * ClientHello, which doesn't use the same record layer format. */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { - if( ( ret = mbedtls_ssl_fetch_input( ssl, 5 ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, 5 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } } @@ -1110,9 +1043,9 @@ read_record_header: #if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_STREAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_STREAM ) #endif - if( ( buf[0] & 0x80 ) != 0 ) + if ( ( buf[0] & 0x80 ) != 0 ) return ssl_parse_client_hello_v2( ssl ); #endif @@ -1128,19 +1061,18 @@ read_record_header: * 3 . 4 message length */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, message type: %d", - buf[0] ) ); + buf[0] ) ); - if( buf[0] != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( buf[0] != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, message len.: %d", - ( ssl->in_len[0] << 8 ) | ssl->in_len[1] ) ); + ( ssl->in_len[0] << 8 ) | ssl->in_len[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, protocol version: [%d:%d]", - buf[1], buf[2] ) ); + buf[1], buf[2] ) ); mbedtls_ssl_read_version( &major, &minor, ssl->conf->transport, buf + 1 ); @@ -1148,33 +1080,29 @@ read_record_header: * "{03,00}, the lowest version number supported by the client, [or] the * value of ClientHello.client_version", so the only meaningful check here * is the major version shouldn't be less than 3 */ - if( major < MBEDTLS_SSL_MAJOR_VERSION_3 ) - { + if ( major < MBEDTLS_SSL_MAJOR_VERSION_3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* For DTLS if this is the initial handshake, remember the client sequence * number to use it in our next message (RFC 6347 4.2.1) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM #if defined(MBEDTLS_SSL_RENEGOTIATION) - && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE + && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE #endif - ) - { + ) { /* Epoch should be 0 for initial handshakes */ - if( ssl->in_ctr[0] != 0 || ssl->in_ctr[1] != 0 ) - { + if ( ssl->in_ctr[0] != 0 || ssl->in_ctr[1] != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } memcpy( ssl->out_ctr + 2, ssl->in_ctr + 2, 6 ); #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) - if( mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) - { + if ( mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "replayed record, discarding" ) ); ssl->next_record_offset = 0; ssl->in_left = 0; @@ -1190,29 +1118,25 @@ read_record_header: msg_len = ( ssl->in_len[0] << 8 ) | ssl->in_len[1]; #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { /* Set by mbedtls_ssl_read_record() */ msg_len = ssl->in_hslen; - } - else + } else #endif { - if( msg_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( msg_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) + msg_len ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) + msg_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } - /* Done reading this record, get ready for the next one */ + /* Done reading this record, get ready for the next one */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) ssl->next_record_offset = msg_len + mbedtls_ssl_hdr_len( ssl ); else #endif @@ -1233,60 +1157,53 @@ read_record_header: * 6 . 8 DTLS only: fragment offset * 9 . 11 DTLS only: fragment length */ - if( msg_len < mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( msg_len < mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, handshake type: %d", buf[0] ) ); - if( buf[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) - { + if ( buf[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, handshake len.: %d", - ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3] ) ); + ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3] ) ); /* We don't support fragmentation of ClientHello (yet?) */ - if( buf[1] != 0 || - msg_len != mbedtls_ssl_hs_hdr_len( ssl ) + ( ( buf[2] << 8 ) | buf[3] ) ) - { + if ( buf[1] != 0 || + msg_len != mbedtls_ssl_hs_hdr_len( ssl ) + ( ( buf[2] << 8 ) | buf[3] ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { /* * Copy the client's handshake message_seq on initial handshakes, * check sequence number on renego. */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { /* This couldn't be done in ssl_prepare_handshake_record() */ unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) | - ssl->in_msg[5]; + ssl->in_msg[5]; - if( cli_msg_seq != ssl->handshake->in_msg_seq ) - { + if ( cli_msg_seq != ssl->handshake->in_msg_seq ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message_seq: " - "%d (expected %d)", cli_msg_seq, - ssl->handshake->in_msg_seq ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + "%d (expected %d)", cli_msg_seq, + ssl->handshake->in_msg_seq ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->handshake->in_msg_seq++; - } - else + } else #endif { unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) | - ssl->in_msg[5]; + ssl->in_msg[5]; ssl->handshake->out_msg_seq = cli_msg_seq; ssl->handshake->in_msg_seq = cli_msg_seq + 1; } @@ -1295,11 +1212,10 @@ read_record_header: * For now we don't support fragmentation, so make sure * fragment_offset == 0 and fragment_length == length */ - if( ssl->in_msg[6] != 0 || ssl->in_msg[7] != 0 || ssl->in_msg[8] != 0 || - memcmp( ssl->in_msg + 1, ssl->in_msg + 9, 3 ) != 0 ) - { + if ( ssl->in_msg[6] != 0 || ssl->in_msg[7] != 0 || ssl->in_msg[8] != 0 || + memcmp( ssl->in_msg + 1, ssl->in_msg + 9, 3 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ClientHello fragmentation not supported" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -1328,10 +1244,9 @@ read_record_header: * 2 + 32 + 1 + 2 + 1 = 38 bytes. Check that first, so that we can * read at least up to session id length without worrying. */ - if( msg_len < 38 ) - { + if ( msg_len < 38 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* @@ -1340,31 +1255,28 @@ read_record_header: MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, version", buf, 2 ); mbedtls_ssl_read_version( &ssl->major_ver, &ssl->minor_ver, - ssl->conf->transport, buf ); + ssl->conf->transport, buf ); ssl->handshake->max_major_ver = ssl->major_ver; ssl->handshake->max_minor_ver = ssl->minor_ver; - if( ssl->major_ver < ssl->conf->min_major_ver || - ssl->minor_ver < ssl->conf->min_minor_ver ) - { + if ( ssl->major_ver < ssl->conf->min_major_ver || + ssl->minor_ver < ssl->conf->min_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", - ssl->major_ver, ssl->minor_ver, - ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); + " [%d:%d] < [%d:%d]", + ssl->major_ver, ssl->minor_ver, + ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } - if( ssl->major_ver > ssl->conf->max_major_ver ) - { + if ( ssl->major_ver > ssl->conf->max_major_ver ) { ssl->major_ver = ssl->conf->max_major_ver; ssl->minor_ver = ssl->conf->max_minor_ver; - } - else if( ssl->minor_ver > ssl->conf->max_minor_ver ) + } else if ( ssl->minor_ver > ssl->conf->max_minor_ver ) ssl->minor_ver = ssl->conf->max_minor_ver; /* @@ -1379,11 +1291,10 @@ read_record_header: */ sess_len = buf[34]; - if( sess_len > sizeof( ssl->session_negotiate->id ) || - sess_len + 34 + 2 > msg_len ) /* 2 for cipherlist length field */ - { + if ( sess_len > sizeof( ssl->session_negotiate->id ) || + sess_len + 34 + 2 > msg_len ) { /* 2 for cipherlist length field */ MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, session id", buf + 35, sess_len ); @@ -1398,75 +1309,65 @@ read_record_header: * Check the cookie length and content */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { cookie_offset = 35 + sess_len; cookie_len = buf[cookie_offset]; - if( cookie_offset + 1 + cookie_len + 2 > msg_len ) - { + if ( cookie_offset + 1 + cookie_len + 2 > msg_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, cookie", - buf + cookie_offset + 1, cookie_len ); + buf + cookie_offset + 1, cookie_len ); #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) - if( ssl->conf->f_cookie_check != NULL + if ( ssl->conf->f_cookie_check != NULL #if defined(MBEDTLS_SSL_RENEGOTIATION) - && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE + && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE #endif - ) - { - if( ssl->conf->f_cookie_check( ssl->conf->p_cookie, - buf + cookie_offset + 1, cookie_len, - ssl->cli_id, ssl->cli_id_len ) != 0 ) - { + ) { + if ( ssl->conf->f_cookie_check( ssl->conf->p_cookie, + buf + cookie_offset + 1, cookie_len, + ssl->cli_id, ssl->cli_id_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification failed" ) ); ssl->handshake->verify_cookie_len = 1; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification passed" ) ); ssl->handshake->verify_cookie_len = 0; } - } - else + } else #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ { /* We know we didn't send a cookie, so it should be empty */ - if( cookie_len != 0 ) - { + if ( cookie_len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification skipped" ) ); } - /* - * Check the ciphersuitelist length (will be parsed later) - */ + /* + * Check the ciphersuitelist length (will be parsed later) + */ ciph_offset = cookie_offset + 1 + cookie_len; - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ ciph_offset = 35 + sess_len; ciph_len = ( buf[ciph_offset + 0] << 8 ) - | ( buf[ciph_offset + 1] ); + | ( buf[ciph_offset + 1] ); - if( ciph_len < 2 || - ciph_len + 2 + ciph_offset + 1 > msg_len || /* 1 for comp. alg. len */ - ( ciph_len % 2 ) != 0 ) - { + if ( ciph_len < 2 || + ciph_len + 2 + ciph_offset + 1 > msg_len || /* 1 for comp. alg. len */ + ( ciph_len % 2 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist", - buf + ciph_offset + 2, ciph_len ); + buf + ciph_offset + 2, ciph_len ); /* * Check the compression algorithms length and pick one @@ -1475,23 +1376,20 @@ read_record_header: comp_len = buf[comp_offset]; - if( comp_len < 1 || - comp_len > 16 || - comp_len + comp_offset + 1 > msg_len ) - { + if ( comp_len < 1 || + comp_len > 16 || + comp_len + comp_offset + 1 > msg_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, compression", - buf + comp_offset + 1, comp_len ); + buf + comp_offset + 1, comp_len ); ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_NULL; #if defined(MBEDTLS_ZLIB_SUPPORT) - for( i = 0; i < comp_len; ++i ) - { - if( buf[comp_offset + 1 + i] == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { + for ( i = 0; i < comp_len; ++i ) { + if ( buf[comp_offset + 1 + i] == MBEDTLS_SSL_COMPRESS_DEFLATE ) { ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_DEFLATE; break; } @@ -1500,199 +1398,190 @@ read_record_header: /* See comments in ssl_write_client_hello() */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_NULL; #endif /* Do not parse the extensions if the protocol is SSLv3 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) - { + if ( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) { #endif /* * Check the extension length */ ext_offset = comp_offset + 1 + comp_len; - if( msg_len > ext_offset ) - { - if( msg_len < ext_offset + 2 ) - { + if ( msg_len > ext_offset ) { + if ( msg_len < ext_offset + 2 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ext_len = ( buf[ext_offset + 0] << 8 ) - | ( buf[ext_offset + 1] ); + | ( buf[ext_offset + 1] ); - if( ( ext_len > 0 && ext_len < 4 ) || - msg_len != ext_offset + 2 + ext_len ) - { + if ( ( ext_len > 0 && ext_len < 4 ) || + msg_len != ext_offset + 2 + ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - } - else + } else ext_len = 0; ext = buf + ext_offset + 2; MBEDTLS_SSL_DEBUG_BUF( 3, "client hello extensions", ext, ext_len ); - while( ext_len != 0 ) - { + while ( ext_len != 0 ) { unsigned int ext_id = ( ( ext[0] << 8 ) - | ( ext[1] ) ); + | ( ext[1] ) ); unsigned int ext_size = ( ( ext[2] << 8 ) - | ( ext[3] ) ); + | ( ext[3] ) ); - if( ext_size + 4 > ext_len ) - { + if ( ext_size + 4 > ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - switch( ext_id ) - { + switch ( ext_id ) { #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - case MBEDTLS_TLS_EXT_SERVERNAME: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ServerName extension" ) ); - if( ssl->conf->f_sni == NULL ) - break; + case MBEDTLS_TLS_EXT_SERVERNAME: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ServerName extension" ) ); + if ( ssl->conf->f_sni == NULL ) + break; - ret = ssl_parse_servername_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_servername_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ - case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); + case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - renegotiation_info_seen = 1; + renegotiation_info_seen = 1; #endif - ret = ssl_parse_renegotiation_info( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_renegotiation_info( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) - case MBEDTLS_TLS_EXT_SIG_ALG: + case MBEDTLS_TLS_EXT_SIG_ALG: MBEDTLS_SSL_DEBUG_MSG( 3, ( "found signature_algorithms extension" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - break; + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) + break; #endif - ret = ssl_parse_signature_algorithms_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_signature_algorithms_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_PROTO_TLS1_2 && MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported elliptic curves extension" ) ); + case MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported elliptic curves extension" ) ); - ret = ssl_parse_supported_elliptic_curves( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_supported_elliptic_curves( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; - case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported point formats extension" ) ); - ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT; + case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported point formats extension" ) ); + ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT; - ret = ssl_parse_supported_point_formats( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_supported_point_formats( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake kkpp extension" ) ); + case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake kkpp extension" ) ); - ret = ssl_parse_ecjpake_kkpp( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_ecjpake_kkpp( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max fragment length extension" ) ); + case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max fragment length extension" ) ); - ret = ssl_parse_max_fragment_length_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_max_fragment_length_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) ); + case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) ); - ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt then mac extension" ) ); + case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt then mac extension" ) ); - ret = ssl_parse_encrypt_then_mac_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_encrypt_then_mac_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended master secret extension" ) ); + case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended master secret extension" ) ); - ret = ssl_parse_extended_ms_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_extended_ms_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - case MBEDTLS_TLS_EXT_SESSION_TICKET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session ticket extension" ) ); + case MBEDTLS_TLS_EXT_SESSION_TICKET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session ticket extension" ) ); - ret = ssl_parse_session_ticket_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_session_ticket_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_SSL_ALPN) - case MBEDTLS_TLS_EXT_ALPN: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); + case MBEDTLS_TLS_EXT_ALPN: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); - ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_SESSION_TICKETS */ - default: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", - ext_id ) ); + default: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", + ext_id ) ); } ext_len -= 4 + ext_size; ext += 4 + ext_size; - if( ext_len > 0 && ext_len < 4 ) - { + if ( ext_len > 0 && ext_len < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -1700,21 +1589,18 @@ read_record_header: #endif #if defined(MBEDTLS_SSL_FALLBACK_SCSV) - for( i = 0, p = buf + 41 + sess_len; i < ciph_len; i += 2, p += 2 ) - { - if( p[0] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && - p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) - { + for ( i = 0, p = buf + 41 + sess_len; i < ciph_len; i += 2, p += 2 ) { + if ( p[0] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && + p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received FALLBACK_SCSV" ) ); - if( ssl->minor_ver < ssl->conf->max_minor_ver ) - { + if ( ssl->minor_ver < ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); + MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } break; @@ -1725,20 +1611,17 @@ read_record_header: /* * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */ - for( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 ) - { - if( p[0] == 0 && p[1] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) - { + for ( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 ) { + if ( p[0] == 0 && p[1] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV during renegotiation" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; @@ -1749,42 +1632,35 @@ read_record_header: /* * Renegotiation security checks */ - if( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) - { + if ( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); handshake_failure = 1; } #if defined(MBEDTLS_SSL_RENEGOTIATION) - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && - renegotiation_info_seen == 0 ) - { + else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && + renegotiation_info_seen == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - renegotiation_info_seen == 1 ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + renegotiation_info_seen == 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) ); handshake_failure = 1; } #endif /* MBEDTLS_SSL_RENEGOTIATION */ - if( handshake_failure == 1 ) - { - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( handshake_failure == 1 ) { + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* @@ -1796,42 +1672,37 @@ read_record_header: ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver]; ciphersuite_info = NULL; #if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) - { - for( i = 0; ciphersuites[i] != 0; i++ ) + for ( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) { + for ( i = 0; ciphersuites[i] != 0; i++ ) #else - for( i = 0; ciphersuites[i] != 0; i++ ) - { - for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) + for ( i = 0; ciphersuites[i] != 0; i++ ) { + for ( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) #endif { - if( p[0] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || - p[1] != ( ( ciphersuites[i] ) & 0xFF ) ) + if ( p[0] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || + p[1] != ( ( ciphersuites[i] ) & 0xFF ) ) continue; got_common_suite = 1; - if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], - &ciphersuite_info ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], + &ciphersuite_info ) ) != 0 ) + return ( ret ); - if( ciphersuite_info != NULL ) + if ( ciphersuite_info != NULL ) goto have_ciphersuite; } } - if( got_common_suite ) - { + if ( got_common_suite ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got ciphersuites in common, " - "but none of them usable" ) ); + "but none of them usable" ) ); mbedtls_ssl_send_fatal_handshake_failure( ssl ); - return( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); - } - else - { + return ( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); + } else { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) ); mbedtls_ssl_send_fatal_handshake_failure( ssl ); - return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); + return ( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } have_ciphersuite: @@ -1843,24 +1714,23 @@ have_ciphersuite: ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client hello" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->session_negotiate->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) - { + if ( ssl->session_negotiate->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) { *olen = 0; return; } @@ -1879,16 +1749,15 @@ static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const mbedtls_ssl_ciphersuite_t *suite = NULL; const mbedtls_cipher_info_t *cipher = NULL; - if( ssl->session_negotiate->encrypt_then_mac == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->session_negotiate->encrypt_then_mac == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { *olen = 0; return; } @@ -1899,11 +1768,10 @@ static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, * with Associated Data (AEAD) ciphersuite, it MUST NOT send an * encrypt-then-MAC response extension back to the client." */ - if( ( suite = mbedtls_ssl_ciphersuite_from_id( - ssl->session_negotiate->ciphersuite ) ) == NULL || - ( cipher = mbedtls_cipher_info_from_type( suite->cipher ) ) == NULL || - cipher->mode != MBEDTLS_MODE_CBC ) - { + if ( ( suite = mbedtls_ssl_ciphersuite_from_id( + ssl->session_negotiate->ciphersuite ) ) == NULL || + ( cipher = mbedtls_cipher_info_from_type( suite->cipher ) ) == NULL || + cipher->mode != MBEDTLS_MODE_CBC ) { *olen = 0; return; } @@ -1927,15 +1795,14 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, { unsigned char *p = buf; - if( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { *olen = 0; return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding extended master secret " - "extension" ) ); + "extension" ) ); *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET ) & 0xFF ); @@ -1949,13 +1816,12 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_SESSION_TICKETS) static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->handshake->new_session_ticket == 0 ) - { + if ( ssl->handshake->new_session_ticket == 0 ) { *olen = 0; return; } @@ -1973,13 +1839,12 @@ static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, #endif /* MBEDTLS_SSL_SESSION_TICKETS */ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION ) - { + if ( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION ) { *olen = 0; return; } @@ -1990,8 +1855,7 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_RENEGOTIATION_INFO ) & 0xFF ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { *p++ = 0x00; *p++ = ( ssl->verify_data_len * 2 + 1 ) & 0xFF; *p++ = ssl->verify_data_len * 2 & 0xFF; @@ -2000,8 +1864,7 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, p += ssl->verify_data_len; memcpy( p, ssl->own_verify_data, ssl->verify_data_len ); p += ssl->verify_data_len; - } - else + } else #endif /* MBEDTLS_SSL_RENEGOTIATION */ { *p++ = 0x00; @@ -2014,13 +1877,12 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->session_negotiate->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) - { + if ( ssl->session_negotiate->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) { *olen = 0; return; } @@ -2042,15 +1904,14 @@ static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; ((void) ssl); - if( ( ssl->handshake->cli_exts & - MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT ) == 0 ) - { + if ( ( ssl->handshake->cli_exts & + MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT ) == 0 ) { *olen = 0; return; } @@ -2083,14 +1944,13 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, *olen = 0; /* Skip costly computation if not needed */ - if( ssl->transform_negotiate->ciphersuite_info->key_exchange != - MBEDTLS_KEY_EXCHANGE_ECJPAKE ) + if ( ssl->transform_negotiate->ciphersuite_info->key_exchange != + MBEDTLS_KEY_EXCHANGE_ECJPAKE ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, ecjpake kkpp extension" ) ); - if( end - p < 4 ) - { + if ( end - p < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -2099,11 +1959,10 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ECJPAKE_KKPP ) & 0xFF ); ret = mbedtls_ecjpake_write_round_one( &ssl->handshake->ecjpake_ctx, - p + 2, end - p - 2, &kkpp_len, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1 , "mbedtls_ecjpake_write_round_one", ret ); + p + 2, end - p - 2, &kkpp_len, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_one", ret ); return; } @@ -2118,8 +1977,7 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl, unsigned char *buf, size_t *olen ) { - if( ssl->alpn_chosen == NULL ) - { + if ( ssl->alpn_chosen == NULL ) { *olen = 0; return; } @@ -2169,26 +2027,24 @@ static int ssl_write_hello_verify_request( mbedtls_ssl_context *ssl ) /* The RFC is not clear on this point, but sending the actual negotiated * version looks like the most interoperable thing to do. */ mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); MBEDTLS_SSL_DEBUG_BUF( 3, "server version", p, 2 ); p += 2; /* If we get here, f_cookie_check is not null */ - if( ssl->conf->f_cookie_write == NULL ) - { + if ( ssl->conf->f_cookie_write == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "inconsistent cookie callbacks" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } /* Skip length byte until we know the length */ cookie_len_byte = p++; - if( ( ret = ssl->conf->f_cookie_write( ssl->conf->p_cookie, - &p, ssl->out_buf + MBEDTLS_SSL_BUFFER_LEN, - ssl->cli_id, ssl->cli_id_len ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_cookie_write( ssl->conf->p_cookie, + &p, ssl->out_buf + MBEDTLS_SSL_BUFFER_LEN, + ssl->cli_id, ssl->cli_id_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "f_cookie_write", ret ); - return( ret ); + return ( ret ); } *cookie_len_byte = (unsigned char)( p - ( cookie_len_byte + 1 ) ); @@ -2201,15 +2057,14 @@ static int ssl_write_hello_verify_request( mbedtls_ssl_context *ssl ) ssl->state = MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write hello verify request" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ @@ -2225,20 +2080,18 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server hello" ) ); #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->verify_cookie_len != 0 ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->verify_cookie_len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "client hello was not authenticated" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) ); - return( ssl_write_hello_verify_request( ssl ) ); + return ( ssl_write_hello_verify_request( ssl ) ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ - if( ssl->conf->f_rng == NULL ) - { + if ( ssl->conf->f_rng == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no RNG provided") ); - return( MBEDTLS_ERR_SSL_NO_RNG ); + return ( MBEDTLS_ERR_SSL_NO_RNG ); } /* @@ -2252,11 +2105,11 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) p = buf + 4; mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); p += 2; MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen version: [%d:%d]", - buf[4], buf[5] ) ); + buf[4], buf[5] ) ); #if defined(MBEDTLS_HAVE_TIME) t = mbedtls_time( NULL ); @@ -2267,14 +2120,14 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) ); #else - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) + return ( ret ); p += 4; #endif /* MBEDTLS_HAVE_TIME */ - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) + return ( ret ); p += 28; @@ -2287,20 +2140,18 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) * It may be already set to 1 by ssl_parse_session_ticket_ext(). * If not, try looking up session ID in our cache. */ - if( ssl->handshake->resume == 0 && + if ( ssl->handshake->resume == 0 && #if defined(MBEDTLS_SSL_RENEGOTIATION) - ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE && + ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE && #endif - ssl->session_negotiate->id_len != 0 && - ssl->conf->f_get_cache != NULL && - ssl->conf->f_get_cache( ssl->conf->p_cache, ssl->session_negotiate ) == 0 ) - { + ssl->session_negotiate->id_len != 0 && + ssl->conf->f_get_cache != NULL && + ssl->conf->f_get_cache( ssl->conf->p_cache, ssl->session_negotiate ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "session successfully restored from cache" ) ); ssl->handshake->resume = 1; } - if( ssl->handshake->resume == 0 ) - { + if ( ssl->handshake->resume == 0 ) { /* * New session, create a new session id, * unless we're about to issue a session ticket @@ -2312,32 +2163,27 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) #endif #if defined(MBEDTLS_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) - { + if ( ssl->handshake->new_session_ticket != 0 ) { ssl->session_negotiate->id_len = n = 0; memset( ssl->session_negotiate->id, 0, 32 ); - } - else + } else #endif /* MBEDTLS_SSL_SESSION_TICKETS */ { ssl->session_negotiate->id_len = n = 32; - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id, - n ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id, + n ) ) != 0 ) + return ( ret ); } - } - else - { + } else { /* * Resuming a session */ n = ssl->session_negotiate->id_len; ssl->state = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC; - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } } @@ -2356,78 +2202,76 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, session id len.: %d", n ) ); MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, session id", buf + 39, n ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "%s session has been resumed", - ssl->handshake->resume ? "a" : "no" ) ); + ssl->handshake->resume ? "a" : "no" ) ); *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite >> 8 ); *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite ); *p++ = (unsigned char)( ssl->session_negotiate->compression ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %s", - mbedtls_ssl_get_ciphersuite_name( ssl->session_negotiate->ciphersuite ) ) ); + mbedtls_ssl_get_ciphersuite_name( ssl->session_negotiate->ciphersuite ) ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: 0x%02X", - ssl->session_negotiate->compression ) ); + ssl->session_negotiate->compression ) ); /* Do not write the extensions if the protocol is SSLv3 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) - { + if ( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) { #endif - /* - * First write extensions, then the total length - */ - ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + /* + * First write extensions, then the total length + */ + ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - ssl_write_encrypt_then_mac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_encrypt_then_mac_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - ssl_write_extended_ms_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_extended_ms_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_SESSION_TICKETS) - ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - ssl_write_ecjpake_kkpp_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_ecjpake_kkpp_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_ALPN) - ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif - MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, total extension length: %d", ext_len ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, total extension length: %d", ext_len ) ); - if( ext_len > 0 ) - { - *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ext_len ) & 0xFF ); - p += ext_len; - } + if ( ext_len > 0 ) { + *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); + *p++ = (unsigned char)( ( ext_len ) & 0xFF ); + p += ext_len; + } #if defined(MBEDTLS_SSL_PROTO_SSL3) } @@ -2441,7 +2285,7 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) ); - return( ret ); + return ( ret ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -2456,19 +2300,18 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate request" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) @@ -2487,21 +2330,20 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) + if ( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) authmode = ssl->handshake->sni_authmode; else #endif authmode = ssl->conf->authmode; - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || - authmode == MBEDTLS_SSL_VERIFY_NONE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || + authmode == MBEDTLS_SSL_VERIFY_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2552,18 +2394,16 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) * enum { (255) } HashAlgorithm; * enum { (255) } SignatureAlgorithm; */ - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { const int *cur; /* * Supported signature algorithms */ - for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) - { + for ( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) { unsigned char hash = mbedtls_ssl_hash_from_md_alg( *cur ); - if( MBEDTLS_SSL_HASH_NONE == hash || mbedtls_ssl_set_calc_verify_md( ssl, hash ) ) + if ( MBEDTLS_SSL_HASH_NONE == hash || mbedtls_ssl_set_calc_verify_md( ssl, hash ) ) continue; #if defined(MBEDTLS_RSA_C) @@ -2589,21 +2429,19 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) */ p += 2; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_ca_chain != NULL ) + if ( ssl->handshake->sni_ca_chain != NULL ) crt = ssl->handshake->sni_ca_chain; else #endif crt = ssl->conf->ca_chain; total_dn_size = 0; - while( crt != NULL && crt->version != 0 ) - { + while ( crt != NULL && crt->version != 0 ) { dn_size = crt->subject_raw.len; - if( end < p || - (size_t)( end - p ) < dn_size || - (size_t)( end - p ) < 2 + dn_size ) - { + if ( end < p || + (size_t)( end - p ) < dn_size || + (size_t)( end - p ) < 2 + dn_size ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "skipping CAs: buffer too short" ) ); break; } @@ -2629,7 +2467,7 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate request" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -2644,21 +2482,19 @@ static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl ) { int ret; - if( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECKEY ) ) - { + if ( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECKEY ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, - mbedtls_pk_ec( *mbedtls_ssl_own_key( ssl ) ), - MBEDTLS_ECDH_OURS ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, + mbedtls_pk_ec( *mbedtls_ssl_own_key( ssl ) ), + MBEDTLS_ECDH_OURS ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_get_params" ), ret ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ @@ -2668,7 +2504,7 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) int ret; size_t n = 0; const mbedtls_ssl_ciphersuite_t *ciphersuite_info = - ssl->transform_negotiate->ciphersuite_info; + ssl->transform_negotiate->ciphersuite_info; #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ @@ -2689,41 +2525,37 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { ssl_get_ecdh_params_from_cert( ssl ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { size_t jlen; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, - p, end - p, &jlen, ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { + p, end - p, &jlen, ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); - return( ret ); + return ( ret ); } p += jlen; @@ -2733,9 +2565,8 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { /* Note: we don't support identity hints, until someone asks * for them. */ *(p++) = 0x00; @@ -2748,13 +2579,11 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - if( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + if ( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no DH parameters set" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* @@ -2766,19 +2595,17 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) * opaque dh_Ys<1..2^16-1>; * } ServerDHParams; */ - if( ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.P, &ssl->conf->dhm_P ) ) != 0 || - ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.G, &ssl->conf->dhm_G ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.P, &ssl->conf->dhm_P ) ) != 0 || + ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.G, &ssl->conf->dhm_G ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_mpi_copy", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_dhm_make_params( &ssl->handshake->dhm_ctx, - (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), - p, &len, ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_make_params( &ssl->handshake->dhm_ctx, + (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), + p, &len, ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_params", ret ); - return( ret ); + return ( ret ); } dig_signed = p; @@ -2796,10 +2623,9 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { /* * Ephemeral ECDH parameters: * @@ -2812,33 +2638,30 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) const mbedtls_ecp_group_id *gid; /* Match our preference list against the offered curves */ - for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) - for( curve = ssl->handshake->curves; *curve != NULL; curve++ ) - if( (*curve)->grp_id == *gid ) + for ( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) + for ( curve = ssl->handshake->curves; *curve != NULL; curve++ ) + if ( (*curve)->grp_id == *gid ) goto curve_matching_done; -curve_matching_done: - if( curve == NULL || *curve == NULL ) - { + curve_matching_done: + if ( curve == NULL || *curve == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no matching curve for ECDHE" ) ); - return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); + return ( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) ); - if( ( ret = mbedtls_ecp_group_load( &ssl->handshake->ecdh_ctx.grp, - (*curve)->grp_id ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_group_load( &ssl->handshake->ecdh_ctx.grp, + (*curve)->grp_id ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecp_group_load", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_ecdh_make_params( &ssl->handshake->ecdh_ctx, &len, - p, MBEDTLS_SSL_MAX_CONTENT_LEN - n, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_make_params( &ssl->handshake->ecdh_ctx, &len, + p, MBEDTLS_SSL_MAX_CONTENT_LEN - n, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_params", ret ); - return( ret ); + return ( ret ); } dig_signed = p; @@ -2854,10 +2677,9 @@ curve_matching_done: #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { size_t signature_len = 0; unsigned int hashlen = 0; unsigned char hash[64]; @@ -2867,38 +2689,32 @@ curve_matching_done: * Choose hash algorithm. NONE means MD5 + SHA1 here. */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { md_alg = mbedtls_ssl_md_alg_from_hash( ssl->handshake->sig_alg ); - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ciphersuite_info->key_exchange == - MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { - md_alg = MBEDTLS_MD_SHA1; - } - else + if ( ciphersuite_info->key_exchange == + MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { + md_alg = MBEDTLS_MD_SHA1; + } else #endif - { - md_alg = MBEDTLS_MD_NONE; - } + { + md_alg = MBEDTLS_MD_NONE; + } /* * Compute the hash to be signed */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { mbedtls_md5_context mbedtls_md5; mbedtls_sha1_context mbedtls_sha1; @@ -2932,64 +2748,58 @@ curve_matching_done: mbedtls_md5_free( &mbedtls_md5 ); mbedtls_sha1_free( &mbedtls_sha1 ); - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( md_alg != MBEDTLS_MD_NONE ) - { - mbedtls_md_context_t ctx; - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); + if ( md_alg != MBEDTLS_MD_NONE ) { + mbedtls_md_context_t ctx; + const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - mbedtls_md_init( &ctx ); + mbedtls_md_init( &ctx ); - /* Info from md_alg will be used instead */ - hashlen = 0; + /* Info from md_alg will be used instead */ + hashlen = 0; - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - return( ret ); - } + /* + * digitally-signed struct { + * opaque client_random[32]; + * opaque server_random[32]; + * ServerDHParams params; + * }; + */ + if ( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); + return ( ret ); + } - mbedtls_md_starts( &ctx ); - mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); - mbedtls_md_update( &ctx, dig_signed, dig_signed_len ); - mbedtls_md_finish( &ctx, hash ); - mbedtls_md_free( &ctx ); - } - else + mbedtls_md_starts( &ctx ); + mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); + mbedtls_md_update( &ctx, dig_signed, dig_signed_len ); + mbedtls_md_finish( &ctx, hash ); + mbedtls_md_free( &ctx ); + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen : - (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); + (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); /* * Make the signature */ - if( mbedtls_ssl_own_key( ssl ) == NULL ) - { + if ( mbedtls_ssl_own_key( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { *(p++) = ssl->handshake->sig_alg; *(p++) = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); @@ -2997,12 +2807,11 @@ curve_matching_done: } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - if( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash, hashlen, - p + 2 , &signature_len, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash, hashlen, + p + 2, &signature_len, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_sign", ret ); - return( ret ); + return ( ret ); } *(p++) = (unsigned char)( signature_len >> 8 ); @@ -3023,15 +2832,14 @@ curve_matching_done: ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) ); - return( 0 ); + return ( 0 ); } static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl ) @@ -3047,19 +2855,18 @@ static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello done" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ @@ -3073,32 +2880,29 @@ static int ssl_parse_client_dh_public( mbedtls_ssl_context *ssl, unsigned char * /* * Receive G^Y mod P, premaster = (G^Y)^X mod P */ - if( *p + 2 > end ) - { + if ( *p + 2 > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } n = ( (*p)[0] << 8 ) | (*p)[1]; *p += 2; - if( *p + n > end ) - { + if ( *p + n > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_read_public", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); } *p += n; MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ @@ -3119,10 +2923,9 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, size_t i, peer_pmslen; unsigned int diff; - if( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_RSA ) ) - { + if ( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_RSA ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no RSA private key" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } /* @@ -3130,26 +2933,23 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( *p++ != ( ( len >> 8 ) & 0xFF ) || - *p++ != ( ( len ) & 0xFF ) ) - { + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( *p++ != ( ( len >> 8 ) & 0xFF ) || + *p++ != ( ( len ) & 0xFF ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } } #endif - if( p + len != end ) - { + if ( p + len != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } mbedtls_ssl_write_version( ssl->handshake->max_major_ver, - ssl->handshake->max_minor_ver, - ssl->conf->transport, ver ); + ssl->handshake->max_minor_ver, + ssl->conf->transport, ver ); /* * Protection against Bleichenbacher's attack: invalid PKCS#1 v1.5 padding @@ -3159,13 +2959,13 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, * timing-based variants. */ ret = ssl->conf->f_rng( ssl->conf->p_rng, fake_pms, sizeof( fake_pms ) ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); ret = mbedtls_pk_decrypt( mbedtls_ssl_own_key( ssl ), p, len, - peer_pms, &peer_pmslen, - sizeof( peer_pms ), - ssl->conf->f_rng, ssl->conf->p_rng ); + peer_pms, &peer_pmslen, + sizeof( peer_pms ), + ssl->conf->f_rng, ssl->conf->p_rng ); diff = (unsigned int) ret; diff |= peer_pmslen ^ 48; @@ -3173,15 +2973,14 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, diff |= peer_pms[1] ^ ver[1]; #if defined(MBEDTLS_SSL_DEBUG_ALL) - if( diff != 0 ) + if ( diff != 0 ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); #endif - if( sizeof( ssl->handshake->premaster ) < pms_offset || - sizeof( ssl->handshake->premaster ) - pms_offset < 48 ) - { + if ( sizeof( ssl->handshake->premaster ) < pms_offset || + sizeof( ssl->handshake->premaster ) - pms_offset < 48 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } ssl->handshake->pmslen = 48; @@ -3197,79 +2996,70 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, #pragma warning( pop ) #endif - for( i = 0; i < ssl->handshake->pmslen; i++ ) + for ( i = 0; i < ssl->handshake->pmslen; i++ ) pms[i] = ( mask & fake_pms[i] ) | ( (~mask) & peer_pms[i] ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned char **p, - const unsigned char *end ) + const unsigned char *end ) { int ret = 0; size_t n; - if( ssl->conf->f_psk == NULL && - ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || - ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) - { + if ( ssl->conf->f_psk == NULL && + ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || + ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no pre-shared key" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } /* * Receive client pre-shared key identity name */ - if( *p + 2 > end ) - { + if ( *p + 2 > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } n = ( (*p)[0] << 8 ) | (*p)[1]; *p += 2; - if( n < 1 || n > 65535 || *p + n > end ) - { + if ( n < 1 || n > 65535 || *p + n > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ssl->conf->f_psk != NULL ) - { - if( ssl->conf->f_psk( ssl->conf->p_psk, ssl, *p, n ) != 0 ) + if ( ssl->conf->f_psk != NULL ) { + if ( ssl->conf->f_psk( ssl->conf->p_psk, ssl, *p, n ) != 0 ) ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY; - } - else - { + } else { /* Identity is not a big secret since clients send it in the clear, * but treat it carefully anyway, just in case */ - if( n != ssl->conf->psk_identity_len || - mbedtls_ssl_safer_memcmp( ssl->conf->psk_identity, *p, n ) != 0 ) - { + if ( n != ssl->conf->psk_identity_len || + mbedtls_ssl_safer_memcmp( ssl->conf->psk_identity, *p, n ) != 0 ) { ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY; } } - if( ret == MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ) - { + if ( ret == MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ) { MBEDTLS_SSL_DEBUG_BUF( 3, "Unknown PSK identity", *p, n ); - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY ) ) != 0 ) { + return ( ret ); } - return( MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ); + return ( MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ); } *p += n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ @@ -3283,244 +3073,203 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client key exchange" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); end = ssl->in_msg + ssl->in_hslen; - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) - { - if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) { + if ( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, - ssl->handshake->premaster, - MBEDTLS_PREMASTER_SIZE, - &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, + ssl->handshake->premaster, + MBEDTLS_PREMASTER_SIZE, + &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { - if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, - p, end - p) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { + if ( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, + p, end - p) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); + } - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, - &ssl->handshake->pmslen, - ssl->handshake->premaster, - MBEDTLS_MPI_MAX_SIZE, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); - } + if ( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, + &ssl->handshake->pmslen, + ssl->handshake->premaster, + MBEDTLS_MPI_MAX_SIZE, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); + } - MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z ", &ssl->handshake->ecdh_ctx.z ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z ", &ssl->handshake->ecdh_ctx.z ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } - if( p != end ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } + if ( p != end ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + } - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } - if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret ); - return( ret ); - } + if ( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret ); + return ( ret ); + } - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); - return( ret ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } + if ( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); + return ( ret ); + } - if( p != end ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } + if ( p != end ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + } - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } - if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, - p, end - p ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } + if ( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, + p, end - p ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); + } - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) - { - if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_parse_encrypted_pms_secret" ), ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { + if ( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 0 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_parse_encrypted_pms_secret" ), ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { - ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, - p, end - p ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { + ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, + p, end - p ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } - ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, - ssl->handshake->premaster, 32, &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); - return( ret ); - } - } - else + ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, + ssl->handshake->premaster, 32, &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } ssl->state++; MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client key exchange" ) ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -3535,19 +3284,18 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) @@ -3565,45 +3313,41 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || - ssl->session_negotiate->peer_cert == NULL ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || + ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } /* Read the message without adding it to the checksum */ do { - if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret ); - return( ret ); + return ( ret ); } ret = mbedtls_ssl_handle_message_type( ssl ); - } while( MBEDTLS_ERR_SSL_NON_FATAL == ret ); + } while ( MBEDTLS_ERR_SSL_NON_FATAL == ret ); - if( 0 != ret ) - { + if ( 0 != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret ); - return( ret ); + return ( ret ); } ssl->state++; /* Process the message contents */ - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE || - ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE || + ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } i = mbedtls_ssl_hs_hdr_len( ssl ); @@ -3616,114 +3360,102 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { md_alg = MBEDTLS_MD_NONE; hashlen = 36; /* For ECDSA, use SHA-1, not MD-5 + SHA-1 */ - if( mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, - MBEDTLS_PK_ECDSA ) ) - { + if ( mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, + MBEDTLS_PK_ECDSA ) ) { hash_start += 16; hashlen -= 16; md_alg = MBEDTLS_MD_SHA1; } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - if( i + 2 > ssl->in_hslen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + if ( i + 2 > ssl->in_hslen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } - /* - * Hash - */ - md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] ); + /* + * Hash + */ + md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] ); - if( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" - " for verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + if ( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" + " for verify message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } #if !defined(MBEDTLS_MD_SHA1) - if( MBEDTLS_MD_SHA1 == md_alg ) - hash_start += 16; + if ( MBEDTLS_MD_SHA1 == md_alg ) + hash_start += 16; #endif - /* Info from md_alg will be used instead */ - hashlen = 0; + /* Info from md_alg will be used instead */ + hashlen = 0; - i++; + i++; - /* - * Signature - */ - if( ( pk_alg = mbedtls_ssl_pk_alg_from_sig( ssl->in_msg[i] ) ) - == MBEDTLS_PK_NONE ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" - " for verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + /* + * Signature + */ + if ( ( pk_alg = mbedtls_ssl_pk_alg_from_sig( ssl->in_msg[i] ) ) + == MBEDTLS_PK_NONE ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" + " for verify message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } - /* - * Check the certificate's key type matches the signature alg - */ - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + /* + * Check the certificate's key type matches the signature alg + */ + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } - i++; - } - else + i++; + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( i + 2 > ssl->in_hslen ) - { + if ( i + 2 > ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - sig_len = ( ssl->in_msg[i] << 8 ) | ssl->in_msg[i+1]; + sig_len = ( ssl->in_msg[i] << 8 ) | ssl->in_msg[i + 1]; i += 2; - if( i + sig_len != ssl->in_hslen ) - { + if ( i + sig_len != ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } /* Calculate hash and verify signature */ ssl->handshake->calc_verify( ssl, hash ); - if( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, - md_alg, hash_start, hashlen, - ssl->in_msg + i, sig_len ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, + md_alg, hash_start, hashlen, + ssl->in_msg + i, sig_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_verify", ret ); - return( ret ); + return ( ret ); } mbedtls_ssl_update_handshake_status( ssl ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -3755,12 +3487,11 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) * 10 . 9+n ticket content */ - if( ( ret = ssl->conf->f_ticket_write( ssl->conf->p_ticket, - ssl->session_negotiate, - ssl->out_msg + 10, - ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN, - &tlen, &lifetime ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_ticket_write( ssl->conf->p_ticket, + ssl->session_negotiate, + ssl->out_msg + 10, + ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN, + &tlen, &lifetime ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_write", ret ); tlen = 0; } @@ -3781,15 +3512,14 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) */ ssl->handshake->new_session_ticket = 0; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write new session ticket" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ @@ -3800,25 +3530,23 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "server state: %d", ssl->state ) ); - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - return( ret ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) + return ( ret ); } #endif - switch( ssl->state ) - { + switch ( ssl->state ) { case MBEDTLS_SSL_HELLO_REQUEST: ssl->state = MBEDTLS_SSL_CLIENT_HELLO; break; @@ -3832,7 +3560,7 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_SSL_PROTO_DTLS) case MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT: - return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); #endif /* @@ -3896,7 +3624,7 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) */ case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: #if defined(MBEDTLS_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) + if ( ssl->handshake->new_session_ticket != 0 ) ret = ssl_write_new_session_ticket( ssl ); else #endif @@ -3918,9 +3646,9 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SSL_SRV_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ticket.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ticket.c index 4d9116d2..76bb1e40 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ticket.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_ticket.c @@ -40,8 +40,10 @@ #include /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -72,11 +74,11 @@ static int ssl_ticket_gen_key( mbedtls_ssl_ticket_context *ctx, key->generation_time = (uint32_t) mbedtls_time( NULL ); #endif - if( ( ret = ctx->f_rng( ctx->p_rng, key->name, sizeof( key->name ) ) ) != 0 ) - return( ret ); + if ( ( ret = ctx->f_rng( ctx->p_rng, key->name, sizeof( key->name ) ) ) != 0 ) + return ( ret ); - if( ( ret = ctx->f_rng( ctx->p_rng, buf, sizeof( buf ) ) ) != 0 ) - return( ret ); + if ( ( ret = ctx->f_rng( ctx->p_rng, buf, sizeof( buf ) ) ) != 0 ) + return ( ret ); /* With GCM and CCM, same context can encrypt & decrypt */ ret = mbedtls_cipher_setkey( &key->ctx, buf, @@ -85,7 +87,7 @@ static int ssl_ticket_gen_key( mbedtls_ssl_ticket_context *ctx, mbedtls_zeroize( buf, sizeof( buf ) ); - return( ret ); + return ( ret ); } /* @@ -96,33 +98,30 @@ static int ssl_ticket_update_keys( mbedtls_ssl_ticket_context *ctx ) #if !defined(MBEDTLS_HAVE_TIME) ((void) ctx); #else - if( ctx->ticket_lifetime != 0 ) - { + if ( ctx->ticket_lifetime != 0 ) { uint32_t current_time = (uint32_t) mbedtls_time( NULL ); uint32_t key_time = ctx->keys[ctx->active].generation_time; - if( current_time > key_time && - current_time - key_time < ctx->ticket_lifetime ) - { - return( 0 ); + if ( current_time > key_time && + current_time - key_time < ctx->ticket_lifetime ) { + return ( 0 ); } ctx->active = 1 - ctx->active; - return( ssl_ticket_gen_key( ctx, ctx->active ) ); - } - else + return ( ssl_ticket_gen_key( ctx, ctx->active ) ); + } else #endif /* MBEDTLS_HAVE_TIME */ - return( 0 ); + return ( 0 ); } /* * Setup context for actual use */ int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - mbedtls_cipher_type_t cipher, - uint32_t lifetime ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + mbedtls_cipher_type_t cipher, + uint32_t lifetime ) { int ret; const mbedtls_cipher_info_t *cipher_info; @@ -133,31 +132,28 @@ int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx, ctx->ticket_lifetime = lifetime; cipher_info = mbedtls_cipher_info_from_type( cipher); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( cipher_info->mode != MBEDTLS_MODE_GCM && - cipher_info->mode != MBEDTLS_MODE_CCM ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cipher_info->mode != MBEDTLS_MODE_GCM && + cipher_info->mode != MBEDTLS_MODE_CCM ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( cipher_info->key_bitlen > 8 * MAX_KEY_BYTES ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cipher_info->key_bitlen > 8 * MAX_KEY_BYTES ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ( ret = mbedtls_cipher_setup( &ctx->keys[0].ctx, cipher_info ) ) != 0 || - ( ret = mbedtls_cipher_setup( &ctx->keys[1].ctx, cipher_info ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_setup( &ctx->keys[0].ctx, cipher_info ) ) != 0 || + ( ret = mbedtls_cipher_setup( &ctx->keys[1].ctx, cipher_info ) ) != 0 ) { + return ( ret ); } - if( ( ret = ssl_ticket_gen_key( ctx, 0 ) ) != 0 || - ( ret = ssl_ticket_gen_key( ctx, 1 ) ) != 0 ) - { - return( ret ); + if ( ( ret = ssl_ticket_gen_key( ctx, 0 ) ) != 0 || + ( ret = ssl_ticket_gen_key( ctx, 1 ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -176,27 +172,27 @@ static int ssl_save_session( const mbedtls_ssl_session *session, size_t cert_len; #endif /* MBEDTLS_X509_CRT_PARSE_C */ - if( left < sizeof( mbedtls_ssl_session ) ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( left < sizeof( mbedtls_ssl_session ) ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); memcpy( p, session, sizeof( mbedtls_ssl_session ) ); p += sizeof( mbedtls_ssl_session ); left -= sizeof( mbedtls_ssl_session ); #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( session->peer_cert == NULL ) + if ( session->peer_cert == NULL ) cert_len = 0; else cert_len = session->peer_cert->raw.len; - if( left < 3 + cert_len ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( left < 3 + cert_len ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); *p++ = (unsigned char)( cert_len >> 16 & 0xFF ); *p++ = (unsigned char)( cert_len >> 8 & 0xFF ); *p++ = (unsigned char)( cert_len & 0xFF ); - if( session->peer_cert != NULL ) + if ( session->peer_cert != NULL ) memcpy( p, session->peer_cert->raw.p, cert_len ); p += cert_len; @@ -204,7 +200,7 @@ static int ssl_save_session( const mbedtls_ssl_session *session, *olen = p - buf; - return( 0 ); + return ( 0 ); } /* @@ -219,54 +215,50 @@ static int ssl_load_session( mbedtls_ssl_session *session, size_t cert_len; #endif /* MBEDTLS_X509_CRT_PARSE_C */ - if( p + sizeof( mbedtls_ssl_session ) > end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p + sizeof( mbedtls_ssl_session ) > end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); memcpy( session, p, sizeof( mbedtls_ssl_session ) ); p += sizeof( mbedtls_ssl_session ); #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( p + 3 > end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p + 3 > end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); cert_len = ( p[0] << 16 ) | ( p[1] << 8 ) | p[2]; p += 3; - if( cert_len == 0 ) - { + if ( cert_len == 0 ) { session->peer_cert = NULL; - } - else - { + } else { int ret; - if( p + cert_len > end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p + cert_len > end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); session->peer_cert = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); - if( session->peer_cert == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( session->peer_cert == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); mbedtls_x509_crt_init( session->peer_cert ); - if( ( ret = mbedtls_x509_crt_parse_der( session->peer_cert, - p, cert_len ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_crt_parse_der( session->peer_cert, + p, cert_len ) ) != 0 ) { mbedtls_x509_crt_free( session->peer_cert ); mbedtls_free( session->peer_cert ); session->peer_cert = NULL; - return( ret ); + return ( ret ); } p += cert_len; } #endif /* MBEDTLS_X509_CRT_PARSE_C */ - if( p != end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p != end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - return( 0 ); + return ( 0 ); } /* @@ -301,20 +293,20 @@ int mbedtls_ssl_ticket_write( void *p_ticket, *tlen = 0; - if( ctx == NULL || ctx->f_rng == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->f_rng == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* We need at least 4 bytes for key_name, 12 for IV, 2 for len 16 for tag, * in addition to session itself, that will be checked when writing it. */ - if( end - start < 4 + 12 + 2 + 16 ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( end - start < 4 + 12 + 2 + 16 ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif - if( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) + if ( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) goto cleanup; key = &ctx->keys[ctx->active]; @@ -323,29 +315,26 @@ int mbedtls_ssl_ticket_write( void *p_ticket, memcpy( key_name, key->name, 4 ); - if( ( ret = ctx->f_rng( ctx->p_rng, iv, 12 ) ) != 0 ) + if ( ( ret = ctx->f_rng( ctx->p_rng, iv, 12 ) ) != 0 ) goto cleanup; /* Dump session state */ - if( ( ret = ssl_save_session( session, - state, end - state, &clear_len ) ) != 0 || - (unsigned long) clear_len > 65535 ) - { - goto cleanup; + if ( ( ret = ssl_save_session( session, + state, end - state, &clear_len ) ) != 0 || + (unsigned long) clear_len > 65535 ) { + goto cleanup; } state_len_bytes[0] = ( clear_len >> 8 ) & 0xff; state_len_bytes[1] = ( clear_len ) & 0xff; /* Encrypt and authenticate */ tag = state + clear_len; - if( ( ret = mbedtls_cipher_auth_encrypt( &key->ctx, - iv, 12, key_name, 4 + 12 + 2, - state, clear_len, state, &ciph_len, tag, 16 ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_auth_encrypt( &key->ctx, + iv, 12, key_name, 4 + 12 + 2, + state, clear_len, state, &ciph_len, tag, 16 ) ) != 0 ) { goto cleanup; } - if( ciph_len != clear_len ) - { + if ( ciph_len != clear_len ) { ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR; goto cleanup; } @@ -354,27 +343,27 @@ int mbedtls_ssl_ticket_write( void *p_ticket, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* * Select key based on name */ static mbedtls_ssl_ticket_key *ssl_ticket_select_key( - mbedtls_ssl_ticket_context *ctx, - const unsigned char name[4] ) + mbedtls_ssl_ticket_context *ctx, + const unsigned char name[4] ) { unsigned char i; - for( i = 0; i < sizeof( ctx->keys ) / sizeof( *ctx->keys ); i++ ) - if( memcmp( name, ctx->keys[i].name, 4 ) == 0 ) - return( &ctx->keys[i] ); + for ( i = 0; i < sizeof( ctx->keys ) / sizeof( *ctx->keys ); i++ ) + if ( memcmp( name, ctx->keys[i].name, 4 ) == 0 ) + return ( &ctx->keys[i] ); - return( NULL ); + return ( NULL ); } /* @@ -395,33 +384,31 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, unsigned char *tag; size_t enc_len, clear_len; - if( ctx == NULL || ctx->f_rng == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->f_rng == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* See mbedtls_ssl_ticket_write() */ - if( len < 4 + 12 + 2 + 16 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( len < 4 + 12 + 2 + 16 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif - if( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) + if ( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) goto cleanup; enc_len = ( enc_len_p[0] << 8 ) | enc_len_p[1]; tag = ticket + enc_len; - if( len != 4 + 12 + 2 + enc_len + 16 ) - { + if ( len != 4 + 12 + 2 + enc_len + 16 ) { ret = MBEDTLS_ERR_SSL_BAD_INPUT_DATA; goto cleanup; } /* Select key */ - if( ( key = ssl_ticket_select_key( ctx, key_name ) ) == NULL ) - { + if ( ( key = ssl_ticket_select_key( ctx, key_name ) ) == NULL ) { /* We can't know for sure but this is a likely option unless we're * under attack - this is only informative anyway */ ret = MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED; @@ -429,23 +416,21 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, } /* Decrypt and authenticate */ - if( ( ret = mbedtls_cipher_auth_decrypt( &key->ctx, iv, 12, - key_name, 4 + 12 + 2, ticket, enc_len, - ticket, &clear_len, tag, 16 ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) + if ( ( ret = mbedtls_cipher_auth_decrypt( &key->ctx, iv, 12, + key_name, 4 + 12 + 2, ticket, enc_len, + ticket, &clear_len, tag, 16 ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) ret = MBEDTLS_ERR_SSL_INVALID_MAC; goto cleanup; } - if( clear_len != enc_len ) - { + if ( clear_len != enc_len ) { ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR; goto cleanup; } /* Actually load session */ - if( ( ret = ssl_load_session( session, ticket, clear_len ) ) != 0 ) + if ( ( ret = ssl_load_session( session, ticket, clear_len ) ) != 0 ) goto cleanup; #if defined(MBEDTLS_HAVE_TIME) @@ -453,9 +438,8 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, /* Check for expiration */ mbedtls_time_t current_time = mbedtls_time( NULL ); - if( current_time < session->start || - (uint32_t)( current_time - session->start ) > ctx->ticket_lifetime ) - { + if ( current_time < session->start || + (uint32_t)( current_time - session->start ) > ctx->ticket_lifetime ) { ret = MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED; goto cleanup; } @@ -464,11 +448,11 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_tls.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_tls.c index 84a04ae5..bfd54cd4 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_tls.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/ssl_tls.c @@ -54,20 +54,22 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* Length of the "epoch" field in the record header */ static inline size_t ssl_ep_len( const mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - return( 2 ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return ( 2 ); #else ((void) ssl); #endif - return( 0 ); + return ( 0 ); } /* @@ -76,7 +78,7 @@ static inline size_t ssl_ep_len( const mbedtls_ssl_context *ssl ) */ static void ssl_set_timer( mbedtls_ssl_context *ssl, uint32_t millisecs ) { - if( ssl->f_set_timer == NULL ) + if ( ssl->f_set_timer == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "set_timer to %d ms", (int) millisecs ) ); @@ -88,16 +90,15 @@ static void ssl_set_timer( mbedtls_ssl_context *ssl, uint32_t millisecs ) */ static int ssl_check_timer( mbedtls_ssl_context *ssl ) { - if( ssl->f_get_timer == NULL ) - return( 0 ); + if ( ssl->f_get_timer == NULL ) + return ( 0 ); - if( ssl->f_get_timer( ssl->p_timer ) == 2 ) - { + if ( ssl->f_get_timer( ssl->p_timer ) == 2 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "timer expired" ) ); - return( -1 ); + return ( -1 ); } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -109,30 +110,29 @@ static int ssl_double_retransmit_timeout( mbedtls_ssl_context *ssl ) { uint32_t new_timeout; - if( ssl->handshake->retransmit_timeout >= ssl->conf->hs_timeout_max ) - return( -1 ); + if ( ssl->handshake->retransmit_timeout >= ssl->conf->hs_timeout_max ) + return ( -1 ); new_timeout = 2 * ssl->handshake->retransmit_timeout; /* Avoid arithmetic overflow and range overflow */ - if( new_timeout < ssl->handshake->retransmit_timeout || - new_timeout > ssl->conf->hs_timeout_max ) - { + if ( new_timeout < ssl->handshake->retransmit_timeout || + new_timeout > ssl->conf->hs_timeout_max ) { new_timeout = ssl->conf->hs_timeout_max; } ssl->handshake->retransmit_timeout = new_timeout; MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", - ssl->handshake->retransmit_timeout ) ); + ssl->handshake->retransmit_timeout ) ); - return( 0 ); + return ( 0 ); } static void ssl_reset_retransmit_timeout( mbedtls_ssl_context *ssl ) { ssl->handshake->retransmit_timeout = ssl->conf->hs_timeout_min; MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", - ssl->handshake->retransmit_timeout ) ); + ssl->handshake->retransmit_timeout ) ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -145,8 +145,7 @@ static void ssl_reset_retransmit_timeout( mbedtls_ssl_context *ssl ) * } MaxFragmentLength; * and we add 0 -> extension unused */ -static unsigned int mfl_code_to_length[MBEDTLS_SSL_MAX_FRAG_LEN_INVALID] = -{ +static unsigned int mfl_code_to_length[MBEDTLS_SSL_MAX_FRAG_LEN_INVALID] = { MBEDTLS_SSL_MAX_CONTENT_LEN, /* MBEDTLS_SSL_MAX_FRAG_LEN_NONE */ 512, /* MBEDTLS_SSL_MAX_FRAG_LEN_512 */ 1024, /* MBEDTLS_SSL_MAX_FRAG_LEN_1024 */ @@ -162,49 +161,46 @@ static int ssl_session_copy( mbedtls_ssl_session *dst, const mbedtls_ssl_session memcpy( dst, src, sizeof( mbedtls_ssl_session ) ); #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( src->peer_cert != NULL ) - { + if ( src->peer_cert != NULL ) { int ret; dst->peer_cert = mbedtls_calloc( 1, sizeof(mbedtls_x509_crt) ); - if( dst->peer_cert == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( dst->peer_cert == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); mbedtls_x509_crt_init( dst->peer_cert ); - if( ( ret = mbedtls_x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, - src->peer_cert->raw.len ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, + src->peer_cert->raw.len ) ) != 0 ) { mbedtls_free( dst->peer_cert ); dst->peer_cert = NULL; - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) - if( src->ticket != NULL ) - { + if ( src->ticket != NULL ) { dst->ticket = mbedtls_calloc( 1, src->ticket_len ); - if( dst->ticket == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( dst->ticket == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( dst->ticket, src->ticket, src->ticket_len ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) int (*mbedtls_ssl_hw_record_init)( mbedtls_ssl_context *ssl, - const unsigned char *key_enc, const unsigned char *key_dec, - size_t keylen, - const unsigned char *iv_enc, const unsigned char *iv_dec, - size_t ivlen, - const unsigned char *mac_enc, const unsigned char *mac_dec, - size_t maclen ) = NULL; + const unsigned char *key_enc, const unsigned char *key_dec, + size_t keylen, + const unsigned char *iv_enc, const unsigned char *iv_dec, + size_t ivlen, + const unsigned char *mac_enc, const unsigned char *mac_dec, + size_t maclen ) = NULL; int (*mbedtls_ssl_hw_record_activate)( mbedtls_ssl_context *ssl, int direction) = NULL; int (*mbedtls_ssl_hw_record_reset)( mbedtls_ssl_context *ssl ) = NULL; int (*mbedtls_ssl_hw_record_write)( mbedtls_ssl_context *ssl ) = NULL; @@ -239,8 +235,7 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, * MD5( secret + SHA1( 'CCC' + secret + random ) ) + * ... */ - for( i = 0; i < dlen / 16; i++ ) - { + for ( i = 0; i < dlen / 16; i++ ) { memset( padding, (unsigned char) ('A' + i), 1 + i ); mbedtls_sha1_starts( &sha1 ); @@ -261,7 +256,7 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, mbedtls_zeroize( padding, sizeof( padding ) ); mbedtls_zeroize( sha1sum, sizeof( sha1sum ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_SSL3 */ @@ -282,8 +277,8 @@ static int tls1_prf( const unsigned char *secret, size_t slen, mbedtls_md_init( &md_ctx ); - if( sizeof( tmp ) < 20 + strlen( label ) + rlen ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( sizeof( tmp ) < 20 + strlen( label ) + rlen ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); hs = ( slen + 1 ) / 2; S1 = secret; @@ -297,18 +292,17 @@ static int tls1_prf( const unsigned char *secret, size_t slen, /* * First compute P_md5(secret,label+random)[0..dlen] */ - if( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ) ) == NULL ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); mbedtls_md_hmac_starts( &md_ctx, S1, hs ); mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb ); mbedtls_md_hmac_finish( &md_ctx, 4 + tmp ); - for( i = 0; i < dlen; i += 16 ) - { + for ( i = 0; i < dlen; i += 16 ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, 4 + tmp, 16 + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); @@ -319,7 +313,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, k = ( i + 16 > dlen ) ? dlen % 16 : 16; - for( j = 0; j < k; j++ ) + for ( j = 0; j < k; j++ ) dstbuf[i + j] = h_i[j]; } @@ -328,18 +322,17 @@ static int tls1_prf( const unsigned char *secret, size_t slen, /* * XOR out with P_sha1(secret,label+random)[0..dlen] */ - if( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ) ) == NULL ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); mbedtls_md_hmac_starts( &md_ctx, S2, hs ); mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb ); mbedtls_md_hmac_finish( &md_ctx, tmp ); - for( i = 0; i < dlen; i += 20 ) - { + for ( i = 0; i < dlen; i += 20 ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, tmp, 20 + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); @@ -350,7 +343,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, k = ( i + 20 > dlen ) ? dlen % 20 : 20; - for( j = 0; j < k; j++ ) + for ( j = 0; j < k; j++ ) dstbuf[i + j] = (unsigned char)( dstbuf[i + j] ^ h_i[j] ); } @@ -359,7 +352,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, mbedtls_zeroize( tmp, sizeof( tmp ) ); mbedtls_zeroize( h_i, sizeof( h_i ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_TLS1) || MBEDTLS_SSL_PROTO_TLS1_1 */ @@ -380,13 +373,13 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, mbedtls_md_init( &md_ctx ); - if( ( md_info = mbedtls_md_info_from_type( md_type ) ) == NULL ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( ( md_info = mbedtls_md_info_from_type( md_type ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); md_len = mbedtls_md_get_size( md_info ); - if( sizeof( tmp ) < md_len + strlen( label ) + rlen ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( sizeof( tmp ) < md_len + strlen( label ) + rlen ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); nb = strlen( label ); memcpy( tmp + md_len, label, nb ); @@ -397,14 +390,13 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, * Compute P_(secret, label + random)[0..dlen] */ if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + return ( ret ); mbedtls_md_hmac_starts( &md_ctx, secret, slen ); mbedtls_md_hmac_update( &md_ctx, tmp + md_len, nb ); mbedtls_md_hmac_finish( &md_ctx, tmp ); - for( i = 0; i < dlen; i += md_len ) - { + for ( i = 0; i < dlen; i += md_len ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, tmp, md_len + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); @@ -415,7 +407,7 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, k = ( i + md_len > dlen ) ? dlen % md_len : md_len; - for( j = 0; j < k; j++ ) + for ( j = 0; j < k; j++ ) dstbuf[i + j] = h_i[j]; } @@ -424,7 +416,7 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, mbedtls_zeroize( tmp, sizeof( tmp ) ); mbedtls_zeroize( h_i, sizeof( h_i ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SHA256_C) @@ -433,8 +425,8 @@ static int tls_prf_sha256( const unsigned char *secret, size_t slen, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen ) { - return( tls_prf_generic( MBEDTLS_MD_SHA256, secret, slen, - label, random, rlen, dstbuf, dlen ) ); + return ( tls_prf_generic( MBEDTLS_MD_SHA256, secret, slen, + label, random, rlen, dstbuf, dlen ) ); } #endif /* MBEDTLS_SHA256_C */ @@ -444,8 +436,8 @@ static int tls_prf_sha384( const unsigned char *secret, size_t slen, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen ) { - return( tls_prf_generic( MBEDTLS_MD_SHA384, secret, slen, - label, random, rlen, dstbuf, dlen ) ); + return ( tls_prf_generic( MBEDTLS_MD_SHA384, secret, slen, + label, random, rlen, dstbuf, dlen ) ); } #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ @@ -470,8 +462,8 @@ static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int ) #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) static void ssl_update_checksum_sha256( mbedtls_ssl_context *, const unsigned char *, size_t ); -static void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *,unsigned char * ); -static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *,unsigned char *, int ); +static void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *, unsigned char * ); +static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *, unsigned char *, int ); #endif #if defined(MBEDTLS_SHA512_C) @@ -501,67 +493,57 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> derive keys" ) ); cipher_info = mbedtls_cipher_info_from_type( transform->ciphersuite_info->cipher ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "cipher info for %d not found", - transform->ciphersuite_info->cipher ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + transform->ciphersuite_info->cipher ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } md_info = mbedtls_md_info_from_type( transform->ciphersuite_info->mac ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "mbedtls_md info for %d not found", - transform->ciphersuite_info->mac ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + transform->ciphersuite_info->mac ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* * Set appropriate PRF function and other SSL / TLS / TLS1.2 functions */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { handshake->tls_prf = ssl3_prf; handshake->calc_verify = ssl_calc_verify_ssl; handshake->calc_finished = ssl_calc_finished_ssl; - } - else + } else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) - { - handshake->tls_prf = tls1_prf; - handshake->calc_verify = ssl_calc_verify_tls; - handshake->calc_finished = ssl_calc_finished_tls; - } - else + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) { + handshake->tls_prf = tls1_prf; + handshake->calc_verify = ssl_calc_verify_tls; + handshake->calc_finished = ssl_calc_finished_tls; + } else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA512_C) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 && - transform->ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) - { - handshake->tls_prf = tls_prf_sha384; - handshake->calc_verify = ssl_calc_verify_tls_sha384; - handshake->calc_finished = ssl_calc_finished_tls_sha384; - } - else + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 && + transform->ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) { + handshake->tls_prf = tls_prf_sha384; + handshake->calc_verify = ssl_calc_verify_tls_sha384; + handshake->calc_finished = ssl_calc_finished_tls_sha384; + } else #endif #if defined(MBEDTLS_SHA256_C) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - handshake->tls_prf = tls_prf_sha256; - handshake->calc_verify = ssl_calc_verify_tls_sha256; - handshake->calc_finished = ssl_calc_finished_tls_sha256; - } - else + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + handshake->tls_prf = tls_prf_sha256; + handshake->calc_verify = ssl_calc_verify_tls_sha256; + handshake->calc_finished = ssl_calc_finished_tls_sha256; + } else #endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* * SSLv3: @@ -573,14 +555,12 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * TLSv1+: * master = PRF( premaster, "master secret", randbytes )[0..47] */ - if( handshake->resume == 0 ) - { + if ( handshake->resume == 0 ) { MBEDTLS_SSL_DEBUG_BUF( 3, "premaster secret", handshake->premaster, - handshake->pmslen ); + handshake->pmslen ); #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - if( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED ) - { + if ( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED ) { unsigned char session_hash[48]; size_t hash_len; @@ -589,19 +569,15 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) ssl->handshake->calc_verify( ssl, session_hash ); #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { #if defined(MBEDTLS_SHA512_C) - if( ssl->transform_negotiate->ciphersuite_info->mac == - MBEDTLS_MD_SHA384 ) - { + if ( ssl->transform_negotiate->ciphersuite_info->mac == + MBEDTLS_MD_SHA384 ) { hash_len = 48; - } - else + } else #endif hash_len = 32; - } - else + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ hash_len = 36; @@ -611,28 +587,24 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) "extended master secret", session_hash, hash_len, session->master, 48 ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); + return ( ret ); } - } - else + } else #endif - ret = handshake->tls_prf( handshake->premaster, handshake->pmslen, - "master secret", - handshake->randbytes, 64, - session->master, 48 ); - if( ret != 0 ) - { + ret = handshake->tls_prf( handshake->premaster, handshake->pmslen, + "master secret", + handshake->randbytes, 64, + session->master, 48 ); + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); + return ( ret ); } mbedtls_zeroize( handshake->premaster, sizeof(handshake->premaster) ); - } - else + } else MBEDTLS_SSL_DEBUG_MSG( 3, ( "no premaster (session resumed)" ) ); /* @@ -657,14 +629,13 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) */ ret = handshake->tls_prf( session->master, 48, "key expansion", handshake->randbytes, 64, keyblk, 256 ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite = %s", - mbedtls_ssl_get_ciphersuite_name( session->ciphersuite ) ) ); + mbedtls_ssl_get_ciphersuite_name( session->ciphersuite ) ) ); MBEDTLS_SSL_DEBUG_BUF( 3, "master secret", session->master, 48 ); MBEDTLS_SSL_DEBUG_BUF( 4, "random bytes", handshake->randbytes, 64 ); MBEDTLS_SSL_DEBUG_BUF( 4, "key block", keyblk, 256 ); @@ -677,9 +648,8 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) transform->keylen = cipher_info->key_bitlen / 8; - if( cipher_info->mode == MBEDTLS_MODE_GCM || - cipher_info->mode == MBEDTLS_MODE_CCM ) - { + if ( cipher_info->mode == MBEDTLS_MODE_GCM || + cipher_info->mode == MBEDTLS_MODE_CCM ) { transform->maclen = 0; transform->ivlen = 12; @@ -689,15 +659,12 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) transform->minlen = transform->ivlen - transform->fixed_ivlen + ( transform->ciphersuite_info->flags & MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16 ); - } - else - { + } else { /* Initialize HMAC contexts */ - if( ( ret = mbedtls_md_setup( &transform->md_ctx_enc, md_info, 1 ) ) != 0 || - ( ret = mbedtls_md_setup( &transform->md_ctx_dec, md_info, 1 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &transform->md_ctx_enc, md_info, 1 ) ) != 0 || + ( ret = mbedtls_md_setup( &transform->md_ctx_dec, md_info, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - return( ret ); + return ( ret ); } /* Get MAC length */ @@ -709,7 +676,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * (rfc 6066 page 13 or rfc 2104 section 4), * so we only need to adjust the length here. */ - if( session->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) + if ( session->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) transform->maclen = MBEDTLS_SSL_TRUNCATED_HMAC_LEN; #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ @@ -717,10 +684,9 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) transform->ivlen = cipher_info->iv_size; /* Minimum length */ - if( cipher_info->mode == MBEDTLS_MODE_STREAM ) + if ( cipher_info->mode == MBEDTLS_MODE_STREAM ) transform->minlen = transform->maclen; - else - { + else { /* * GenericBlockCipher: * 1. if EtM is in use: one block plus MAC @@ -728,50 +694,45 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * 2. IV except for SSL3 and TLS 1.0 */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - if( session->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) - { + if ( session->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) { transform->minlen = transform->maclen - + cipher_info->block_size; - } - else + + cipher_info->block_size; + } else #endif { transform->minlen = transform->maclen - + cipher_info->block_size - - transform->maclen % cipher_info->block_size; + + cipher_info->block_size + - transform->maclen % cipher_info->block_size; } #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_1 ) + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_1 ) ; /* No need to adjust minlen */ else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_2 || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - transform->minlen += transform->ivlen; - } - else + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_2 || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + transform->minlen += transform->ivlen; + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } } } MBEDTLS_SSL_DEBUG_MSG( 3, ( "keylen: %d, minlen: %d, ivlen: %d, maclen: %d", - transform->keylen, transform->minlen, transform->ivlen, - transform->maclen ) ); + transform->keylen, transform->minlen, transform->ivlen, + transform->maclen ) ); /* * Finally setup the cipher contexts, IVs and MAC secrets. */ #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { key1 = keyblk + transform->maclen * 2; key2 = keyblk + transform->maclen * 2 + transform->keylen; @@ -782,88 +743,77 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * This is not used in TLS v1.1. */ iv_copy_len = ( transform->fixed_ivlen ) ? - transform->fixed_ivlen : transform->ivlen; + transform->fixed_ivlen : transform->ivlen; memcpy( transform->iv_enc, key2 + transform->keylen, iv_copy_len ); memcpy( transform->iv_dec, key2 + transform->keylen + iv_copy_len, iv_copy_len ); - } - else + } else #endif /* MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - { - key1 = keyblk + transform->maclen * 2 + transform->keylen; - key2 = keyblk + transform->maclen * 2; + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) { + key1 = keyblk + transform->maclen * 2 + transform->keylen; + key2 = keyblk + transform->maclen * 2; - mac_enc = keyblk + transform->maclen; - mac_dec = keyblk; + mac_enc = keyblk + transform->maclen; + mac_dec = keyblk; - /* - * This is not used in TLS v1.1. - */ - iv_copy_len = ( transform->fixed_ivlen ) ? - transform->fixed_ivlen : transform->ivlen; - memcpy( transform->iv_dec, key1 + transform->keylen, iv_copy_len ); - memcpy( transform->iv_enc, key1 + transform->keylen + iv_copy_len, - iv_copy_len ); - } - else + /* + * This is not used in TLS v1.1. + */ + iv_copy_len = ( transform->fixed_ivlen ) ? + transform->fixed_ivlen : transform->ivlen; + memcpy( transform->iv_dec, key1 + transform->keylen, iv_copy_len ); + memcpy( transform->iv_enc, key1 + transform->keylen + iv_copy_len, + iv_copy_len ); + } else #endif /* MBEDTLS_SSL_SRV_C */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - -#if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( transform->maclen > sizeof transform->mac_enc ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + +#if defined(MBEDTLS_SSL_PROTO_SSL3) + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( transform->maclen > sizeof transform->mac_enc ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } memcpy( transform->mac_enc, mac_enc, transform->maclen ); memcpy( transform->mac_dec, mac_dec, transform->maclen ); - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) - { - mbedtls_md_hmac_starts( &transform->md_ctx_enc, mac_enc, transform->maclen ); - mbedtls_md_hmac_starts( &transform->md_ctx_dec, mac_dec, transform->maclen ); - } - else + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) { + mbedtls_md_hmac_starts( &transform->md_ctx_enc, mac_enc, transform->maclen ); + mbedtls_md_hmac_starts( &transform->md_ctx_dec, mac_dec, transform->maclen ); + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_init != NULL ) - { + if ( mbedtls_ssl_hw_record_init != NULL ) { int ret = 0; MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_init()" ) ); - if( ( ret = mbedtls_ssl_hw_record_init( ssl, key1, key2, transform->keylen, - transform->iv_enc, transform->iv_dec, - iv_copy_len, - mac_enc, mac_dec, - transform->maclen ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_hw_record_init( ssl, key1, key2, transform->keylen, + transform->iv_enc, transform->iv_dec, + iv_copy_len, + mac_enc, mac_dec, + transform->maclen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_init", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ #if defined(MBEDTLS_SSL_EXPORT_KEYS) - if( ssl->conf->f_export_keys != NULL ) - { + if ( ssl->conf->f_export_keys != NULL ) { ssl->conf->f_export_keys( ssl->conf->p_export_keys, session->master, keyblk, transform->maclen, transform->keylen, @@ -871,51 +821,44 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) } #endif - if( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_enc, - cipher_info ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_enc, + cipher_info ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_dec, - cipher_info ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_dec, + cipher_info ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_enc, key1, - cipher_info->key_bitlen, - MBEDTLS_ENCRYPT ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_enc, key1, + cipher_info->key_bitlen, + MBEDTLS_ENCRYPT ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setkey", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_dec, key2, - cipher_info->key_bitlen, - MBEDTLS_DECRYPT ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_dec, key2, + cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setkey", ret ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) - if( cipher_info->mode == MBEDTLS_MODE_CBC ) - { - if( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_enc, - MBEDTLS_PADDING_NONE ) ) != 0 ) - { + if ( cipher_info->mode == MBEDTLS_MODE_CBC ) { + if ( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_enc, + MBEDTLS_PADDING_NONE ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_set_padding_mode", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_dec, - MBEDTLS_PADDING_NONE ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_dec, + MBEDTLS_PADDING_NONE ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_set_padding_mode", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -925,17 +868,14 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_ZLIB_SUPPORT) // Initialize compression // - if( session->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { - if( ssl->compress_buf == NULL ) - { + if ( session->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) { + if ( ssl->compress_buf == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "Allocating compression buffer" ) ); ssl->compress_buf = mbedtls_calloc( 1, MBEDTLS_SSL_BUFFER_LEN ); - if( ssl->compress_buf == NULL ) - { + if ( ssl->compress_buf == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", - MBEDTLS_SSL_BUFFER_LEN ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + MBEDTLS_SSL_BUFFER_LEN ) ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } } @@ -944,19 +884,18 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) memset( &transform->ctx_deflate, 0, sizeof( transform->ctx_deflate ) ); memset( &transform->ctx_inflate, 0, sizeof( transform->ctx_inflate ) ); - if( deflateInit( &transform->ctx_deflate, - Z_DEFAULT_COMPRESSION ) != Z_OK || - inflateInit( &transform->ctx_inflate ) != Z_OK ) - { + if ( deflateInit( &transform->ctx_deflate, + Z_DEFAULT_COMPRESSION ) != Z_OK || + inflateInit( &transform->ctx_inflate ) != Z_OK ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Failed to initialize compression" ) ); - return( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); + return ( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); } } #endif /* MBEDTLS_ZLIB_SUPPORT */ MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= derive keys" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -1022,7 +961,7 @@ void ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char hash[36] ) mbedtls_md5_clone( &md5, &ssl->handshake->fin_md5 ); mbedtls_sha1_clone( &sha1, &ssl->handshake->fin_sha1 ); - mbedtls_md5_finish( &md5, hash ); + mbedtls_md5_finish( &md5, hash ); mbedtls_sha1_finish( &sha1, hash + 16 ); MBEDTLS_SSL_DEBUG_BUF( 3, "calculated verify result", hash, 36 ); @@ -1088,8 +1027,7 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch size_t psk_len = ssl->conf->psk_len; /* If the psk callback was called, use its result */ - if( ssl->handshake->psk != NULL ) - { + if ( ssl->handshake->psk != NULL ) { psk = ssl->handshake->psk; psk_len = ssl->handshake->psk_len; } @@ -1102,100 +1040,90 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch * with "other_secret" depending on the particular key exchange */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_PSK ) - { - if( end - p < 2 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( key_ex == MBEDTLS_KEY_EXCHANGE_PSK ) { + if ( end - p < 2 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); *(p++) = (unsigned char)( psk_len >> 8 ); *(p++) = (unsigned char)( psk_len ); - if( end < p || (size_t)( end - p ) < psk_len ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( end < p || (size_t)( end - p ) < psk_len ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); memset( p, 0, psk_len ); p += psk_len; - } - else + } else #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { - /* - * other_secret already set by the ClientKeyExchange message, - * and is 48 bytes long - */ - *p++ = 0; - *p++ = 48; - p += 48; - } - else + if ( key_ex == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { + /* + * other_secret already set by the ClientKeyExchange message, + * and is 48 bytes long + */ + *p++ = 0; + *p++ = 48; + p += 48; + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - int ret; - size_t len; + if ( key_ex == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + int ret; + size_t len; - /* Write length only when we know the actual value */ - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, - p + 2, end - ( p + 2 ), &len, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); - return( ret ); - } - *(p++) = (unsigned char)( len >> 8 ); - *(p++) = (unsigned char)( len ); - p += len; + /* Write length only when we know the actual value */ + if ( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, + p + 2, end - ( p + 2 ), &len, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); + return ( ret ); + } + *(p++) = (unsigned char)( len >> 8 ); + *(p++) = (unsigned char)( len ); + p += len; - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - int ret; - size_t zlen; + if ( key_ex == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + int ret; + size_t zlen; - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, &zlen, - p + 2, end - ( p + 2 ), - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); - return( ret ); - } + if ( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, &zlen, + p + 2, end - ( p + 2 ), + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); + return ( ret ); + } - *(p++) = (unsigned char)( zlen >> 8 ); - *(p++) = (unsigned char)( zlen ); - p += zlen; + *(p++) = (unsigned char)( zlen >> 8 ); + *(p++) = (unsigned char)( zlen ); + p += zlen; - MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* opaque psk<0..2^16-1>; */ - if( end - p < 2 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( end - p < 2 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); *(p++) = (unsigned char)( psk_len >> 8 ); *(p++) = (unsigned char)( psk_len ); - if( end < p || (size_t)( end - p ) < psk_len ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( end < p || (size_t)( end - p ) < psk_len ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); memcpy( p, psk, psk_len ); p += psk_len; ssl->handshake->pmslen = p - ssl->handshake->premaster; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ @@ -1214,7 +1142,7 @@ static void ssl_mac( mbedtls_md_context_t *md_ctx, unsigned char *secret, int md_type = mbedtls_md_get_type( md_ctx->md_info ); /* Only MD5 and SHA-1 supported */ - if( md_type == MBEDTLS_MD_MD5 ) + if ( md_type == MBEDTLS_MD_MD5 ) padlen = 48; else padlen = 40; @@ -1257,61 +1185,55 @@ static int ssl_encrypt_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> encrypt buf" ) ); - if( ssl->session_out == NULL || ssl->transform_out == NULL ) - { + if ( ssl->session_out == NULL || ssl->transform_out == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } mode = mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc ); MBEDTLS_SSL_DEBUG_BUF( 4, "before encrypt: output payload", - ssl->out_msg, ssl->out_msglen ); + ssl->out_msg, ssl->out_msglen ); /* * Add MAC before if needed */ #if defined(SSL_SOME_MODES_USE_MAC) - if( mode == MBEDTLS_MODE_STREAM || - ( mode == MBEDTLS_MODE_CBC + if ( mode == MBEDTLS_MODE_STREAM || + ( mode == MBEDTLS_MODE_CBC #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - && ssl->session_out->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED + && ssl->session_out->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED #endif - ) ) - { + ) ) { #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl_mac( &ssl->transform_out->md_ctx_enc, - ssl->transform_out->mac_enc, - ssl->out_msg, ssl->out_msglen, - ssl->out_ctr, ssl->out_msgtype ); - } - else + ssl->transform_out->mac_enc, + ssl->out_msg, ssl->out_msglen, + ssl->out_ctr, ssl->out_msgtype ); + } else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) - { - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_ctr, 8 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_hdr, 3 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_len, 2 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, - ssl->out_msg, ssl->out_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, - ssl->out_msg + ssl->out_msglen ); - mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); - } - else + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) { + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_ctr, 8 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_hdr, 3 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_len, 2 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, + ssl->out_msg, ssl->out_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, + ssl->out_msg + ssl->out_msglen ); + mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", - ssl->out_msg + ssl->out_msglen, - ssl->transform_out->maclen ); + ssl->out_msg + ssl->out_msglen, + ssl->transform_out->maclen ); ssl->out_msglen += ssl->transform_out->maclen; auth_done++; @@ -1322,244 +1244,227 @@ static int ssl_encrypt_buf( mbedtls_ssl_context *ssl ) * Encrypt */ #if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) - if( mode == MBEDTLS_MODE_STREAM ) - { + if ( mode == MBEDTLS_MODE_STREAM ) { int ret; size_t olen = 0; MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of padding", - ssl->out_msglen, 0 ) ); + "including %d bytes of padding", + ssl->out_msglen, 0 ) ); - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - ssl->out_msg, ssl->out_msglen, - ssl->out_msg, &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, + ssl->transform_out->iv_enc, + ssl->transform_out->ivlen, + ssl->out_msg, ssl->out_msglen, + ssl->out_msg, &olen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); + return ( ret ); } - if( ssl->out_msglen != olen ) - { + if ( ssl->out_msglen != olen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - } - else + } else #endif /* MBEDTLS_ARC4_C || MBEDTLS_CIPHER_NULL_CIPHER */ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) - if( mode == MBEDTLS_MODE_GCM || - mode == MBEDTLS_MODE_CCM ) - { - int ret; - size_t enc_msglen, olen; - unsigned char *enc_msg; - unsigned char add_data[13]; - unsigned char taglen = ssl->transform_out->ciphersuite_info->flags & - MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; + if ( mode == MBEDTLS_MODE_GCM || + mode == MBEDTLS_MODE_CCM ) { + int ret; + size_t enc_msglen, olen; + unsigned char *enc_msg; + unsigned char add_data[13]; + unsigned char taglen = ssl->transform_out->ciphersuite_info->flags & + MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; - memcpy( add_data, ssl->out_ctr, 8 ); - add_data[8] = ssl->out_msgtype; - mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, add_data + 9 ); - add_data[11] = ( ssl->out_msglen >> 8 ) & 0xFF; - add_data[12] = ssl->out_msglen & 0xFF; + memcpy( add_data, ssl->out_ctr, 8 ); + add_data[8] = ssl->out_msgtype; + mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, + ssl->conf->transport, add_data + 9 ); + add_data[11] = ( ssl->out_msglen >> 8 ) & 0xFF; + add_data[12] = ssl->out_msglen & 0xFF; - MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", - add_data, 13 ); + MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", + add_data, 13 ); - /* - * Generate IV - */ - if( ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen != 8 ) - { - /* Reminder if we ever add an AEAD mode with a different size */ - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - - memcpy( ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, - ssl->out_ctr, 8 ); - memcpy( ssl->out_iv, ssl->out_ctr, 8 ); - - MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->out_iv, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); - - /* - * Fix pointer positions and message length with added IV - */ - enc_msg = ssl->out_msg; - enc_msglen = ssl->out_msglen; - ssl->out_msglen += ssl->transform_out->ivlen - - ssl->transform_out->fixed_ivlen; - - MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of padding", - ssl->out_msglen, 0 ) ); - - /* - * Encrypt and authenticate - */ - if( ( ret = mbedtls_cipher_auth_encrypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - add_data, 13, - enc_msg, enc_msglen, - enc_msg, &olen, - enc_msg + enc_msglen, taglen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_encrypt", ret ); - return( ret ); - } - - if( olen != enc_msglen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - - ssl->out_msglen += taglen; - auth_done++; - - MBEDTLS_SSL_DEBUG_BUF( 4, "after encrypt: tag", enc_msg + enc_msglen, taglen ); - } - else -#endif /* MBEDTLS_GCM_C || MBEDTLS_CCM_C */ -#if defined(MBEDTLS_CIPHER_MODE_CBC) && \ - ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_CAMELLIA_C) ) - if( mode == MBEDTLS_MODE_CBC ) - { - int ret; - unsigned char *enc_msg; - size_t enc_msglen, padlen, olen = 0, i; - - padlen = ssl->transform_out->ivlen - ( ssl->out_msglen + 1 ) % - ssl->transform_out->ivlen; - if( padlen == ssl->transform_out->ivlen ) - padlen = 0; - - for( i = 0; i <= padlen; i++ ) - ssl->out_msg[ssl->out_msglen + i] = (unsigned char) padlen; - - ssl->out_msglen += padlen + 1; - - enc_msglen = ssl->out_msglen; - enc_msg = ssl->out_msg; - -#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - /* - * Prepend per-record IV for block cipher in TLS v1.1 and up as per - * Method 1 (6.2.3.2. in RFC4346 and RFC5246) - */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { /* * Generate IV */ - ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->transform_out->iv_enc, - ssl->transform_out->ivlen ); - if( ret != 0 ) - return( ret ); + if ( ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen != 8 ) { + /* Reminder if we ever add an AEAD mode with a different size */ + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - memcpy( ssl->out_iv, ssl->transform_out->iv_enc, - ssl->transform_out->ivlen ); + memcpy( ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, + ssl->out_ctr, 8 ); + memcpy( ssl->out_iv, ssl->out_ctr, 8 ); + + MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->out_iv, + ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); /* * Fix pointer positions and message length with added IV */ enc_msg = ssl->out_msg; enc_msglen = ssl->out_msglen; - ssl->out_msglen += ssl->transform_out->ivlen; - } + ssl->out_msglen += ssl->transform_out->ivlen - + ssl->transform_out->fixed_ivlen; + + MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " + "including %d bytes of padding", + ssl->out_msglen, 0 ) ); + + /* + * Encrypt and authenticate + */ + if ( ( ret = mbedtls_cipher_auth_encrypt( &ssl->transform_out->cipher_ctx_enc, + ssl->transform_out->iv_enc, + ssl->transform_out->ivlen, + add_data, 13, + enc_msg, enc_msglen, + enc_msg, &olen, + enc_msg + enc_msglen, taglen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_encrypt", ret ); + return ( ret ); + } + + if ( olen != enc_msglen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + + ssl->out_msglen += taglen; + auth_done++; + + MBEDTLS_SSL_DEBUG_BUF( 4, "after encrypt: tag", enc_msg + enc_msglen, taglen ); + } else +#endif /* MBEDTLS_GCM_C || MBEDTLS_CCM_C */ +#if defined(MBEDTLS_CIPHER_MODE_CBC) && \ + ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_CAMELLIA_C) ) + if ( mode == MBEDTLS_MODE_CBC ) { + int ret; + unsigned char *enc_msg; + size_t enc_msglen, padlen, olen = 0, i; + + padlen = ssl->transform_out->ivlen - ( ssl->out_msglen + 1 ) % + ssl->transform_out->ivlen; + if ( padlen == ssl->transform_out->ivlen ) + padlen = 0; + + for ( i = 0; i <= padlen; i++ ) + ssl->out_msg[ssl->out_msglen + i] = (unsigned char) padlen; + + ssl->out_msglen += padlen + 1; + + enc_msglen = ssl->out_msglen; + enc_msg = ssl->out_msg; + +#if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) + /* + * Prepend per-record IV for block cipher in TLS v1.1 and up as per + * Method 1 (6.2.3.2. in RFC4346 and RFC5246) + */ + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { + /* + * Generate IV + */ + ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->transform_out->iv_enc, + ssl->transform_out->ivlen ); + if ( ret != 0 ) + return ( ret ); + + memcpy( ssl->out_iv, ssl->transform_out->iv_enc, + ssl->transform_out->ivlen ); + + /* + * Fix pointer positions and message length with added IV + */ + enc_msg = ssl->out_msg; + enc_msglen = ssl->out_msglen; + ssl->out_msglen += ssl->transform_out->ivlen; + } #endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of IV and %d bytes of padding", - ssl->out_msglen, ssl->transform_out->ivlen, - padlen + 1 ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " + "including %d bytes of IV and %d bytes of padding", + ssl->out_msglen, ssl->transform_out->ivlen, + padlen + 1 ) ); - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - enc_msg, enc_msglen, - enc_msg, &olen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); - } + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, + ssl->transform_out->iv_enc, + ssl->transform_out->ivlen, + enc_msg, enc_msglen, + enc_msg, &olen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); + return ( ret ); + } - if( enc_msglen != olen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( enc_msglen != olen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) - { - /* - * Save IV in SSL3 and TLS1 - */ - memcpy( ssl->transform_out->iv_enc, - ssl->transform_out->cipher_ctx_enc.iv, - ssl->transform_out->ivlen ); - } + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) { + /* + * Save IV in SSL3 and TLS1 + */ + memcpy( ssl->transform_out->iv_enc, + ssl->transform_out->cipher_ctx_enc.iv, + ssl->transform_out->ivlen ); + } #endif #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - if( auth_done == 0 ) - { - /* - * MAC(MAC_write_key, seq_num + - * TLSCipherText.type + - * TLSCipherText.version + - * length_of( (IV +) ENC(...) ) + - * IV + // except for TLS 1.0 - * ENC(content + padding + padding_length)); - */ - unsigned char pseudo_hdr[13]; + if ( auth_done == 0 ) { + /* + * MAC(MAC_write_key, seq_num + + * TLSCipherText.type + + * TLSCipherText.version + + * length_of( (IV +) ENC(...) ) + + * IV + // except for TLS 1.0 + * ENC(content + padding + padding_length)); + */ + unsigned char pseudo_hdr[13]; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); - memcpy( pseudo_hdr + 0, ssl->out_ctr, 8 ); - memcpy( pseudo_hdr + 8, ssl->out_hdr, 3 ); - pseudo_hdr[11] = (unsigned char)( ( ssl->out_msglen >> 8 ) & 0xFF ); - pseudo_hdr[12] = (unsigned char)( ( ssl->out_msglen ) & 0xFF ); + memcpy( pseudo_hdr + 0, ssl->out_ctr, 8 ); + memcpy( pseudo_hdr + 8, ssl->out_hdr, 3 ); + pseudo_hdr[11] = (unsigned char)( ( ssl->out_msglen >> 8 ) & 0xFF ); + pseudo_hdr[12] = (unsigned char)( ( ssl->out_msglen ) & 0xFF ); - MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); + MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, - ssl->out_iv, ssl->out_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, - ssl->out_iv + ssl->out_msglen ); - mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, pseudo_hdr, 13 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, + ssl->out_iv, ssl->out_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, + ssl->out_iv + ssl->out_msglen ); + mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); - ssl->out_msglen += ssl->transform_out->maclen; - auth_done++; - } + ssl->out_msglen += ssl->transform_out->maclen; + auth_done++; + } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ - } - else + } else #endif /* MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_CAMELLIA_C ) */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* Make extra sure authentication was performed, exactly once */ - if( auth_done != 1 ) - { + if ( auth_done != 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= encrypt buf" ) ); - return( 0 ); + return ( 0 ); } #define SSL_MAX_MAC_SIZE 48 @@ -1575,349 +1480,320 @@ static int ssl_decrypt_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> decrypt buf" ) ); - if( ssl->session_in == NULL || ssl->transform_in == NULL ) - { + if ( ssl->session_in == NULL || ssl->transform_in == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } mode = mbedtls_cipher_get_cipher_mode( &ssl->transform_in->cipher_ctx_dec ); - if( ssl->in_msglen < ssl->transform_in->minlen ) - { + if ( ssl->in_msglen < ssl->transform_in->minlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "in_msglen (%d) < minlen (%d)", - ssl->in_msglen, ssl->transform_in->minlen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + ssl->in_msglen, ssl->transform_in->minlen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } #if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) - if( mode == MBEDTLS_MODE_STREAM ) - { + if ( mode == MBEDTLS_MODE_STREAM ) { int ret; size_t olen = 0; padlen = 0; - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - ssl->in_msg, ssl->in_msglen, - ssl->in_msg, &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, + ssl->transform_in->iv_dec, + ssl->transform_in->ivlen, + ssl->in_msg, ssl->in_msglen, + ssl->in_msg, &olen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msglen != olen ) - { + if ( ssl->in_msglen != olen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - } - else + } else #endif /* MBEDTLS_ARC4_C || MBEDTLS_CIPHER_NULL_CIPHER */ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) - if( mode == MBEDTLS_MODE_GCM || - mode == MBEDTLS_MODE_CCM ) - { - int ret; - size_t dec_msglen, olen; - unsigned char *dec_msg; - unsigned char *dec_msg_result; - unsigned char add_data[13]; - unsigned char taglen = ssl->transform_in->ciphersuite_info->flags & - MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; - size_t explicit_iv_len = ssl->transform_in->ivlen - - ssl->transform_in->fixed_ivlen; + if ( mode == MBEDTLS_MODE_GCM || + mode == MBEDTLS_MODE_CCM ) { + int ret; + size_t dec_msglen, olen; + unsigned char *dec_msg; + unsigned char *dec_msg_result; + unsigned char add_data[13]; + unsigned char taglen = ssl->transform_in->ciphersuite_info->flags & + MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; + size_t explicit_iv_len = ssl->transform_in->ivlen - + ssl->transform_in->fixed_ivlen; - if( ssl->in_msglen < explicit_iv_len + taglen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < explicit_iv_len (%d) " - "+ taglen (%d)", ssl->in_msglen, - explicit_iv_len, taglen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } - dec_msglen = ssl->in_msglen - explicit_iv_len - taglen; + if ( ssl->in_msglen < explicit_iv_len + taglen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < explicit_iv_len (%d) " + "+ taglen (%d)", ssl->in_msglen, + explicit_iv_len, taglen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } + dec_msglen = ssl->in_msglen - explicit_iv_len - taglen; - dec_msg = ssl->in_msg; - dec_msg_result = ssl->in_msg; - ssl->in_msglen = dec_msglen; + dec_msg = ssl->in_msg; + dec_msg_result = ssl->in_msg; + ssl->in_msglen = dec_msglen; - memcpy( add_data, ssl->in_ctr, 8 ); - add_data[8] = ssl->in_msgtype; - mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, add_data + 9 ); - add_data[11] = ( ssl->in_msglen >> 8 ) & 0xFF; - add_data[12] = ssl->in_msglen & 0xFF; + memcpy( add_data, ssl->in_ctr, 8 ); + add_data[8] = ssl->in_msgtype; + mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, + ssl->conf->transport, add_data + 9 ); + add_data[11] = ( ssl->in_msglen >> 8 ) & 0xFF; + add_data[12] = ssl->in_msglen & 0xFF; - MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", - add_data, 13 ); + MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", + add_data, 13 ); - memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen, - ssl->in_iv, - ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen ); + memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen, + ssl->in_iv, + ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen ); - MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->transform_in->iv_dec, - ssl->transform_in->ivlen ); - MBEDTLS_SSL_DEBUG_BUF( 4, "TAG used", dec_msg + dec_msglen, taglen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->transform_in->iv_dec, + ssl->transform_in->ivlen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "TAG used", dec_msg + dec_msglen, taglen ); - /* - * Decrypt and authenticate - */ - if( ( ret = mbedtls_cipher_auth_decrypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - add_data, 13, - dec_msg, dec_msglen, - dec_msg_result, &olen, - dec_msg + dec_msglen, taglen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_decrypt", ret ); + /* + * Decrypt and authenticate + */ + if ( ( ret = mbedtls_cipher_auth_decrypt( &ssl->transform_in->cipher_ctx_dec, + ssl->transform_in->iv_dec, + ssl->transform_in->ivlen, + add_data, 13, + dec_msg, dec_msglen, + dec_msg_result, &olen, + dec_msg + dec_msglen, taglen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_decrypt", ret ); - if( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + if ( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); - return( ret ); - } - auth_done++; + return ( ret ); + } + auth_done++; - if( olen != dec_msglen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - } - else + if ( olen != dec_msglen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + } else #endif /* MBEDTLS_GCM_C || MBEDTLS_CCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_CAMELLIA_C) ) - if( mode == MBEDTLS_MODE_CBC ) - { - /* - * Decrypt and check the padding - */ - int ret; - unsigned char *dec_msg; - unsigned char *dec_msg_result; - size_t dec_msglen; - size_t minlen = 0; - size_t olen = 0; + if ( mode == MBEDTLS_MODE_CBC ) { + /* + * Decrypt and check the padding + */ + int ret; + unsigned char *dec_msg; + unsigned char *dec_msg_result; + size_t dec_msglen; + size_t minlen = 0; + size_t olen = 0; - /* - * Check immediate ciphertext sanity - */ + /* + * Check immediate ciphertext sanity + */ #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - minlen += ssl->transform_in->ivlen; + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) + minlen += ssl->transform_in->ivlen; #endif - if( ssl->in_msglen < minlen + ssl->transform_in->ivlen || - ssl->in_msglen < minlen + ssl->transform_in->maclen + 1 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < max( ivlen(%d), maclen (%d) " - "+ 1 ) ( + expl IV )", ssl->in_msglen, - ssl->transform_in->ivlen, - ssl->transform_in->maclen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } + if ( ssl->in_msglen < minlen + ssl->transform_in->ivlen || + ssl->in_msglen < minlen + ssl->transform_in->maclen + 1 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < max( ivlen(%d), maclen (%d) " + "+ 1 ) ( + expl IV )", ssl->in_msglen, + ssl->transform_in->ivlen, + ssl->transform_in->maclen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } - dec_msglen = ssl->in_msglen; - dec_msg = ssl->in_msg; - dec_msg_result = ssl->in_msg; + dec_msglen = ssl->in_msglen; + dec_msg = ssl->in_msg; + dec_msg_result = ssl->in_msg; - /* - * Authenticate before decrypt if enabled - */ + /* + * Authenticate before decrypt if enabled + */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - if( ssl->session_in->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) - { - unsigned char computed_mac[SSL_MAX_MAC_SIZE]; - unsigned char pseudo_hdr[13]; + if ( ssl->session_in->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) { + unsigned char computed_mac[SSL_MAX_MAC_SIZE]; + unsigned char pseudo_hdr[13]; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); - dec_msglen -= ssl->transform_in->maclen; - ssl->in_msglen -= ssl->transform_in->maclen; + dec_msglen -= ssl->transform_in->maclen; + ssl->in_msglen -= ssl->transform_in->maclen; - memcpy( pseudo_hdr + 0, ssl->in_ctr, 8 ); - memcpy( pseudo_hdr + 8, ssl->in_hdr, 3 ); - pseudo_hdr[11] = (unsigned char)( ( ssl->in_msglen >> 8 ) & 0xFF ); - pseudo_hdr[12] = (unsigned char)( ( ssl->in_msglen ) & 0xFF ); + memcpy( pseudo_hdr + 0, ssl->in_ctr, 8 ); + memcpy( pseudo_hdr + 8, ssl->in_hdr, 3 ); + pseudo_hdr[11] = (unsigned char)( ( ssl->in_msglen >> 8 ) & 0xFF ); + pseudo_hdr[12] = (unsigned char)( ( ssl->in_msglen ) & 0xFF ); - MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); + MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, - ssl->in_iv, ssl->in_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, computed_mac ); - mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, pseudo_hdr, 13 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, + ssl->in_iv, ssl->in_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, computed_mac ); + mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); - MBEDTLS_SSL_DEBUG_BUF( 4, "message mac", ssl->in_iv + ssl->in_msglen, - ssl->transform_in->maclen ); - MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", computed_mac, - ssl->transform_in->maclen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "message mac", ssl->in_iv + ssl->in_msglen, + ssl->transform_in->maclen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", computed_mac, + ssl->transform_in->maclen ); - if( mbedtls_ssl_safer_memcmp( ssl->in_iv + ssl->in_msglen, computed_mac, - ssl->transform_in->maclen ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); + if ( mbedtls_ssl_safer_memcmp( ssl->in_iv + ssl->in_msglen, computed_mac, + ssl->transform_in->maclen ) != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } - auth_done++; - } + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } + auth_done++; + } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ - /* - * Check length sanity - */ - if( ssl->in_msglen % ssl->transform_in->ivlen != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) %% ivlen (%d) != 0", - ssl->in_msglen, ssl->transform_in->ivlen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } + /* + * Check length sanity + */ + if ( ssl->in_msglen % ssl->transform_in->ivlen != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) %% ivlen (%d) != 0", + ssl->in_msglen, ssl->transform_in->ivlen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - /* - * Initialize for prepended IV for block cipher in TLS v1.1 and up - */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { - dec_msglen -= ssl->transform_in->ivlen; - ssl->in_msglen -= ssl->transform_in->ivlen; + /* + * Initialize for prepended IV for block cipher in TLS v1.1 and up + */ + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { + dec_msglen -= ssl->transform_in->ivlen; + ssl->in_msglen -= ssl->transform_in->ivlen; - for( i = 0; i < ssl->transform_in->ivlen; i++ ) - ssl->transform_in->iv_dec[i] = ssl->in_iv[i]; - } + for ( i = 0; i < ssl->transform_in->ivlen; i++ ) + ssl->transform_in->iv_dec[i] = ssl->in_iv[i]; + } #endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - dec_msg, dec_msglen, - dec_msg_result, &olen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); - } + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, + ssl->transform_in->iv_dec, + ssl->transform_in->ivlen, + dec_msg, dec_msglen, + dec_msg_result, &olen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); + return ( ret ); + } - if( dec_msglen != olen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( dec_msglen != olen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) - { - /* - * Save IV in SSL3 and TLS1 - */ - memcpy( ssl->transform_in->iv_dec, - ssl->transform_in->cipher_ctx_dec.iv, - ssl->transform_in->ivlen ); - } + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) { + /* + * Save IV in SSL3 and TLS1 + */ + memcpy( ssl->transform_in->iv_dec, + ssl->transform_in->cipher_ctx_dec.iv, + ssl->transform_in->ivlen ); + } #endif - padlen = 1 + ssl->in_msg[ssl->in_msglen - 1]; + padlen = 1 + ssl->in_msg[ssl->in_msglen - 1]; - if( ssl->in_msglen < ssl->transform_in->maclen + padlen && - auth_done == 0 ) - { + if ( ssl->in_msglen < ssl->transform_in->maclen + padlen && + auth_done == 0 ) { #if defined(MBEDTLS_SSL_DEBUG_ALL) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)", - ssl->in_msglen, ssl->transform_in->maclen, padlen ) ); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)", + ssl->in_msglen, ssl->transform_in->maclen, padlen ) ); #endif - padlen = 0; - correct = 0; - } + padlen = 0; + correct = 0; + } #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( padlen > ssl->transform_in->ivlen ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( padlen > ssl->transform_in->ivlen ) { #if defined(MBEDTLS_SSL_DEBUG_ALL) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding length: is %d, " - "should be no more than %d", - padlen, ssl->transform_in->ivlen ) ); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding length: is %d, " + "should be no more than %d", + padlen, ssl->transform_in->ivlen ) ); #endif - correct = 0; - } - } - else + correct = 0; + } + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) - { - /* - * TLSv1+: always check the padding up to the first failure - * and fake check up to 256 bytes of padding - */ - size_t pad_count = 0, real_count = 1; - size_t padding_idx = ssl->in_msglen - padlen - 1; + if ( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) { + /* + * TLSv1+: always check the padding up to the first failure + * and fake check up to 256 bytes of padding + */ + size_t pad_count = 0, real_count = 1; + size_t padding_idx = ssl->in_msglen - padlen - 1; - /* - * Padding is guaranteed to be incorrect if: - * 1. padlen >= ssl->in_msglen - * - * 2. padding_idx >= MBEDTLS_SSL_MAX_CONTENT_LEN + - * ssl->transform_in->maclen - * - * In both cases we reset padding_idx to a safe value (0) to - * prevent out-of-buffer reads. - */ - correct &= ( ssl->in_msglen >= padlen + 1 ); - correct &= ( padding_idx < MBEDTLS_SSL_MAX_CONTENT_LEN + - ssl->transform_in->maclen ); + /* + * Padding is guaranteed to be incorrect if: + * 1. padlen >= ssl->in_msglen + * + * 2. padding_idx >= MBEDTLS_SSL_MAX_CONTENT_LEN + + * ssl->transform_in->maclen + * + * In both cases we reset padding_idx to a safe value (0) to + * prevent out-of-buffer reads. + */ + correct &= ( ssl->in_msglen >= padlen + 1 ); + correct &= ( padding_idx < MBEDTLS_SSL_MAX_CONTENT_LEN + + ssl->transform_in->maclen ); - padding_idx *= correct; + padding_idx *= correct; - for( i = 1; i <= 256; i++ ) - { - real_count &= ( i <= padlen ); - pad_count += real_count * - ( ssl->in_msg[padding_idx + i] == padlen - 1 ); - } + for ( i = 1; i <= 256; i++ ) { + real_count &= ( i <= padlen ); + pad_count += real_count * + ( ssl->in_msg[padding_idx + i] == padlen - 1 ); + } - correct &= ( pad_count == padlen ); /* Only 1 on correct padding */ + correct &= ( pad_count == padlen ); /* Only 1 on correct padding */ #if defined(MBEDTLS_SSL_DEBUG_ALL) - if( padlen > 0 && correct == 0 ) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding byte detected" ) ); + if ( padlen > 0 && correct == 0 ) + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding byte detected" ) ); #endif - padlen &= correct * 0x1FF; - } - else + padlen &= correct * 0x1FF; + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - ssl->in_msglen -= padlen; - } - else + ssl->in_msglen -= padlen; + } else #endif /* MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_CAMELLIA_C ) */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 4, "raw buffer after decryption", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); /* * Authenticate if not done yet. * Compute the MAC regardless of the padding result (RFC4346, CBCTIME). */ #if defined(SSL_SOME_MODES_USE_MAC) - if( auth_done == 0 ) - { + if ( auth_done == 0 ) { unsigned char tmp[SSL_MAX_MAC_SIZE]; ssl->in_msglen -= ssl->transform_in->maclen; @@ -1928,66 +1804,61 @@ static int ssl_decrypt_buf( mbedtls_ssl_context *ssl ) memcpy( tmp, ssl->in_msg + ssl->in_msglen, ssl->transform_in->maclen ); #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl_mac( &ssl->transform_in->md_ctx_dec, - ssl->transform_in->mac_dec, - ssl->in_msg, ssl->in_msglen, - ssl->in_ctr, ssl->in_msgtype ); - } - else + ssl->transform_in->mac_dec, + ssl->in_msg, ssl->in_msglen, + ssl->in_ctr, ssl->in_msgtype ); + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) - { - /* - * Process MAC and always update for padlen afterwards to make - * total time independent of padlen - * - * extra_run compensates MAC check for padlen - * - * Known timing attacks: - * - Lucky Thirteen (http://www.isg.rhul.ac.uk/tls/TLStiming.pdf) - * - * We use ( ( Lx + 8 ) / 64 ) to handle 'negative Lx' values - * correctly. (We round down instead of up, so -56 is the correct - * value for our calculations instead of -55) - */ - size_t j, extra_run = 0; - extra_run = ( 13 + ssl->in_msglen + padlen + 8 ) / 64 - - ( 13 + ssl->in_msglen + 8 ) / 64; + if ( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) { + /* + * Process MAC and always update for padlen afterwards to make + * total time independent of padlen + * + * extra_run compensates MAC check for padlen + * + * Known timing attacks: + * - Lucky Thirteen (http://www.isg.rhul.ac.uk/tls/TLStiming.pdf) + * + * We use ( ( Lx + 8 ) / 64 ) to handle 'negative Lx' values + * correctly. (We round down instead of up, so -56 is the correct + * value for our calculations instead of -55) + */ + size_t j, extra_run = 0; + extra_run = ( 13 + ssl->in_msglen + padlen + 8 ) / 64 - + ( 13 + ssl->in_msglen + 8 ) / 64; - extra_run &= correct * 0xFF; + extra_run &= correct * 0xFF; - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_ctr, 8 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_hdr, 3 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_len, 2 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_msg, - ssl->in_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, - ssl->in_msg + ssl->in_msglen ); - /* Call mbedtls_md_process at least once due to cache attacks */ - for( j = 0; j < extra_run + 1; j++ ) - mbedtls_md_process( &ssl->transform_in->md_ctx_dec, ssl->in_msg ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_ctr, 8 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_hdr, 3 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_len, 2 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_msg, + ssl->in_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, + ssl->in_msg + ssl->in_msglen ); + /* Call mbedtls_md_process at least once due to cache attacks */ + for ( j = 0; j < extra_run + 1; j++ ) + mbedtls_md_process( &ssl->transform_in->md_ctx_dec, ssl->in_msg ); - mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); - } - else + mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 4, "message mac", tmp, ssl->transform_in->maclen ); MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", ssl->in_msg + ssl->in_msglen, - ssl->transform_in->maclen ); + ssl->transform_in->maclen ); - if( mbedtls_ssl_safer_memcmp( tmp, ssl->in_msg + ssl->in_msglen, - ssl->transform_in->maclen ) != 0 ) - { + if ( mbedtls_ssl_safer_memcmp( tmp, ssl->in_msg + ssl->in_msglen, + ssl->transform_in->maclen ) != 0 ) { #if defined(MBEDTLS_SSL_DEBUG_ALL) MBEDTLS_SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); #endif @@ -1998,59 +1869,52 @@ static int ssl_decrypt_buf( mbedtls_ssl_context *ssl ) /* * Finally check the correct flag */ - if( correct == 0 ) - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + if ( correct == 0 ) + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } #endif /* SSL_SOME_MODES_USE_MAC */ /* Make extra sure authentication was performed, exactly once */ - if( auth_done != 1 ) - { + if ( auth_done != 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - if( ssl->in_msglen == 0 ) - { + if ( ssl->in_msglen == 0 ) { ssl->nb_zero++; /* * Three or more empty messages may be a DoS attack * (excessive CPU consumption). */ - if( ssl->nb_zero > 3 ) - { + if ( ssl->nb_zero > 3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received four consecutive empty " - "messages, possible DoS attack" ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + "messages, possible DoS attack" ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } - } - else + } else ssl->nb_zero = 0; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ; /* in_ctr read from peer, not maintained internally */ - } - else + } else #endif { - for( i = 8; i > ssl_ep_len( ssl ); i-- ) - if( ++ssl->in_ctr[i - 1] != 0 ) + for ( i = 8; i > ssl_ep_len( ssl ); i-- ) + if ( ++ssl->in_ctr[i - 1] != 0 ) break; /* The loop goes to its end iff the counter is wrapping */ - if( i == ssl_ep_len( ssl ) ) - { + if ( i == ssl_ep_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "incoming message counter would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= decrypt buf" ) ); - return( 0 ); + return ( 0 ); } #undef MAC_NONE @@ -2070,16 +1934,16 @@ static int ssl_compress_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> compress buf" ) ); - if( len_pre == 0 ) - return( 0 ); + if ( len_pre == 0 ) + return ( 0 ); memcpy( msg_pre, ssl->out_msg, len_pre ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "before compression: msglen = %d, ", - ssl->out_msglen ) ); + ssl->out_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "before compression: output payload", - ssl->out_msg, ssl->out_msglen ); + ssl->out_msg, ssl->out_msglen ); ssl->transform_out->ctx_deflate.next_in = msg_pre; ssl->transform_out->ctx_deflate.avail_in = len_pre; @@ -2087,24 +1951,23 @@ static int ssl_compress_buf( mbedtls_ssl_context *ssl ) ssl->transform_out->ctx_deflate.avail_out = MBEDTLS_SSL_BUFFER_LEN; ret = deflate( &ssl->transform_out->ctx_deflate, Z_SYNC_FLUSH ); - if( ret != Z_OK ) - { + if ( ret != Z_OK ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "failed to perform compression (%d)", ret ) ); - return( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); + return ( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); } ssl->out_msglen = MBEDTLS_SSL_BUFFER_LEN - ssl->transform_out->ctx_deflate.avail_out; MBEDTLS_SSL_DEBUG_MSG( 3, ( "after compression: msglen = %d, ", - ssl->out_msglen ) ); + ssl->out_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "after compression: output payload", - ssl->out_msg, ssl->out_msglen ); + ssl->out_msg, ssl->out_msglen ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= compress buf" ) ); - return( 0 ); + return ( 0 ); } static int ssl_decompress_buf( mbedtls_ssl_context *ssl ) @@ -2116,16 +1979,16 @@ static int ssl_decompress_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> decompress buf" ) ); - if( len_pre == 0 ) - return( 0 ); + if ( len_pre == 0 ) + return ( 0 ); memcpy( msg_pre, ssl->in_msg, len_pre ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "before decompression: msglen = %d, ", - ssl->in_msglen ) ); + ssl->in_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "before decompression: input payload", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); ssl->transform_in->ctx_inflate.next_in = msg_pre; ssl->transform_in->ctx_inflate.avail_in = len_pre; @@ -2133,24 +1996,23 @@ static int ssl_decompress_buf( mbedtls_ssl_context *ssl ) ssl->transform_in->ctx_inflate.avail_out = MBEDTLS_SSL_MAX_CONTENT_LEN; ret = inflate( &ssl->transform_in->ctx_inflate, Z_SYNC_FLUSH ); - if( ret != Z_OK ) - { + if ( ret != Z_OK ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "failed to perform decompression (%d)", ret ) ); - return( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); + return ( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); } ssl->in_msglen = MBEDTLS_SSL_MAX_CONTENT_LEN - ssl->transform_in->ctx_inflate.avail_out; MBEDTLS_SSL_DEBUG_MSG( 3, ( "after decompression: msglen = %d, ", - ssl->in_msglen ) ); + ssl->in_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "after decompression: input payload", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= decompress buf" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ZLIB_SUPPORT */ @@ -2162,25 +2024,22 @@ static int ssl_resend_hello_request( mbedtls_ssl_context *ssl ) { /* If renegotiation is not enforced, retransmit until we would reach max * timeout if we were using the usual handshake doubling scheme */ - if( ssl->conf->renego_max_records < 0 ) - { + if ( ssl->conf->renego_max_records < 0 ) { uint32_t ratio = ssl->conf->hs_timeout_max / ssl->conf->hs_timeout_min + 1; unsigned char doublings = 1; - while( ratio != 0 ) - { + while ( ratio != 0 ) { ++doublings; ratio >>= 1; } - if( ++ssl->renego_records_seen > doublings ) - { + if ( ++ssl->renego_records_seen > doublings ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "no longer retransmitting hello request" ) ); - return( 0 ); + return ( 0 ); } } - return( ssl_write_hello_request( ssl ) ); + return ( ssl_write_hello_request( ssl ) ); } #endif #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ @@ -2207,30 +2066,26 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> fetch input" ) ); - if( ssl->f_recv == NULL && ssl->f_recv_timeout == NULL ) - { + if ( ssl->f_recv == NULL && ssl->f_recv_timeout == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Bad usage of mbedtls_ssl_set_bio() " - "or mbedtls_ssl_set_bio()" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "or mbedtls_ssl_set_bio()" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( nb_want > MBEDTLS_SSL_BUFFER_LEN - (size_t)( ssl->in_hdr - ssl->in_buf ) ) - { + if ( nb_want > MBEDTLS_SSL_BUFFER_LEN - (size_t)( ssl->in_hdr - ssl->in_buf ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "requesting more data than fits" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { uint32_t timeout; /* Just to be sure */ - if( ssl->f_set_timer == NULL || ssl->f_get_timer == NULL ) - { + if ( ssl->f_set_timer == NULL || ssl->f_get_timer == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "You must use " - "mbedtls_ssl_set_timer_cb() for DTLS" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "mbedtls_ssl_set_timer_cb() for DTLS" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* @@ -2243,20 +2098,17 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) /* * Move to the next record in the already read datagram if applicable */ - if( ssl->next_record_offset != 0 ) - { - if( ssl->in_left < ssl->next_record_offset ) - { + if ( ssl->next_record_offset != 0 ) { + if ( ssl->in_left < ssl->next_record_offset ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } ssl->in_left -= ssl->next_record_offset; - if( ssl->in_left != 0 ) - { + if ( ssl->in_left != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "next record in same datagram, offset: %d", - ssl->next_record_offset ) ); + ssl->next_record_offset ) ); memmove( ssl->in_hdr, ssl->in_hdr + ssl->next_record_offset, ssl->in_left ); @@ -2266,15 +2118,14 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) } MBEDTLS_SSL_DEBUG_MSG( 2, ( "in_left: %d, nb_want: %d", - ssl->in_left, nb_want ) ); + ssl->in_left, nb_want ) ); /* * Done if we already have enough data. */ - if( nb_want <= ssl->in_left) - { + if ( nb_want <= ssl->in_left) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= fetch input" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2282,10 +2133,9 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) * are not at the beginning of a new record, the caller did something * wrong. */ - if( ssl->in_left != 0 ) - { + if ( ssl->in_left != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } /* @@ -2293,94 +2143,81 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) * This avoids by-passing the timer when repeatedly receiving messages * that will end up being dropped. */ - if( ssl_check_timer( ssl ) != 0 ) + if ( ssl_check_timer( ssl ) != 0 ) ret = MBEDTLS_ERR_SSL_TIMEOUT; - else - { + else { len = MBEDTLS_SSL_BUFFER_LEN - ( ssl->in_hdr - ssl->in_buf ); - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) timeout = ssl->handshake->retransmit_timeout; else timeout = ssl->conf->read_timeout; MBEDTLS_SSL_DEBUG_MSG( 3, ( "f_recv_timeout: %u ms", timeout ) ); - if( ssl->f_recv_timeout != NULL ) + if ( ssl->f_recv_timeout != NULL ) ret = ssl->f_recv_timeout( ssl->p_bio, ssl->in_hdr, len, - timeout ); + timeout ); else ret = ssl->f_recv( ssl->p_bio, ssl->in_hdr, len ); MBEDTLS_SSL_DEBUG_RET( 2, "ssl->f_recv(_timeout)", ret ); - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_CONN_EOF ); + if ( ret == 0 ) + return ( MBEDTLS_ERR_SSL_CONN_EOF ); } - if( ret == MBEDTLS_ERR_SSL_TIMEOUT ) - { + if ( ret == MBEDTLS_ERR_SSL_TIMEOUT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "timeout" ) ); ssl_set_timer( ssl, 0 ); - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ssl_double_retransmit_timeout( ssl ) != 0 ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ssl_double_retransmit_timeout( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake timeout" ) ); - return( MBEDTLS_ERR_SSL_TIMEOUT ); + return ( MBEDTLS_ERR_SSL_TIMEOUT ); } - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_resend", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } #if defined(MBEDTLS_SSL_SRV_C) && defined(MBEDTLS_SSL_RENEGOTIATION) - else if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { - if( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) - { + else if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { + if ( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_resend_hello_request", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ } - if( ret < 0 ) - return( ret ); + if ( ret < 0 ) + return ( ret ); ssl->in_left = ret; - } - else + } else #endif { MBEDTLS_SSL_DEBUG_MSG( 2, ( "in_left: %d, nb_want: %d", - ssl->in_left, nb_want ) ); + ssl->in_left, nb_want ) ); - while( ssl->in_left < nb_want ) - { + while ( ssl->in_left < nb_want ) { len = nb_want - ssl->in_left; - if( ssl_check_timer( ssl ) != 0 ) + if ( ssl_check_timer( ssl ) != 0 ) ret = MBEDTLS_ERR_SSL_TIMEOUT; - else - { - if( ssl->f_recv_timeout != NULL ) - { + else { + if ( ssl->f_recv_timeout != NULL ) { ret = ssl->f_recv_timeout( ssl->p_bio, ssl->in_hdr + ssl->in_left, len, ssl->conf->read_timeout ); - } - else - { + } else { ret = ssl->f_recv( ssl->p_bio, ssl->in_hdr + ssl->in_left, len ); } @@ -2390,11 +2227,11 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) ssl->in_left, nb_want ) ); MBEDTLS_SSL_DEBUG_RET( 2, "ssl->f_recv(_timeout)", ret ); - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_CONN_EOF ); + if ( ret == 0 ) + return ( MBEDTLS_ERR_SSL_CONN_EOF ); - if( ret < 0 ) - return( ret ); + if ( ret < 0 ) + return ( ret ); ssl->in_left += ret; } @@ -2402,7 +2239,7 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= fetch input" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2415,24 +2252,21 @@ int mbedtls_ssl_flush_output( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> flush output" ) ); - if( ssl->f_send == NULL ) - { + if ( ssl->f_send == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Bad usage of mbedtls_ssl_set_bio() " - "or mbedtls_ssl_set_bio()" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "or mbedtls_ssl_set_bio()" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* Avoid incrementing counter if data is flushed */ - if( ssl->out_left == 0 ) - { + if ( ssl->out_left == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= flush output" ) ); - return( 0 ); + return ( 0 ); } - while( ssl->out_left > 0 ) - { + while ( ssl->out_left > 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "message length: %d, out_left: %d", - mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen, ssl->out_left ) ); + mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen, ssl->out_left ) ); buf = ssl->out_hdr + mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen - ssl->out_left; @@ -2440,26 +2274,25 @@ int mbedtls_ssl_flush_output( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 2, "ssl->f_send", ret ); - if( ret <= 0 ) - return( ret ); + if ( ret <= 0 ) + return ( ret ); ssl->out_left -= ret; } - for( i = 8; i > ssl_ep_len( ssl ); i-- ) - if( ++ssl->out_ctr[i - 1] != 0 ) + for ( i = 8; i > ssl_ep_len( ssl ); i-- ) + if ( ++ssl->out_ctr[i - 1] != 0 ) break; /* The loop goes to its end iff the counter is wrapping */ - if( i == ssl_ep_len( ssl ) ) - { + if ( i == ssl_ep_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "outgoing message counter would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= flush output" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2474,18 +2307,16 @@ static int ssl_flight_append( mbedtls_ssl_context *ssl ) mbedtls_ssl_flight_item *msg; /* Allocate space for current message */ - if( ( msg = mbedtls_calloc( 1, sizeof( mbedtls_ssl_flight_item ) ) ) == NULL ) - { + if ( ( msg = mbedtls_calloc( 1, sizeof( mbedtls_ssl_flight_item ) ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc %d bytes failed", - sizeof( mbedtls_ssl_flight_item ) ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + sizeof( mbedtls_ssl_flight_item ) ) ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } - if( ( msg->p = mbedtls_calloc( 1, ssl->out_msglen ) ) == NULL ) - { + if ( ( msg->p = mbedtls_calloc( 1, ssl->out_msglen ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc %d bytes failed", ssl->out_msglen ) ); mbedtls_free( msg ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } /* Copy current handshake message with headers */ @@ -2495,17 +2326,16 @@ static int ssl_flight_append( mbedtls_ssl_context *ssl ) msg->next = NULL; /* Append to the current flight */ - if( ssl->handshake->flight == NULL ) + if ( ssl->handshake->flight == NULL ) ssl->handshake->flight = msg; - else - { + else { mbedtls_ssl_flight_item *cur = ssl->handshake->flight; - while( cur->next != NULL ) + while ( cur->next != NULL ) cur = cur->next; cur->next = msg; } - return( 0 ); + return ( 0 ); } /* @@ -2516,8 +2346,7 @@ static void ssl_flight_free( mbedtls_ssl_flight_item *flight ) mbedtls_ssl_flight_item *cur = flight; mbedtls_ssl_flight_item *next; - while( cur != NULL ) - { + while ( cur != NULL ) { next = cur->next; mbedtls_free( cur->p ); @@ -2539,8 +2368,7 @@ static void ssl_swap_epochs( mbedtls_ssl_context *ssl ) mbedtls_ssl_transform *tmp_transform; unsigned char tmp_out_ctr[8]; - if( ssl->transform_out == ssl->handshake->alt_transform_out ) - { + if ( ssl->transform_out == ssl->handshake->alt_transform_out ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip swap epochs" ) ); return; } @@ -2558,22 +2386,18 @@ static void ssl_swap_epochs( mbedtls_ssl_context *ssl ) memcpy( ssl->handshake->alt_out_ctr, tmp_out_ctr, 8 ); /* Adjust to the newly activated transform */ - if( ssl->transform_out != NULL && - ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { + if ( ssl->transform_out != NULL && + ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { ssl->out_msg = ssl->out_iv + ssl->transform_out->ivlen - - ssl->transform_out->fixed_ivlen; - } - else + ssl->transform_out->fixed_ivlen; + } else ssl->out_msg = ssl->out_iv; #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_activate != NULL ) - { - if( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) - { + if ( mbedtls_ssl_hw_record_activate != NULL ) { + if ( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_activate", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif @@ -2590,8 +2414,7 @@ int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> mbedtls_ssl_resend" ) ); - if( ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING ) - { + if ( ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "initialise resending" ) ); ssl->handshake->cur_msg = ssl->handshake->flight; @@ -2600,17 +2423,15 @@ int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_SENDING; } - while( ssl->handshake->cur_msg != NULL ) - { + while ( ssl->handshake->cur_msg != NULL ) { int ret; mbedtls_ssl_flight_item *cur = ssl->handshake->cur_msg; /* Swap epochs before sending Finished: we can't do it after * sending ChangeCipherSpec, in case write returns WANT_READ. * Must be done before copying, may change out_msg pointer */ - if( cur->type == MBEDTLS_SSL_MSG_HANDSHAKE && - cur->p[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( cur->type == MBEDTLS_SSL_MSG_HANDSHAKE && + cur->p[0] == MBEDTLS_SSL_HS_FINISHED ) { ssl_swap_epochs( ssl ); } @@ -2622,24 +2443,22 @@ int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "resent handshake message header", ssl->out_msg, 12 ); - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } } - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_FINISHED; - else - { + else { ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; ssl_set_timer( ssl, ssl->handshake->retransmit_timeout ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= mbedtls_ssl_resend" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2658,12 +2477,10 @@ void mbedtls_ssl_recv_flight_completed( mbedtls_ssl_context *ssl ) /* Cancel timer */ ssl_set_timer( ssl, 0 ); - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) { ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_FINISHED; - } - else + } else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_PREPARING; } @@ -2675,12 +2492,10 @@ void mbedtls_ssl_send_flight_completed( mbedtls_ssl_context *ssl ) ssl_reset_retransmit_timeout( ssl ); ssl_set_timer( ssl, ssl->handshake->retransmit_timeout ); - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) { ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_FINISHED; - } - else + } else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -2701,91 +2516,79 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write record" ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { ; /* Skip special handshake treatment when resending */ - } - else + } else #endif - if( ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { - out_msg_type = ssl->out_msg[0]; + if ( ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { + out_msg_type = ssl->out_msg[0]; - if( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST && - ssl->handshake == NULL ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST && + ssl->handshake == NULL ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - ssl->out_msg[1] = (unsigned char)( ( len - 4 ) >> 16 ); - ssl->out_msg[2] = (unsigned char)( ( len - 4 ) >> 8 ); - ssl->out_msg[3] = (unsigned char)( ( len - 4 ) ); + ssl->out_msg[1] = (unsigned char)( ( len - 4 ) >> 16 ); + ssl->out_msg[2] = (unsigned char)( ( len - 4 ) >> 8 ); + ssl->out_msg[3] = (unsigned char)( ( len - 4 ) ); - /* - * DTLS has additional fields in the Handshake layer, - * between the length field and the actual payload: - * uint16 message_seq; - * uint24 fragment_offset; - * uint24 fragment_length; - */ + /* + * DTLS has additional fields in the Handshake layer, + * between the length field and the actual payload: + * uint16 message_seq; + * uint24 fragment_offset; + * uint24 fragment_length; + */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - /* Make room for the additional DTLS fields */ - memmove( ssl->out_msg + 12, ssl->out_msg + 4, len - 4 ); - ssl->out_msglen += 8; - len += 8; + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + /* Make room for the additional DTLS fields */ + memmove( ssl->out_msg + 12, ssl->out_msg + 4, len - 4 ); + ssl->out_msglen += 8; + len += 8; - /* Write message_seq and update it, except for HelloRequest */ - if( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) - { - ssl->out_msg[4] = ( ssl->handshake->out_msg_seq >> 8 ) & 0xFF; - ssl->out_msg[5] = ( ssl->handshake->out_msg_seq ) & 0xFF; - ++( ssl->handshake->out_msg_seq ); - } - else - { - ssl->out_msg[4] = 0; - ssl->out_msg[5] = 0; - } + /* Write message_seq and update it, except for HelloRequest */ + if ( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) { + ssl->out_msg[4] = ( ssl->handshake->out_msg_seq >> 8 ) & 0xFF; + ssl->out_msg[5] = ( ssl->handshake->out_msg_seq ) & 0xFF; + ++( ssl->handshake->out_msg_seq ); + } else { + ssl->out_msg[4] = 0; + ssl->out_msg[5] = 0; + } - /* We don't fragment, so frag_offset = 0 and frag_len = len */ - memset( ssl->out_msg + 6, 0x00, 3 ); - memcpy( ssl->out_msg + 9, ssl->out_msg + 1, 3 ); - } + /* We don't fragment, so frag_offset = 0 and frag_len = len */ + memset( ssl->out_msg + 6, 0x00, 3 ); + memcpy( ssl->out_msg + 9, ssl->out_msg + 1, 3 ); + } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - if( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) - ssl->handshake->update_checksum( ssl, ssl->out_msg, len ); - } + if ( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) + ssl->handshake->update_checksum( ssl, ssl->out_msg, len ); + } /* Save handshake and CCS messages for resending */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL && - ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING && - ( ssl->out_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC || - ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) ) - { - if( ( ret = ssl_flight_append( ssl ) ) != 0 ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL && + ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING && + ( ssl->out_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC || + ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) ) { + if ( ( ret = ssl_flight_append( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_flight_append", ret ); - return( ret ); + return ( ret ); } } #endif #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->transform_out != NULL && - ssl->session_out->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { - if( ( ret = ssl_compress_buf( ssl ) ) != 0 ) - { + if ( ssl->transform_out != NULL && + ssl->session_out->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) { + if ( ( ret = ssl_compress_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_compress_buf", ret ); - return( ret ); + return ( ret ); } len = ssl->out_msglen; @@ -2793,36 +2596,31 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ) #endif /*MBEDTLS_ZLIB_SUPPORT */ #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_write != NULL ) - { + if ( mbedtls_ssl_hw_record_write != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_write()" ) ); ret = mbedtls_ssl_hw_record_write( ssl ); - if( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) - { + if ( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_write", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } - if( ret == 0 ) + if ( ret == 0 ) done = 1; } #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ - if( !done ) - { + if ( !done ) { ssl->out_hdr[0] = (unsigned char) ssl->out_msgtype; mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, ssl->out_hdr + 1 ); + ssl->conf->transport, ssl->out_hdr + 1 ); ssl->out_len[0] = (unsigned char)( len >> 8 ); ssl->out_len[1] = (unsigned char)( len ); - if( ssl->transform_out != NULL ) - { - if( ( ret = ssl_encrypt_buf( ssl ) ) != 0 ) - { + if ( ssl->transform_out != NULL ) { + if ( ( ret = ssl_encrypt_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_encrypt_buf", ret ); - return( ret ); + return ( ret ); } len = ssl->out_msglen; @@ -2833,23 +2631,22 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ) ssl->out_left = mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen; MBEDTLS_SSL_DEBUG_MSG( 3, ( "output record: msgtype = %d, " - "version = [%d:%d], msglen = %d", - ssl->out_hdr[0], ssl->out_hdr[1], ssl->out_hdr[2], - ( ssl->out_len[0] << 8 ) | ssl->out_len[1] ) ); + "version = [%d:%d], msglen = %d", + ssl->out_hdr[0], ssl->out_hdr[1], ssl->out_hdr[2], + ( ssl->out_len[0] << 8 ) | ssl->out_len[1] ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "output record sent to network", - ssl->out_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen ); + ssl->out_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen ); } - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_flush_output", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write record" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -2861,14 +2658,12 @@ static void ssl_bitmask_set( unsigned char *mask, size_t offset, size_t len ) unsigned int start_bits, end_bits; start_bits = 8 - ( offset % 8 ); - if( start_bits != 8 ) - { + if ( start_bits != 8 ) { size_t first_byte_idx = offset / 8; /* Special case */ - if( len <= start_bits ) - { - for( ; len != 0; len-- ) + if ( len <= start_bits ) { + for ( ; len != 0; len-- ) mask[first_byte_idx] |= 1 << ( start_bits - len ); /* Avoid potential issues with offset or len becoming invalid */ @@ -2878,18 +2673,17 @@ static void ssl_bitmask_set( unsigned char *mask, size_t offset, size_t len ) offset += start_bits; /* Now offset % 8 == 0 */ len -= start_bits; - for( ; start_bits != 0; start_bits-- ) + for ( ; start_bits != 0; start_bits-- ) mask[first_byte_idx] |= 1 << ( start_bits - 1 ); } end_bits = len % 8; - if( end_bits != 0 ) - { + if ( end_bits != 0 ) { size_t last_byte_idx = ( offset + len ) / 8; len -= end_bits; /* Now len % 8 == 0 */ - for( ; end_bits != 0; end_bits-- ) + for ( ; end_bits != 0; end_bits-- ) mask[last_byte_idx] |= 1 << ( 8 - end_bits ); } @@ -2903,15 +2697,15 @@ static int ssl_bitmask_check( unsigned char *mask, size_t len ) { size_t i; - for( i = 0; i < len / 8; i++ ) - if( mask[i] != 0xFF ) - return( -1 ); + for ( i = 0; i < len / 8; i++ ) + if ( mask[i] != 0xFF ) + return ( -1 ); - for( i = 0; i < len % 8; i++ ) - if( ( mask[len / 8] & ( 1 << ( 7 - i ) ) ) == 0 ) - return( -1 ); + for ( i = 0; i < len % 8; i++ ) + if ( ( mask[len / 8] & ( 1 << ( 7 - i ) ) ) == 0 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } /* @@ -2928,36 +2722,32 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) size_t frag_len, frag_off; size_t msg_len = ssl->in_hslen - 12; /* Without headers */ - if( ssl->handshake == NULL ) - { + if ( ssl->handshake == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "not supported outside handshake (for now)" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } /* * For first fragment, check size and allocate buffer */ - if( ssl->handshake->hs_msg == NULL ) - { + if ( ssl->handshake->hs_msg == NULL ) { size_t alloc_len; MBEDTLS_SSL_DEBUG_MSG( 2, ( "initialize reassembly, total length = %d", - msg_len ) ); + msg_len ) ); - if( ssl->in_hslen > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->in_hslen > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake message too large" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } /* The bitmask needs one bit per byte of message excluding header */ alloc_len = 12 + msg_len + msg_len / 8 + ( msg_len % 8 != 0 ); ssl->handshake->hs_msg = mbedtls_calloc( 1, alloc_len ); - if( ssl->handshake->hs_msg == NULL ) - { + if ( ssl->handshake->hs_msg == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc failed (%d bytes)", alloc_len ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } /* Prepare final header: copy msg_type, length and message_seq, @@ -2966,14 +2756,11 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) memset( ssl->handshake->hs_msg + 6, 0, 3 ); memcpy( ssl->handshake->hs_msg + 9, ssl->handshake->hs_msg + 1, 3 ); - } - else - { + } else { /* Make sure msg_type and length are consistent */ - if( memcmp( ssl->handshake->hs_msg, ssl->in_msg, 4 ) != 0 ) - { + if ( memcmp( ssl->handshake->hs_msg, ssl->in_msg, 4 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "fragment header mismatch" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } } @@ -2985,27 +2772,25 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) */ frag_off = ( ssl->in_msg[6] << 16 ) | ( ssl->in_msg[7] << 8 ) | - ssl->in_msg[8]; + ssl->in_msg[8]; frag_len = ( ssl->in_msg[9] << 16 ) | ( ssl->in_msg[10] << 8 ) | - ssl->in_msg[11]; + ssl->in_msg[11]; - if( frag_off + frag_len > msg_len ) - { + if ( frag_off + frag_len > msg_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid fragment offset/len: %d + %d > %d", - frag_off, frag_len, msg_len ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + frag_off, frag_len, msg_len ) ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - if( frag_len + 12 > ssl->in_msglen ) - { + if ( frag_len + 12 > ssl->in_msglen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid fragment length: %d + 12 > %d", - frag_len, ssl->in_msglen ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + frag_len, ssl->in_msglen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "adding fragment, offset = %d, length = %d", - frag_off, frag_len ) ); + frag_off, frag_len ) ); memcpy( msg + frag_off, ssl->in_msg + 12, frag_len ); ssl_bitmask_set( bitmask, frag_off, frag_len ); @@ -3014,27 +2799,24 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) * Do we have the complete message by now? * If yes, finalize it, else ask to read the next record. */ - if( ssl_bitmask_check( bitmask, msg_len ) != 0 ) - { + if ( ssl_bitmask_check( bitmask, msg_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "message is not complete yet" ) ); - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake message completed" ) ); - if( frag_len + 12 < ssl->in_msglen ) - { + if ( frag_len + 12 < ssl->in_msglen ) { /* * We'got more handshake messages in the same record. * This case is not handled now because no know implementation does * that and it's hard to test, so we prefer to fail cleanly for now. */ MBEDTLS_SSL_DEBUG_MSG( 1, ( "last fragment not alone in its record" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } - if( ssl->in_left > ssl->next_record_offset ) - { + if ( ssl->in_left > ssl->next_record_offset ) { /* * We've got more data in the buffer after the current record, * that we don't want to overwrite. Move it before writing the @@ -3048,11 +2830,10 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) ssl->next_record_offset = new_remain - ssl->in_hdr; ssl->in_left = ssl->next_record_offset + remain_len; - if( ssl->in_left > MBEDTLS_SSL_BUFFER_LEN - - (size_t)( ssl->in_hdr - ssl->in_buf ) ) - { + if ( ssl->in_left > MBEDTLS_SSL_BUFFER_LEN - + (size_t)( ssl->in_hdr - ssl->in_buf ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "reassembled message too large for buffer" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } memmove( new_remain, cur_remain, remain_len ); @@ -3064,111 +2845,98 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) ssl->handshake->hs_msg = NULL; MBEDTLS_SSL_DEBUG_BUF( 3, "reassembled handshake message", - ssl->in_msg, ssl->in_hslen ); + ssl->in_msg, ssl->in_hslen ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ int mbedtls_ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ) { - if( ssl->in_msglen < mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( ssl->in_msglen < mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake message too short: %d", - ssl->in_msglen ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + ssl->in_msglen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } ssl->in_hslen = mbedtls_ssl_hs_hdr_len( ssl ) + ( - ( ssl->in_msg[1] << 16 ) | - ( ssl->in_msg[2] << 8 ) | - ssl->in_msg[3] ); + ( ssl->in_msg[1] << 16 ) | + ( ssl->in_msg[2] << 8 ) | + ssl->in_msg[3] ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "handshake message: msglen =" - " %d, type = %d, hslen = %d", - ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) ); + " %d, type = %d, hslen = %d", + ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { int ret; unsigned int recv_msg_seq = ( ssl->in_msg[4] << 8 ) | ssl->in_msg[5]; /* ssl->handshake is NULL when receiving ClientHello for renego */ - if( ssl->handshake != NULL && - recv_msg_seq != ssl->handshake->in_msg_seq ) - { + if ( ssl->handshake != NULL && + recv_msg_seq != ssl->handshake->in_msg_seq ) { /* Retransmit only on last message from previous flight, to avoid * too many retransmissions. * Besides, No sane server ever retransmits HelloVerifyRequest */ - if( recv_msg_seq == ssl->handshake->in_flight_start_seq - 1 && - ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) - { + if ( recv_msg_seq == ssl->handshake->in_flight_start_seq - 1 && + ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received message from last flight, " - "message_seq = %d, start_of_flight = %d", - recv_msg_seq, - ssl->handshake->in_flight_start_seq ) ); + "message_seq = %d, start_of_flight = %d", + recv_msg_seq, + ssl->handshake->in_flight_start_seq ) ); - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_resend", ret ); - return( ret ); + return ( ret ); } - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 2, ( "dropping out-of-sequence message: " - "message_seq = %d, expected = %d", - recv_msg_seq, - ssl->handshake->in_msg_seq ) ); + "message_seq = %d, expected = %d", + recv_msg_seq, + ssl->handshake->in_msg_seq ) ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } /* Wait until message completion to increment in_msg_seq */ /* Reassemble if current message is fragmented or reassembly is * already in progress */ - if( ssl->in_msglen < ssl->in_hslen || - memcmp( ssl->in_msg + 6, "\0\0\0", 3 ) != 0 || - memcmp( ssl->in_msg + 9, ssl->in_msg + 1, 3 ) != 0 || - ( ssl->handshake != NULL && ssl->handshake->hs_msg != NULL ) ) - { + if ( ssl->in_msglen < ssl->in_hslen || + memcmp( ssl->in_msg + 6, "\0\0\0", 3 ) != 0 || + memcmp( ssl->in_msg + 9, ssl->in_msg + 1, 3 ) != 0 || + ( ssl->handshake != NULL && ssl->handshake->hs_msg != NULL ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "found fragmented DTLS handshake message" ) ); - if( ( ret = ssl_reassemble_dtls_handshake( ssl ) ) != 0 ) - { + if ( ( ret = ssl_reassemble_dtls_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_reassemble_dtls_handshake", ret ); - return( ret ); + return ( ret ); } } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ - /* With TLS we don't handle fragmentation (for now) */ - if( ssl->in_msglen < ssl->in_hslen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "TLS handshake fragmentation not supported" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); - } + /* With TLS we don't handle fragmentation (for now) */ + if ( ssl->in_msglen < ssl->in_hslen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "TLS handshake fragmentation not supported" ) ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + } - return( 0 ); + return ( 0 ); } void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl ) { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER && - ssl->handshake != NULL ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER && + ssl->handshake != NULL ) { ssl->handshake->update_checksum( ssl, ssl->in_msg, ssl->in_hslen ); } /* Handshake message is complete, increment counter */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL ) { ssl->handshake->in_msg_seq++; } #endif @@ -3193,12 +2961,12 @@ static void ssl_dtls_replay_reset( mbedtls_ssl_context *ssl ) static inline uint64_t ssl_load_six_bytes( unsigned char *buf ) { - return( ( (uint64_t) buf[0] << 40 ) | - ( (uint64_t) buf[1] << 32 ) | - ( (uint64_t) buf[2] << 24 ) | - ( (uint64_t) buf[3] << 16 ) | - ( (uint64_t) buf[4] << 8 ) | - ( (uint64_t) buf[5] ) ); + return ( ( (uint64_t) buf[0] << 40 ) | + ( (uint64_t) buf[1] << 32 ) | + ( (uint64_t) buf[2] << 24 ) | + ( (uint64_t) buf[3] << 16 ) | + ( (uint64_t) buf[4] << 8 ) | + ( (uint64_t) buf[5] ) ); } /* @@ -3209,21 +2977,21 @@ int mbedtls_ssl_dtls_replay_check( mbedtls_ssl_context *ssl ) uint64_t rec_seqnum = ssl_load_six_bytes( ssl->in_ctr + 2 ); uint64_t bit; - if( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) - return( 0 ); + if ( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) + return ( 0 ); - if( rec_seqnum > ssl->in_window_top ) - return( 0 ); + if ( rec_seqnum > ssl->in_window_top ) + return ( 0 ); bit = ssl->in_window_top - rec_seqnum; - if( bit >= 64 ) - return( -1 ); + if ( bit >= 64 ) + return ( -1 ); - if( ( ssl->in_window & ( (uint64_t) 1 << bit ) ) != 0 ) - return( -1 ); + if ( ( ssl->in_window & ( (uint64_t) 1 << bit ) ) != 0 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } /* @@ -3233,30 +3001,26 @@ void mbedtls_ssl_dtls_replay_update( mbedtls_ssl_context *ssl ) { uint64_t rec_seqnum = ssl_load_six_bytes( ssl->in_ctr + 2 ); - if( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) + if ( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) return; - if( rec_seqnum > ssl->in_window_top ) - { + if ( rec_seqnum > ssl->in_window_top ) { /* Update window_top and the contents of the window */ uint64_t shift = rec_seqnum - ssl->in_window_top; - if( shift >= 64 ) + if ( shift >= 64 ) ssl->in_window = 1; - else - { + else { ssl->in_window <<= shift; ssl->in_window |= 1; } ssl->in_window_top = rec_seqnum; - } - else - { + } else { /* Mark that number as seen in the current window */ uint64_t bit = ssl->in_window_top - rec_seqnum; - if( bit < 64 ) /* Always true, but be extra sure */ + if ( bit < 64 ) /* Always true, but be extra sure */ ssl->in_window |= (uint64_t) 1 << bit; } } @@ -3278,18 +3042,18 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ); * - otherwise return a specific error code */ static int ssl_check_dtls_clihlo_cookie( - mbedtls_ssl_cookie_write_t *f_cookie_write, - mbedtls_ssl_cookie_check_t *f_cookie_check, - void *p_cookie, - const unsigned char *cli_id, size_t cli_id_len, - const unsigned char *in, size_t in_len, - unsigned char *obuf, size_t buf_len, size_t *olen ) + mbedtls_ssl_cookie_write_t *f_cookie_write, + mbedtls_ssl_cookie_check_t *f_cookie_check, + void *p_cookie, + const unsigned char *cli_id, size_t cli_id_len, + const unsigned char *in, size_t in_len, + unsigned char *obuf, size_t buf_len, size_t *olen ) { size_t sid_len, cookie_len; unsigned char *p; - if( f_cookie_write == NULL || f_cookie_check == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( f_cookie_write == NULL || f_cookie_check == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* * Structure of ClientHello with record and handshake headers, @@ -3317,27 +3081,25 @@ static int ssl_check_dtls_clihlo_cookie( * * Minimum length is 61 bytes. */ - if( in_len < 61 || - in[0] != MBEDTLS_SSL_MSG_HANDSHAKE || - in[3] != 0 || in[4] != 0 || - in[19] != 0 || in[20] != 0 || in[21] != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( in_len < 61 || + in[0] != MBEDTLS_SSL_MSG_HANDSHAKE || + in[3] != 0 || in[4] != 0 || + in[19] != 0 || in[20] != 0 || in[21] != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } sid_len = in[59]; - if( sid_len > in_len - 61 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( sid_len > in_len - 61 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); cookie_len = in[60 + sid_len]; - if( cookie_len > in_len - 60 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( cookie_len > in_len - 60 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); - if( f_cookie_check( p_cookie, in + sid_len + 61, cookie_len, - cli_id, cli_id_len ) == 0 ) - { + if ( f_cookie_check( p_cookie, in + sid_len + 61, cookie_len, + cli_id, cli_id_len ) == 0 ) { /* Valid cookie */ - return( 0 ); + return ( 0 ); } /* @@ -3360,8 +3122,8 @@ static int ssl_check_dtls_clihlo_cookie( * * Minimum length is 28. */ - if( buf_len < 28 ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( buf_len < 28 ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); /* Copy most fields and adapt others */ memcpy( obuf, in, 25 ); @@ -3371,10 +3133,9 @@ static int ssl_check_dtls_clihlo_cookie( /* Generate and write actual cookie */ p = obuf + 28; - if( f_cookie_write( p_cookie, - &p, obuf + buf_len, cli_id, cli_id_len ) != 0 ) - { - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( f_cookie_write( p_cookie, + &p, obuf + buf_len, cli_id, cli_id_len ) != 0 ) { + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } *olen = p - obuf; @@ -3389,7 +3150,7 @@ static int ssl_check_dtls_clihlo_cookie( obuf[11] = (unsigned char)( ( *olen - 13 ) >> 8 ); obuf[12] = (unsigned char)( ( *olen - 13 ) ); - return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); } /* @@ -3417,38 +3178,35 @@ static int ssl_handle_possible_reconnect( mbedtls_ssl_context *ssl ) size_t len; ret = ssl_check_dtls_clihlo_cookie( - ssl->conf->f_cookie_write, - ssl->conf->f_cookie_check, - ssl->conf->p_cookie, - ssl->cli_id, ssl->cli_id_len, - ssl->in_buf, ssl->in_left, - ssl->out_buf, MBEDTLS_SSL_MAX_CONTENT_LEN, &len ); + ssl->conf->f_cookie_write, + ssl->conf->f_cookie_check, + ssl->conf->p_cookie, + ssl->cli_id, ssl->cli_id_len, + ssl->in_buf, ssl->in_left, + ssl->out_buf, MBEDTLS_SSL_MAX_CONTENT_LEN, &len ); MBEDTLS_SSL_DEBUG_RET( 2, "ssl_check_dtls_clihlo_cookie", ret ); - if( ret == MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ) - { + if ( ret == MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ) { /* Dont check write errors as we can't do anything here. * If the error is permanent we'll catch it later, * if it's not, then hopefully it'll work next time. */ (void) ssl->f_send( ssl->p_bio, ssl->out_buf, len ); - return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); } - if( ret == 0 ) - { + if ( ret == 0 ) { /* Got a valid cookie, partially reset context */ - if( ( ret = ssl_session_reset_int( ssl, 1 ) ) != 0 ) - { + if ( ( ret = ssl_session_reset_int( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "reset", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_CLIENT_RECONNECT ); + return ( MBEDTLS_ERR_SSL_CLIENT_RECONNECT ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE && MBEDTLS_SSL_SRV_C */ @@ -3483,73 +3241,62 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) mbedtls_ssl_read_version( &major_ver, &minor_ver, ssl->conf->transport, ssl->in_hdr + 1 ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "input record: msgtype = %d, " - "version = [%d:%d], msglen = %d", - ssl->in_msgtype, - major_ver, minor_ver, ssl->in_msglen ) ); + "version = [%d:%d], msglen = %d", + ssl->in_msgtype, + major_ver, minor_ver, ssl->in_msglen ) ); /* Check record type */ - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msgtype != MBEDTLS_SSL_MSG_ALERT && - ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && - ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msgtype != MBEDTLS_SSL_MSG_ALERT && + ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && + ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "unknown record type" ) ); - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ) ) != 0 ) { + return ( ret ); } - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } /* Check version */ - if( major_ver != ssl->major_ver ) - { + if ( major_ver != ssl->major_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "major version mismatch" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - if( minor_ver > ssl->conf->max_minor_ver ) - { + if ( minor_ver > ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "minor version mismatch" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } /* Check length against the size of our buffer */ - if( ssl->in_msglen > MBEDTLS_SSL_BUFFER_LEN - - (size_t)( ssl->in_msg - ssl->in_buf ) ) - { + if ( ssl->in_msglen > MBEDTLS_SSL_BUFFER_LEN + - (size_t)( ssl->in_msg - ssl->in_buf ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } /* Check length against bounds of the current transform and version */ - if( ssl->transform_in == NULL ) - { - if( ssl->in_msglen < 1 || - ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->transform_in == NULL ) { + if ( ssl->in_msglen < 1 || + ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - } - else - { - if( ssl->in_msglen < ssl->transform_in->minlen ) - { + } else { + if ( ssl->in_msglen < ssl->transform_in->minlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && - ssl->in_msglen > ssl->transform_in->minlen + MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && + ssl->in_msglen > ssl->transform_in->minlen + MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } #endif #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ @@ -3557,12 +3304,11 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) /* * TLS encrypted messages can have up to 256 bytes of padding */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 && - ssl->in_msglen > ssl->transform_in->minlen + - MBEDTLS_SSL_MAX_CONTENT_LEN + 256 ) - { + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 && + ssl->in_msglen > ssl->transform_in->minlen + + MBEDTLS_SSL_MAX_CONTENT_LEN + 256 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } #endif } @@ -3574,36 +3320,32 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) * version, length) are sane. */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { unsigned int rec_epoch = ( ssl->in_ctr[0] << 8 ) | ssl->in_ctr[1]; /* Drop unexpected ChangeCipherSpec messages */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && - ssl->state != MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC && - ssl->state != MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && + ssl->state != MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC && + ssl->state != MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "dropping unexpected ChangeCipherSpec" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } /* Drop unexpected ApplicationData records, * except at the beginning of renegotiations */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA && - ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA && + ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER #if defined(MBEDTLS_SSL_RENEGOTIATION) - && ! ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->state == MBEDTLS_SSL_SERVER_HELLO ) + && ! ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->state == MBEDTLS_SSL_SERVER_HELLO ) #endif - ) - { + ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "dropping unexpected ApplicationData" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } /* Check epoch (and sequence number) with DTLS */ - if( rec_epoch != ssl->in_epoch ) - { + if ( rec_epoch != ssl->in_epoch ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "record from another epoch: " "expected %d, received %d", ssl->in_epoch, rec_epoch ) ); @@ -3615,35 +3357,32 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) * have an active transform (possibly iv_len != 0), so use the * fact that the record header len is 13 instead. */ - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER && - rec_epoch == 0 && - ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_left > 13 && - ssl->in_buf[13] == MBEDTLS_SSL_HS_CLIENT_HELLO ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER && + rec_epoch == 0 && + ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_left > 13 && + ssl->in_buf[13] == MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "possible client reconnect " "from the same port" ) ); - return( ssl_handle_possible_reconnect( ssl ) ); - } - else + return ( ssl_handle_possible_reconnect( ssl ) ); + } else #endif /* MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE && MBEDTLS_SSL_SRV_C */ - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) /* Replay detection only works for the current epoch */ - if( rec_epoch == ssl->in_epoch && - mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) - { + if ( rec_epoch == ssl->in_epoch && + mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "replayed record" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } #endif } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - return( 0 ); + return ( 0 ); } /* @@ -3654,62 +3393,54 @@ static int ssl_prepare_record_content( mbedtls_ssl_context *ssl ) int ret, done = 0; MBEDTLS_SSL_DEBUG_BUF( 4, "input record from network", - ssl->in_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ); + ssl->in_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ); #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_read != NULL ) - { + if ( mbedtls_ssl_hw_record_read != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_read()" ) ); ret = mbedtls_ssl_hw_record_read( ssl ); - if( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) - { + if ( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_read", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } - if( ret == 0 ) + if ( ret == 0 ) done = 1; } #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ - if( !done && ssl->transform_in != NULL ) - { - if( ( ret = ssl_decrypt_buf( ssl ) ) != 0 ) - { + if ( !done && ssl->transform_in != NULL ) { + if ( ( ret = ssl_decrypt_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_decrypt_buf", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_BUF( 4, "input payload after decrypt", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); - if( ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } } #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->transform_in != NULL && - ssl->session_in->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { - if( ( ret = ssl_decompress_buf( ssl ) ) != 0 ) - { + if ( ssl->transform_in != NULL && + ssl->session_in->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) { + if ( ( ret = ssl_decompress_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_decompress_buf", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_ZLIB_SUPPORT */ #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { mbedtls_ssl_dtls_replay_update( ssl ); } #endif - return( 0 ); + return ( 0 ); } static void ssl_handshake_wrapup_free_hs_transform( mbedtls_ssl_context *ssl ); @@ -3729,38 +3460,34 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) do { - if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret ); - return( ret ); + return ( ret ); } ret = mbedtls_ssl_handle_message_type( ssl ); - } while( MBEDTLS_ERR_SSL_NON_FATAL == ret ); + } while ( MBEDTLS_ERR_SSL_NON_FATAL == ret ); - if( 0 != ret ) - { + if ( 0 != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { mbedtls_ssl_update_handshake_status( ssl ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read record" ) ); - return( 0 ); + return ( 0 ); } int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) { int ret; - if( ssl->in_hslen != 0 && ssl->in_hslen < ssl->in_msglen ) - { + if ( ssl->in_hslen != 0 && ssl->in_hslen < ssl->in_msglen ) { /* * Get next Handshake message in the current record */ @@ -3770,9 +3497,9 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) ssl->in_msglen ); MBEDTLS_SSL_DEBUG_BUF( 4, "remaining content in record", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); - return( 0 ); + return ( 0 ); } ssl->in_hslen = 0; @@ -3784,29 +3511,23 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) read_record_header: #endif - if( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } - if( ( ret = ssl_parse_record_header( ssl ) ) != 0 ) - { + if ( ( ret = ssl_parse_record_header( ssl ) ) != 0 ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ret != MBEDTLS_ERR_SSL_CLIENT_RECONNECT ) - { - if( ret == MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ret != MBEDTLS_ERR_SSL_CLIENT_RECONNECT ) { + if ( ret == MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ) { /* Skip unexpected record (but not whole datagram) */ ssl->next_record_offset = ssl->in_msglen - + mbedtls_ssl_hdr_len( ssl ); + + mbedtls_ssl_hdr_len( ssl ); MBEDTLS_SSL_DEBUG_MSG( 1, ( "discarding unexpected record " "(header)" ) ); - } - else - { + } else { /* Skip invalid record and the rest of the datagram */ ssl->next_record_offset = 0; ssl->in_left = 0; @@ -3819,59 +3540,52 @@ read_record_header: goto read_record_header; } #endif - return( ret ); + return ( ret ); } /* * Read and optionally decrypt the message contents */ - if( ( ret = mbedtls_ssl_fetch_input( ssl, - mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, + mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } /* Done reading this record, get ready for the next one */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) ssl->next_record_offset = ssl->in_msglen + mbedtls_ssl_hdr_len( ssl ); else #endif ssl->in_left = 0; - if( ( ret = ssl_prepare_record_content( ssl ) ) != 0 ) - { + if ( ( ret = ssl_prepare_record_content( ssl ) ) != 0 ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { /* Silently discard invalid records */ - if( ret == MBEDTLS_ERR_SSL_INVALID_RECORD || - ret == MBEDTLS_ERR_SSL_INVALID_MAC ) - { + if ( ret == MBEDTLS_ERR_SSL_INVALID_RECORD || + ret == MBEDTLS_ERR_SSL_INVALID_MAC ) { /* Except when waiting for Finished as a bad mac here * probably means something went wrong in the handshake * (eg wrong psk used, mitm downgrade attempt, etc.) */ - if( ssl->state == MBEDTLS_SSL_CLIENT_FINISHED || - ssl->state == MBEDTLS_SSL_SERVER_FINISHED ) - { + if ( ssl->state == MBEDTLS_SSL_CLIENT_FINISHED || + ssl->state == MBEDTLS_SSL_SERVER_FINISHED ) { #if defined(MBEDTLS_SSL_ALL_ALERT_MESSAGES) - if( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) - { + if ( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) { mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); } #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) - if( ssl->conf->badmac_limit != 0 && - ++ssl->badmac_seen >= ssl->conf->badmac_limit ) - { + if ( ssl->conf->badmac_limit != 0 && + ++ssl->badmac_seen >= ssl->conf->badmac_limit ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "too many records with bad MAC" ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } #endif @@ -3879,21 +3593,19 @@ read_record_header: goto read_record_header; } - return( ret ); - } - else + return ( ret ); + } else #endif { /* Error out (and send alert) on invalid records */ #if defined(MBEDTLS_SSL_ALL_ALERT_MESSAGES) - if( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) - { + if ( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) { mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); } #endif - return( ret ); + return ( ret ); } } @@ -3913,31 +3625,26 @@ read_record_header: * being mistaken for an ancient message in the current handshake. */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL && - ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL && + ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received retransmit of last flight" ) ); - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_resend", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); - } - else - { + return ( MBEDTLS_ERR_SSL_WANT_READ ); + } else { ssl_handshake_wrapup_free_hs_transform( ssl ); } } #endif - return( 0 ); + return ( 0 ); } int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) @@ -3947,55 +3654,48 @@ int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) /* * Handle particular types of records */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { - if( ( ret = mbedtls_ssl_prepare_handshake_record( ssl ) ) != 0 ) - { - return( ret ); + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { + if ( ( ret = mbedtls_ssl_prepare_handshake_record( ssl ) ) != 0 ) { + return ( ret ); } } - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "got an alert message, type: [%d:%d]", - ssl->in_msg[0], ssl->in_msg[1] ) ); + ssl->in_msg[0], ssl->in_msg[1] ) ); /* * Ignore non-fatal alerts, except close_notify and no_renegotiation */ - if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_FATAL ) - { + if ( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_FATAL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "is a fatal alert message (msg %d)", - ssl->in_msg[1] ) ); - return( MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE ); + ssl->in_msg[1] ) ); + return ( MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE ); } - if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) - { + if ( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "is a close notify message" ) ); - return( MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ); + return ( MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ); } #if defined(MBEDTLS_SSL_RENEGOTIATION_ENABLED) - if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) - { + if ( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "is a SSLv3 no_cert" ) ); /* Will be handled when trying to parse ServerHello */ - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_SSL_PROTO_SSL3) && defined(MBEDTLS_SSL_SRV_C) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && - ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && + ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "is a SSLv3 no_cert" ) ); /* Will be handled in mbedtls_ssl_parse_certificate() */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_SSL3 && MBEDTLS_SSL_SRV_C */ @@ -4003,31 +3703,30 @@ int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) return MBEDTLS_ERR_SSL_NON_FATAL; } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ) { int ret; - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, - unsigned char level, - unsigned char message ) + unsigned char level, + unsigned char message ) { int ret; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> send alert message" ) ); @@ -4036,15 +3735,14 @@ int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, ssl->out_msg[0] = level; ssl->out_msg[1] = message; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= send alert message" ) ); - return( 0 ); + return ( 0 ); } /* @@ -4063,18 +3761,17 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) @@ -4083,18 +3780,17 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) @@ -4106,24 +3802,21 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - { - if( ssl->client_auth == 0 ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { + if ( ssl->client_auth == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -4131,9 +3824,8 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) * If using SSLv3 and got no cert, send an Alert message * (otherwise an empty Certificate message will be sent). */ - if( mbedtls_ssl_own_cert( ssl ) == NULL && - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( mbedtls_ssl_own_cert( ssl ) == NULL && + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->out_msglen = 2; ssl->out_msgtype = MBEDTLS_SSL_MSG_ALERT; ssl->out_msg[0] = MBEDTLS_SSL_ALERT_LEVEL_WARNING; @@ -4146,12 +3838,10 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) } #endif /* MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - { - if( mbedtls_ssl_own_cert( ssl ) == NULL ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) { + if ( mbedtls_ssl_own_cert( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no certificate to send" ) ); - return( MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED ); + return ( MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED ); } } #endif @@ -4170,22 +3860,22 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) i = 7; crt = mbedtls_ssl_own_cert( ssl ); - while( crt != NULL ) - { + while ( crt != NULL ) { n = crt->raw.len; - if( n > MBEDTLS_SSL_MAX_CONTENT_LEN - 3 - i ) - { + if ( n > MBEDTLS_SSL_MAX_CONTENT_LEN - 3 - i ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "certificate too large, %d > %d", - i + 3 + n, MBEDTLS_SSL_MAX_CONTENT_LEN ) ); - return( MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE ); + i + 3 + n, MBEDTLS_SSL_MAX_CONTENT_LEN ) ); + return ( MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE ); } ssl->out_msg[i ] = (unsigned char)( n >> 16 ); ssl->out_msg[i + 1] = (unsigned char)( n >> 8 ); ssl->out_msg[i + 2] = (unsigned char)( n ); - i += 3; memcpy( ssl->out_msg + i, crt->raw.p, n ); - i += n; crt = crt->next; + i += 3; + memcpy( ssl->out_msg + i, crt->raw.p, n ); + i += n; + crt = crt->next; } ssl->out_msg[4] = (unsigned char)( ( i - 7 ) >> 16 ); @@ -4202,15 +3892,14 @@ write_msg: ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate" ) ); - return( ret ); + return ( ret ); } int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) @@ -4222,44 +3911,40 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) + if ( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) authmode = ssl->handshake->sni_authmode; #endif - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - authmode == MBEDTLS_SSL_VERIFY_NONE ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + authmode == MBEDTLS_SSL_VERIFY_NONE ) { ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_SKIP_VERIFY; MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #endif - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } ssl->state++; @@ -4269,59 +3954,53 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) /* * Check if the client sent an empty certificate */ - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( ssl->in_msglen == 2 && - ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT && - ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( ssl->in_msglen == 2 && + ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT && + ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "SSLv3 client has no certificate" ) ); ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_MISSING; - if( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) - return( 0 ); + if ( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) + return ( 0 ); else - return( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); } } #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( ssl->in_hslen == 3 + mbedtls_ssl_hs_hdr_len( ssl ) && - ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE && - memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), "\0\0\0", 3 ) == 0 ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( ssl->in_hslen == 3 + mbedtls_ssl_hs_hdr_len( ssl ) && + ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE && + memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), "\0\0\0", 3 ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "TLSv1 client has no certificate" ) ); ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_MISSING; - if( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) - return( 0 ); + if ( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) + return ( 0 ); else - return( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); } } #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ #endif /* MBEDTLS_SSL_SRV_C */ - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE || - ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 3 + 3 ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE || + ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 3 + 3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } i = mbedtls_ssl_hs_hdr_len( ssl ); @@ -4329,58 +4008,51 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) /* * Same message structure as in mbedtls_ssl_write_certificate() */ - n = ( ssl->in_msg[i+1] << 8 ) | ssl->in_msg[i+2]; + n = ( ssl->in_msg[i + 1] << 8 ) | ssl->in_msg[i + 2]; - if( ssl->in_msg[i] != 0 || - ssl->in_hslen != n + 3 + mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( ssl->in_msg[i] != 0 || + ssl->in_hslen != n + 3 + mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } /* In case we tried to reuse a session but it failed */ - if( ssl->session_negotiate->peer_cert != NULL ) - { + if ( ssl->session_negotiate->peer_cert != NULL ) { mbedtls_x509_crt_free( ssl->session_negotiate->peer_cert ); mbedtls_free( ssl->session_negotiate->peer_cert ); } - if( ( ssl->session_negotiate->peer_cert = mbedtls_calloc( 1, - sizeof( mbedtls_x509_crt ) ) ) == NULL ) - { + if ( ( ssl->session_negotiate->peer_cert = mbedtls_calloc( 1, + sizeof( mbedtls_x509_crt ) ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", - sizeof( mbedtls_x509_crt ) ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + sizeof( mbedtls_x509_crt ) ) ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } mbedtls_x509_crt_init( ssl->session_negotiate->peer_cert ); i += 3; - while( i < ssl->in_hslen ) - { - if( ssl->in_msg[i] != 0 ) - { + while ( i < ssl->in_hslen ) { + if ( ssl->in_msg[i] != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } n = ( (unsigned int) ssl->in_msg[i + 1] << 8 ) | (unsigned int) ssl->in_msg[i + 2]; i += 3; - if( n < 128 || i + n > ssl->in_hslen ) - { + if ( n < 128 || i + n > ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } ret = mbedtls_x509_crt_parse_der( ssl->session_negotiate->peer_cert, - ssl->in_msg + i, n ); - if( 0 != ret && ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + MBEDTLS_ERR_OID_NOT_FOUND ) != ret ) - { + ssl->in_msg + i, n ); + if ( 0 != ret && ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + MBEDTLS_ERR_OID_NOT_FOUND ) != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, " mbedtls_x509_crt_parse_der", ret ); - return( ret ); + return ( ret ); } i += n; @@ -4393,64 +4065,56 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) * avoid "triple handshake" attack: https://secure-resumption.com/ */ #if defined(MBEDTLS_SSL_RENEGOTIATION) && defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { - if( ssl->session->peer_cert == NULL ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { + if ( ssl->session->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "new server cert during renegotiation" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - if( ssl->session->peer_cert->raw.len != - ssl->session_negotiate->peer_cert->raw.len || - memcmp( ssl->session->peer_cert->raw.p, - ssl->session_negotiate->peer_cert->raw.p, - ssl->session->peer_cert->raw.len ) != 0 ) - { + if ( ssl->session->peer_cert->raw.len != + ssl->session_negotiate->peer_cert->raw.len || + memcmp( ssl->session->peer_cert->raw.p, + ssl->session_negotiate->peer_cert->raw.p, + ssl->session->peer_cert->raw.len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server cert changed during renegotiation" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } } #endif /* MBEDTLS_SSL_RENEGOTIATION && MBEDTLS_SSL_CLI_C */ - if( authmode != MBEDTLS_SSL_VERIFY_NONE ) - { + if ( authmode != MBEDTLS_SSL_VERIFY_NONE ) { mbedtls_x509_crt *ca_chain; mbedtls_x509_crl *ca_crl; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_ca_chain != NULL ) - { + if ( ssl->handshake->sni_ca_chain != NULL ) { ca_chain = ssl->handshake->sni_ca_chain; ca_crl = ssl->handshake->sni_ca_crl; - } - else + } else #endif { ca_chain = ssl->conf->ca_chain; ca_crl = ssl->conf->ca_crl; } - if( ca_chain == NULL ) - { + if ( ca_chain == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no CA chain" ) ); - return( MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED ); + return ( MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED ); } /* * Main check: verify certificate */ ret = mbedtls_x509_crt_verify_with_profile( - ssl->session_negotiate->peer_cert, - ca_chain, ca_crl, - ssl->conf->cert_profile, - ssl->hostname, - &ssl->session_negotiate->verify_result, - ssl->conf->f_vrfy, ssl->conf->p_vrfy ); + ssl->session_negotiate->peer_cert, + ca_chain, ca_crl, + ssl->conf->cert_profile, + ssl->hostname, + &ssl->session_negotiate->verify_result, + ssl->conf->f_vrfy, ssl->conf->p_vrfy ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "x509_verify_cert", ret ); } @@ -4463,33 +4127,31 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) const mbedtls_pk_context *pk = &ssl->session_negotiate->peer_cert->pk; /* If certificate uses an EC key, make sure the curve is OK */ - if( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECKEY ) && - mbedtls_ssl_check_curve( ssl, mbedtls_pk_ec( *pk )->grp.id ) != 0 ) - { + if ( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECKEY ) && + mbedtls_ssl_check_curve( ssl, mbedtls_pk_ec( *pk )->grp.id ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate (EC key curve)" ) ); - if( ret == 0 ) + if ( ret == 0 ) ret = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE; } } #endif /* MBEDTLS_ECP_C */ - if( mbedtls_ssl_check_cert_usage( ssl->session_negotiate->peer_cert, - ciphersuite_info, - ! ssl->conf->endpoint, - &ssl->session_negotiate->verify_result ) != 0 ) - { + if ( mbedtls_ssl_check_cert_usage( ssl->session_negotiate->peer_cert, + ciphersuite_info, + ! ssl->conf->endpoint, + &ssl->session_negotiate->verify_result ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate (usage extensions)" ) ); - if( ret == 0 ) + if ( ret == 0 ) ret = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE; } - if( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) + if ( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) ret = 0; } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED !MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED @@ -4511,15 +4173,14 @@ int mbedtls_ssl_write_change_cipher_spec( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write change cipher spec" ) ); - return( 0 ); + return ( 0 ); } int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) @@ -4528,22 +4189,19 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse change cipher spec" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->in_msglen != 1 || ssl->in_msg[0] != 1 ) - { + if ( ssl->in_msglen != 1 || ssl->in_msg[0] != 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC ); } /* @@ -4555,41 +4213,34 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) ssl->session_in = ssl->session_negotiate; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) ssl_dtls_replay_reset( ssl ); #endif /* Increment epoch */ - if( ++ssl->in_epoch == 0 ) - { + if ( ++ssl->in_epoch == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "DTLS epoch would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ - memset( ssl->in_ctr, 0, 8 ); + memset( ssl->in_ctr, 0, 8 ); /* * Set the in_msg pointer to the correct location based on IV length */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { ssl->in_msg = ssl->in_iv + ssl->transform_negotiate->ivlen - ssl->transform_negotiate->fixed_ivlen; - } - else + } else ssl->in_msg = ssl->in_iv; #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_activate != NULL ) - { - if( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_INBOUND ) ) != 0 ) - { + if ( mbedtls_ssl_hw_record_activate != NULL ) { + if ( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_INBOUND ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_activate", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif @@ -4598,43 +4249,43 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse change cipher spec" ) ); - return( 0 ); + return ( 0 ); } void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl, - const mbedtls_ssl_ciphersuite_t *ciphersuite_info ) + const mbedtls_ssl_ciphersuite_t *ciphersuite_info ) { ((void) ciphersuite_info); #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) ssl->handshake->update_checksum = ssl_update_checksum_md5sha1; else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA512_C) - if( ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) - ssl->handshake->update_checksum = ssl_update_checksum_sha384; - else + if ( ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) + ssl->handshake->update_checksum = ssl_update_checksum_sha384; + else #endif #if defined(MBEDTLS_SHA256_C) - if( ciphersuite_info->mac != MBEDTLS_MD_SHA384 ) - ssl->handshake->update_checksum = ssl_update_checksum_sha256; - else + if ( ciphersuite_info->mac != MBEDTLS_MD_SHA384 ) + ssl->handshake->update_checksum = ssl_update_checksum_sha256; + else #endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return; - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return; + } } void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - mbedtls_md5_starts( &ssl->handshake->fin_md5 ); + mbedtls_md5_starts( &ssl->handshake->fin_md5 ); mbedtls_sha1_starts( &ssl->handshake->fin_sha1 ); #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) @@ -4652,7 +4303,7 @@ static void ssl_update_checksum_start( mbedtls_ssl_context *ssl, { #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - mbedtls_md5_update( &ssl->handshake->fin_md5 , buf, len ); + mbedtls_md5_update( &ssl->handshake->fin_md5, buf, len ); mbedtls_sha1_update( &ssl->handshake->fin_sha1, buf, len ); #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) @@ -4668,9 +4319,9 @@ static void ssl_update_checksum_start( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) static void ssl_update_checksum_md5sha1( mbedtls_ssl_context *ssl, - const unsigned char *buf, size_t len ) + const unsigned char *buf, size_t len ) { - mbedtls_md5_update( &ssl->handshake->fin_md5 , buf, len ); + mbedtls_md5_update( &ssl->handshake->fin_md5, buf, len ); mbedtls_sha1_update( &ssl->handshake->fin_sha1, buf, len ); } #endif @@ -4695,7 +4346,7 @@ static void ssl_update_checksum_sha384( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_PROTO_SSL3) static void ssl_calc_finished_ssl( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { const char *sender; mbedtls_md5_context md5; @@ -4706,7 +4357,7 @@ static void ssl_calc_finished_ssl( unsigned char sha1sum[20]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished ssl" ) ); @@ -4728,16 +4379,16 @@ static void ssl_calc_finished_ssl( #if !defined(MBEDTLS_MD5_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); + md5.state, sizeof( md5.state ) ); #endif #if !defined(MBEDTLS_SHA1_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); + sha1.state, sizeof( sha1.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) ? "CLNT" - : "SRVR"; + : "SRVR"; memset( padbuf, 0x36, 48 ); @@ -4761,7 +4412,7 @@ static void ssl_calc_finished_ssl( mbedtls_sha1_starts( &sha1 ); mbedtls_sha1_update( &sha1, session->master, 48 ); - mbedtls_sha1_update( &sha1, padbuf , 40 ); + mbedtls_sha1_update( &sha1, padbuf, 40 ); mbedtls_sha1_update( &sha1, sha1sum, 20 ); mbedtls_sha1_finish( &sha1, buf + 16 ); @@ -4780,7 +4431,7 @@ static void ssl_calc_finished_ssl( #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) static void ssl_calc_finished_tls( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { int len = 12; const char *sender; @@ -4789,7 +4440,7 @@ static void ssl_calc_finished_tls( unsigned char padbuf[36]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished tls" ) ); @@ -4808,12 +4459,12 @@ static void ssl_calc_finished_tls( #if !defined(MBEDTLS_MD5_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); + md5.state, sizeof( md5.state ) ); #endif #if !defined(MBEDTLS_SHA1_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); + sha1.state, sizeof( sha1.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) @@ -4840,7 +4491,7 @@ static void ssl_calc_finished_tls( #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) static void ssl_calc_finished_tls_sha256( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { int len = 12; const char *sender; @@ -4848,7 +4499,7 @@ static void ssl_calc_finished_tls_sha256( unsigned char padbuf[32]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; mbedtls_sha256_init( &sha256 ); @@ -4865,7 +4516,7 @@ static void ssl_calc_finished_tls_sha256( #if !defined(MBEDTLS_SHA256_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha2 state", (unsigned char *) - sha256.state, sizeof( sha256.state ) ); + sha256.state, sizeof( sha256.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) @@ -4889,7 +4540,7 @@ static void ssl_calc_finished_tls_sha256( #if defined(MBEDTLS_SHA512_C) static void ssl_calc_finished_tls_sha384( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { int len = 12; const char *sender; @@ -4897,7 +4548,7 @@ static void ssl_calc_finished_tls_sha384( unsigned char padbuf[48]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; mbedtls_sha512_init( &sha512 ); @@ -4914,7 +4565,7 @@ static void ssl_calc_finished_tls_sha384( #if !defined(MBEDTLS_SHA512_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha512 state", (unsigned char *) - sha512.state, sizeof( sha512.state ) ); + sha512.state, sizeof( sha512.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) @@ -4951,8 +4602,7 @@ static void ssl_handshake_wrapup_free_hs_transform( mbedtls_ssl_context *ssl ) /* * Free the previous transform and swith in the current one */ - if( ssl->transform ) - { + if ( ssl->transform ) { mbedtls_ssl_transform_free( ssl->transform ); mbedtls_free( ssl->transform ); } @@ -4969,8 +4619,7 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "=> handshake wrapup" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_DONE; ssl->renego_records_seen = 0; } @@ -4979,12 +4628,11 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) /* * Free the previous session and switch in the current one */ - if( ssl->session ) - { + if ( ssl->session ) { #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) /* RFC 7366 3.1: keep the EtM state */ ssl->session_negotiate->encrypt_then_mac = - ssl->session->encrypt_then_mac; + ssl->session->encrypt_then_mac; #endif mbedtls_ssl_session_free( ssl->session ); @@ -4996,26 +4644,23 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) /* * Add cache entry */ - if( ssl->conf->f_set_cache != NULL && - ssl->session->id_len != 0 && - resume == 0 ) - { - if( ssl->conf->f_set_cache( ssl->conf->p_cache, ssl->session ) != 0 ) + if ( ssl->conf->f_set_cache != NULL && + ssl->session->id_len != 0 && + resume == 0 ) { + if ( ssl->conf->f_set_cache( ssl->conf->p_cache, ssl->session ) != 0 ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "cache did not store session" ) ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->flight != NULL ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->flight != NULL ) { /* Cancel handshake timer */ ssl_set_timer( ssl, 0 ); /* Keep last flight around in case we need to resend it: * we need the handshake and transform structures for that */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip freeing handshake and transform" ) ); - } - else + } else #endif ssl_handshake_wrapup_free_hs_transform( ssl ); @@ -5033,12 +4678,10 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) /* * Set the out_msg pointer to the correct location based on IV length */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { ssl->out_msg = ssl->out_iv + ssl->transform_negotiate->ivlen - ssl->transform_negotiate->fixed_ivlen; - } - else + } else ssl->out_msg = ssl->out_iv; ssl->handshake->calc_finished( ssl, ssl->out_msg + 4, ssl->conf->endpoint ); @@ -5064,18 +4707,16 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) * In case of session resuming, invert the client and server * ChangeCipherSpec messages order. */ - if( ssl->handshake->resume != 0 ) - { + if ( ssl->handshake->resume != 0 ) { #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; #endif #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ssl->state = MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC; #endif - } - else + } else ssl->state++; /* @@ -5085,8 +4726,7 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "switching to new transform spec for outbound data" ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { unsigned char i; /* Remember current epoch settings for resending */ @@ -5097,49 +4737,44 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) memset( ssl->out_ctr + 2, 0, 6 ); /* Increment epoch */ - for( i = 2; i > 0; i-- ) - if( ++ssl->out_ctr[i - 1] != 0 ) + for ( i = 2; i > 0; i-- ) + if ( ++ssl->out_ctr[i - 1] != 0 ) break; /* The loop goes to its end iff the counter is wrapping */ - if( i == 0 ) - { + if ( i == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "DTLS epoch would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ - memset( ssl->out_ctr, 0, 8 ); + memset( ssl->out_ctr, 0, 8 ); ssl->transform_out = ssl->transform_negotiate; ssl->session_out = ssl->session_negotiate; #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_activate != NULL ) - { - if( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) - { + if ( mbedtls_ssl_hw_record_activate != NULL ) { + if ( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_activate", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write finished" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -5158,38 +4793,34 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) ssl->handshake->calc_finished( ssl, buf, ssl->conf->endpoint ^ 1 ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* There is currently no ciphersuite using another length with TLS 1.2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) hash_len = 36; else #endif hash_len = 12; - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_FINISHED || - ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + hash_len ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_FINISHED || + ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + hash_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); + return ( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); } - if( mbedtls_ssl_safer_memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), - buf, hash_len ) != 0 ) - { + if ( mbedtls_ssl_safer_memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), + buf, hash_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); + return ( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); } #if defined(MBEDTLS_SSL_RENEGOTIATION) @@ -5197,28 +4828,26 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) memcpy( ssl->peer_verify_data, buf, hash_len ); #endif - if( ssl->handshake->resume != 0 ) - { + if ( ssl->handshake->resume != 0 ) { #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->state = MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC; #endif #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; #endif - } - else + } else ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse finished" ) ); - return( 0 ); + return ( 0 ); } static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) @@ -5227,9 +4856,9 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - mbedtls_md5_init( &handshake->fin_md5 ); + mbedtls_md5_init( &handshake->fin_md5 ); mbedtls_sha1_init( &handshake->fin_sha1 ); - mbedtls_md5_starts( &handshake->fin_md5 ); + mbedtls_md5_starts( &handshake->fin_md5 ); mbedtls_sha1_starts( &handshake->fin_sha1 ); #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) @@ -5284,37 +4913,33 @@ void mbedtls_ssl_session_init( mbedtls_ssl_session *session ) static int ssl_handshake_init( mbedtls_ssl_context *ssl ) { /* Clear old handshake information if present */ - if( ssl->transform_negotiate ) + if ( ssl->transform_negotiate ) mbedtls_ssl_transform_free( ssl->transform_negotiate ); - if( ssl->session_negotiate ) + if ( ssl->session_negotiate ) mbedtls_ssl_session_free( ssl->session_negotiate ); - if( ssl->handshake ) + if ( ssl->handshake ) mbedtls_ssl_handshake_free( ssl->handshake ); /* * Either the pointers are now NULL or cleared properly and can be freed. * Now allocate missing structures. */ - if( ssl->transform_negotiate == NULL ) - { + if ( ssl->transform_negotiate == NULL ) { ssl->transform_negotiate = mbedtls_calloc( 1, sizeof(mbedtls_ssl_transform) ); } - if( ssl->session_negotiate == NULL ) - { + if ( ssl->session_negotiate == NULL ) { ssl->session_negotiate = mbedtls_calloc( 1, sizeof(mbedtls_ssl_session) ); } - if( ssl->handshake == NULL ) - { + if ( ssl->handshake == NULL ) { ssl->handshake = mbedtls_calloc( 1, sizeof(mbedtls_ssl_handshake_params) ); } /* All pointers should exist and can be directly freed without issue */ - if( ssl->handshake == NULL || - ssl->transform_negotiate == NULL || - ssl->session_negotiate == NULL ) - { + if ( ssl->handshake == NULL || + ssl->transform_negotiate == NULL || + ssl->session_negotiate == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc() of ssl sub-contexts failed" ) ); mbedtls_free( ssl->handshake ); @@ -5325,7 +4950,7 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) ssl->transform_negotiate = NULL; ssl->session_negotiate = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } /* Initialize structures */ @@ -5334,11 +4959,10 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) ssl_handshake_params_init( ssl->handshake ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ssl->handshake->alt_transform_out = ssl->transform_out; - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_PREPARING; else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; @@ -5347,14 +4971,14 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) } #endif - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) /* Dummy cookie callbacks for defaults */ static int ssl_cookie_write_dummy( void *ctx, - unsigned char **p, unsigned char *end, - const unsigned char *cli_id, size_t cli_id_len ) + unsigned char **p, unsigned char *end, + const unsigned char *cli_id, size_t cli_id_len ) { ((void) ctx); ((void) p); @@ -5362,12 +4986,12 @@ static int ssl_cookie_write_dummy( void *ctx, ((void) cli_id); ((void) cli_id_len); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } static int ssl_cookie_check_dummy( void *ctx, - const unsigned char *cookie, size_t cookie_len, - const unsigned char *cli_id, size_t cli_id_len ) + const unsigned char *cookie, size_t cookie_len, + const unsigned char *cli_id, size_t cli_id_len ) { ((void) ctx); ((void) cookie); @@ -5375,7 +4999,7 @@ static int ssl_cookie_check_dummy( void *ctx, ((void) cli_id); ((void) cli_id_len); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */ @@ -5401,18 +5025,16 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, /* * Prepare base structures */ - if( ( ssl-> in_buf = mbedtls_calloc( 1, len ) ) == NULL || - ( ssl->out_buf = mbedtls_calloc( 1, len ) ) == NULL ) - { + if ( ( ssl-> in_buf = mbedtls_calloc( 1, len ) ) == NULL || + ( ssl->out_buf = mbedtls_calloc( 1, len ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", len ) ); mbedtls_free( ssl->in_buf ); ssl->in_buf = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ssl->out_hdr = ssl->out_buf; ssl->out_ctr = ssl->out_buf + 3; ssl->out_len = ssl->out_buf + 11; @@ -5424,8 +5046,7 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, ssl->in_len = ssl->in_buf + 11; ssl->in_iv = ssl->in_buf + 13; ssl->in_msg = ssl->in_buf + 13; - } - else + } else #endif { ssl->out_ctr = ssl->out_buf; @@ -5441,10 +5062,10 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, ssl->in_msg = ssl->in_buf + 13; } - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_handshake_init( ssl ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -5478,7 +5099,7 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) ssl->in_msg = ssl->in_buf + 13; ssl->in_msgtype = 0; ssl->in_msglen = 0; - if( partial == 0 ) + if ( partial == 0 ) ssl->in_left = 0; #if defined(MBEDTLS_SSL_PROTO_DTLS) ssl->next_record_offset = 0; @@ -5497,7 +5118,7 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) ssl->out_msglen = 0; ssl->out_left = 0; #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) - if( ssl->split_done != MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED ) + if ( ssl->split_done != MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED ) ssl->split_done = 0; #endif @@ -5505,30 +5126,26 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) ssl->transform_out = NULL; memset( ssl->out_buf, 0, MBEDTLS_SSL_BUFFER_LEN ); - if( partial == 0 ) + if ( partial == 0 ) memset( ssl->in_buf, 0, MBEDTLS_SSL_BUFFER_LEN ); #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_reset != NULL ) - { + if ( mbedtls_ssl_hw_record_reset != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_reset()" ) ); - if( ( ret = mbedtls_ssl_hw_record_reset( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_hw_record_reset( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_reset", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif - if( ssl->transform ) - { + if ( ssl->transform ) { mbedtls_ssl_transform_free( ssl->transform ); mbedtls_free( ssl->transform ); ssl->transform = NULL; } - if( ssl->session ) - { + if ( ssl->session ) { mbedtls_ssl_session_free( ssl->session ); mbedtls_free( ssl->session ); ssl->session = NULL; @@ -5539,18 +5156,17 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) #endif #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) - if( partial == 0 ) - { + if ( partial == 0 ) { mbedtls_free( ssl->cli_id ); ssl->cli_id = NULL; ssl->cli_id_len = 0; } #endif - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_handshake_init( ssl ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -5559,7 +5175,7 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) */ int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ) { - return( ssl_session_reset_int( ssl, 0 ) ); + return ( ssl_session_reset_int( ssl, 0 ) ); } /* @@ -5604,8 +5220,8 @@ void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode ) #if defined(MBEDTLS_X509_CRT_PARSE_C) void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { conf->f_vrfy = f_vrfy; conf->p_vrfy = p_vrfy; @@ -5613,26 +5229,26 @@ void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, #endif /* MBEDTLS_X509_CRT_PARSE_C */ void mbedtls_ssl_conf_rng( mbedtls_ssl_config *conf, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { conf->f_rng = f_rng; conf->p_rng = p_rng; } void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, - void (*f_dbg)(void *, int, const char *, int, const char *), - void *p_dbg ) + void (*f_dbg)(void *, int, const char *, int, const char *), + void *p_dbg ) { conf->f_dbg = f_dbg; conf->p_dbg = p_dbg; } void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, - void *p_bio, - mbedtls_ssl_send_t *f_send, - mbedtls_ssl_recv_t *f_recv, - mbedtls_ssl_recv_timeout_t *f_recv_timeout ) + void *p_bio, + mbedtls_ssl_send_t *f_send, + mbedtls_ssl_recv_t *f_recv, + mbedtls_ssl_recv_timeout_t *f_recv_timeout ) { ssl->p_bio = p_bio; ssl->f_send = f_send; @@ -5660,9 +5276,9 @@ void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_SRV_C) void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *conf, - void *p_cache, - int (*f_get_cache)(void *, mbedtls_ssl_session *), - int (*f_set_cache)(void *, const mbedtls_ssl_session *) ) + void *p_cache, + int (*f_get_cache)(void *, mbedtls_ssl_session *), + int (*f_set_cache)(void *, const mbedtls_ssl_session *) ) { conf->p_cache = p_cache; conf->f_get_cache = f_get_cache; @@ -5675,25 +5291,24 @@ int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session { int ret; - if( ssl == NULL || - session == NULL || - ssl->session_negotiate == NULL || - ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || + session == NULL || + ssl->session_negotiate == NULL || + ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( ( ret = ssl_session_copy( ssl->session_negotiate, session ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_session_copy( ssl->session_negotiate, session ) ) != 0 ) + return ( ret ); ssl->handshake->resume = 1; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_CLI_C */ void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, - const int *ciphersuites ) + const int *ciphersuites ) { conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = ciphersuites; conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = ciphersuites; @@ -5702,13 +5317,13 @@ void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, } void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf, - const int *ciphersuites, - int major, int minor ) + const int *ciphersuites, + int major, int minor ) { - if( major != MBEDTLS_SSL_MAJOR_VERSION_3 ) + if ( major != MBEDTLS_SSL_MAJOR_VERSION_3 ) return; - if( minor < MBEDTLS_SSL_MINOR_VERSION_0 || minor > MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( minor < MBEDTLS_SSL_MINOR_VERSION_0 || minor > MBEDTLS_SSL_MINOR_VERSION_3 ) return; conf->ciphersuite_list[minor] = ciphersuites; @@ -5729,39 +5344,36 @@ static int ssl_append_key_cert( mbedtls_ssl_key_cert **head, mbedtls_ssl_key_cert *new; new = mbedtls_calloc( 1, sizeof( mbedtls_ssl_key_cert ) ); - if( new == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( new == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); new->cert = cert; new->key = key; new->next = NULL; /* Update head is the list was null, else add to the end */ - if( *head == NULL ) - { + if ( *head == NULL ) { *head = new; - } - else - { + } else { mbedtls_ssl_key_cert *cur = *head; - while( cur->next != NULL ) + while ( cur->next != NULL ) cur = cur->next; cur->next = new; } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *conf, - mbedtls_x509_crt *own_cert, - mbedtls_pk_context *pk_key ) + mbedtls_x509_crt *own_cert, + mbedtls_pk_context *pk_key ) { - return( ssl_append_key_cert( &conf->key_cert, own_cert, pk_key ) ); + return ( ssl_append_key_cert( &conf->key_cert, own_cert, pk_key ) ); } void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *conf, - mbedtls_x509_crt *ca_chain, - mbedtls_x509_crl *ca_crl ) + mbedtls_x509_crt *ca_chain, + mbedtls_x509_crl *ca_crl ) { conf->ca_chain = ca_chain; conf->ca_crl = ca_crl; @@ -5773,8 +5385,8 @@ int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *ssl, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key ) { - return( ssl_append_key_cert( &ssl->handshake->sni_key_cert, - own_cert, pk_key ) ); + return ( ssl_append_key_cert( &ssl->handshake->sni_key_cert, + own_cert, pk_key ) ); } void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *ssl, @@ -5797,61 +5409,58 @@ void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *ssl, * Set EC J-PAKE password for current handshake */ int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, - const unsigned char *pw, - size_t pw_len ) + const unsigned char *pw, + size_t pw_len ) { mbedtls_ecjpake_role role; - if( ssl->handshake == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->handshake == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) role = MBEDTLS_ECJPAKE_SERVER; else role = MBEDTLS_ECJPAKE_CLIENT; - return( mbedtls_ecjpake_setup( &ssl->handshake->ecjpake_ctx, - role, - MBEDTLS_MD_SHA256, - MBEDTLS_ECP_DP_SECP256R1, - pw, pw_len ) ); + return ( mbedtls_ecjpake_setup( &ssl->handshake->ecjpake_ctx, + role, + MBEDTLS_MD_SHA256, + MBEDTLS_ECP_DP_SECP256R1, + pw, pw_len ) ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, - const unsigned char *psk, size_t psk_len, - const unsigned char *psk_identity, size_t psk_identity_len ) + const unsigned char *psk, size_t psk_len, + const unsigned char *psk_identity, size_t psk_identity_len ) { - if( psk == NULL || psk_identity == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk == NULL || psk_identity == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( psk_len > MBEDTLS_PSK_MAX_LEN ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk_len > MBEDTLS_PSK_MAX_LEN ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* Identity len will be encoded on two bytes */ - if( ( psk_identity_len >> 16 ) != 0 || - psk_identity_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ( psk_identity_len >> 16 ) != 0 || + psk_identity_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( conf->psk != NULL || conf->psk_identity != NULL ) - { + if ( conf->psk != NULL || conf->psk_identity != NULL ) { mbedtls_free( conf->psk ); mbedtls_free( conf->psk_identity ); conf->psk = NULL; conf->psk_identity = NULL; } - if( ( conf->psk = mbedtls_calloc( 1, psk_len ) ) == NULL || - ( conf->psk_identity = mbedtls_calloc( 1, psk_identity_len ) ) == NULL ) - { + if ( ( conf->psk = mbedtls_calloc( 1, psk_len ) ) == NULL || + ( conf->psk_identity = mbedtls_calloc( 1, psk_identity_len ) ) == NULL ) { mbedtls_free( conf->psk ); mbedtls_free( conf->psk_identity ); conf->psk = NULL; conf->psk_identity = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } conf->psk_len = psk_len; @@ -5860,34 +5469,34 @@ int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, memcpy( conf->psk, psk, conf->psk_len ); memcpy( conf->psk_identity, psk_identity, conf->psk_identity_len ); - return( 0 ); + return ( 0 ); } int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *ssl, const unsigned char *psk, size_t psk_len ) { - if( psk == NULL || ssl->handshake == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk == NULL || ssl->handshake == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( psk_len > MBEDTLS_PSK_MAX_LEN ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk_len > MBEDTLS_PSK_MAX_LEN ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ssl->handshake->psk != NULL ) + if ( ssl->handshake->psk != NULL ) mbedtls_free( ssl->handshake->psk ); - if( ( ssl->handshake->psk = mbedtls_calloc( 1, psk_len ) ) == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ( ssl->handshake->psk = mbedtls_calloc( 1, psk_len ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); ssl->handshake->psk_len = psk_len; memcpy( ssl->handshake->psk, psk, ssl->handshake->psk_len ); - return( 0 ); + return ( 0 ); } void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *conf, - int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, - size_t), - void *p_psk ) + int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, + size_t), + void *p_psk ) { conf->f_psk = f_psk; conf->p_psk = p_psk; @@ -5899,30 +5508,28 @@ int mbedtls_ssl_conf_dh_param( mbedtls_ssl_config *conf, const char *dhm_P, cons { int ret; - if( ( ret = mbedtls_mpi_read_string( &conf->dhm_P, 16, dhm_P ) ) != 0 || - ( ret = mbedtls_mpi_read_string( &conf->dhm_G, 16, dhm_G ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_read_string( &conf->dhm_P, 16, dhm_P ) ) != 0 || + ( ret = mbedtls_mpi_read_string( &conf->dhm_G, 16, dhm_G ) ) != 0 ) { mbedtls_mpi_free( &conf->dhm_P ); mbedtls_mpi_free( &conf->dhm_G ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx ) { int ret; - if( ( ret = mbedtls_mpi_copy( &conf->dhm_P, &dhm_ctx->P ) ) != 0 || - ( ret = mbedtls_mpi_copy( &conf->dhm_G, &dhm_ctx->G ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_copy( &conf->dhm_P, &dhm_ctx->P ) ) != 0 || + ( ret = mbedtls_mpi_copy( &conf->dhm_G, &dhm_ctx->G ) ) != 0 ) { mbedtls_mpi_free( &conf->dhm_P ); mbedtls_mpi_free( &conf->dhm_G ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_SRV_C */ @@ -5953,7 +5560,7 @@ void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *conf, * Set the allowed elliptic curves */ void mbedtls_ssl_conf_curves( mbedtls_ssl_config *conf, - const mbedtls_ecp_group_id *curve_list ) + const mbedtls_ecp_group_id *curve_list ) { conf->curve_list = curve_list; } @@ -5964,35 +5571,35 @@ int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ) { size_t hostname_len; - if( hostname == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( hostname == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); hostname_len = strlen( hostname ); - if( hostname_len + 1 == 0 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( hostname_len + 1 == 0 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( hostname_len > MBEDTLS_SSL_MAX_HOST_NAME_LEN ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( hostname_len > MBEDTLS_SSL_MAX_HOST_NAME_LEN ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); ssl->hostname = mbedtls_calloc( 1, hostname_len + 1 ); - if( ssl->hostname == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ssl->hostname == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( ssl->hostname, hostname, hostname_len ); ssl->hostname[hostname_len] = '\0'; - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) void mbedtls_ssl_conf_sni( mbedtls_ssl_config *conf, - int (*f_sni)(void *, mbedtls_ssl_context *, - const unsigned char *, size_t), - void *p_sni ) + int (*f_sni)(void *, mbedtls_ssl_context *, + const unsigned char *, size_t), + void *p_sni ) { conf->f_sni = f_sni; conf->p_sni = p_sni; @@ -6010,23 +5617,22 @@ int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **prot * truncated". Check lengths now rather than later. */ tot_len = 0; - for( p = protos; *p != NULL; p++ ) - { + for ( p = protos; *p != NULL; p++ ) { cur_len = strlen( *p ); tot_len += cur_len; - if( cur_len == 0 || cur_len > 255 || tot_len > 65535 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cur_len == 0 || cur_len > 255 || tot_len > 65535 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } conf->alpn_list = protos; - return( 0 ); + return ( 0 ); } const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context *ssl ) { - return( ssl->alpn_chosen ); + return ( ssl->alpn_chosen ); } #endif /* MBEDTLS_SSL_ALPN */ @@ -6073,15 +5679,14 @@ void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 ) #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_code ) { - if( mfl_code >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID || - mfl_code_to_length[mfl_code] > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( mfl_code >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID || + mfl_code_to_length[mfl_code] > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } conf->mfl_code = mfl_code; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ @@ -6116,7 +5721,7 @@ void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_ } void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, - const unsigned char period[8] ) + const unsigned char period[8] ) { memcpy( conf->renego_period, period, 8 ); } @@ -6145,8 +5750,8 @@ void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *conf, #if defined(MBEDTLS_SSL_EXPORT_KEYS) void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_t *f_export_keys, - void *p_export_keys ) + mbedtls_ssl_export_keys_t *f_export_keys, + void *p_export_keys ) { conf->f_export_keys = f_export_keys; conf->p_export_keys = p_export_keys; @@ -6158,24 +5763,24 @@ void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, */ size_t mbedtls_ssl_get_bytes_avail( const mbedtls_ssl_context *ssl ) { - return( ssl->in_offt == NULL ? 0 : ssl->in_msglen ); + return ( ssl->in_offt == NULL ? 0 : ssl->in_msglen ); } uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *ssl ) { - if( ssl->session != NULL ) - return( ssl->session->verify_result ); + if ( ssl->session != NULL ) + return ( ssl->session->verify_result ); - if( ssl->session_negotiate != NULL ) - return( ssl->session_negotiate->verify_result ); + if ( ssl->session_negotiate != NULL ) + return ( ssl->session_negotiate->verify_result ); - return( 0xFFFFFFFF ); + return ( 0xFFFFFFFF ); } const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ) { - if( ssl == NULL || ssl->session == NULL ) - return( NULL ); + if ( ssl == NULL || ssl->session == NULL ) + return ( NULL ); return mbedtls_ssl_get_ciphersuite_name( ssl->session->ciphersuite ); } @@ -6183,38 +5788,35 @@ const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ) const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - switch( ssl->minor_ver ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + switch ( ssl->minor_ver ) { case MBEDTLS_SSL_MINOR_VERSION_2: - return( "DTLSv1.0" ); + return ( "DTLSv1.0" ); case MBEDTLS_SSL_MINOR_VERSION_3: - return( "DTLSv1.2" ); + return ( "DTLSv1.2" ); default: - return( "unknown (DTLS)" ); + return ( "unknown (DTLS)" ); } } #endif - switch( ssl->minor_ver ) - { + switch ( ssl->minor_ver ) { case MBEDTLS_SSL_MINOR_VERSION_0: - return( "SSLv3.0" ); + return ( "SSLv3.0" ); case MBEDTLS_SSL_MINOR_VERSION_1: - return( "TLSv1.0" ); + return ( "TLSv1.0" ); case MBEDTLS_SSL_MINOR_VERSION_2: - return( "TLSv1.1" ); + return ( "TLSv1.1" ); case MBEDTLS_SSL_MINOR_VERSION_3: - return( "TLSv1.2" ); + return ( "TLSv1.2" ); default: - return( "unknown" ); + return ( "unknown" ); } } @@ -6224,15 +5826,14 @@ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ) const mbedtls_ssl_transform *transform = ssl->transform_out; #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->session_out->compression != MBEDTLS_SSL_COMPRESS_NULL ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + if ( ssl->session_out->compression != MBEDTLS_SSL_COMPRESS_NULL ) + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); #endif - if( transform == NULL ) - return( (int) mbedtls_ssl_hdr_len( ssl ) ); + if ( transform == NULL ) + return ( (int) mbedtls_ssl_hdr_len( ssl ) ); - switch( mbedtls_cipher_get_cipher_mode( &transform->cipher_ctx_enc ) ) - { + switch ( mbedtls_cipher_get_cipher_mode( &transform->cipher_ctx_enc ) ) { case MBEDTLS_MODE_GCM: case MBEDTLS_MODE_CCM: case MBEDTLS_MODE_STREAM: @@ -6241,15 +5842,15 @@ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ) case MBEDTLS_MODE_CBC: transform_expansion = transform->maclen - + mbedtls_cipher_get_block_size( &transform->cipher_ctx_enc ); + + mbedtls_cipher_get_block_size( &transform->cipher_ctx_enc ); break; default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - return( (int)( mbedtls_ssl_hdr_len( ssl ) + transform_expansion ) ); + return ( (int)( mbedtls_ssl_hdr_len( ssl ) + transform_expansion ) ); } #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) @@ -6265,9 +5866,8 @@ size_t mbedtls_ssl_get_max_frag_len( const mbedtls_ssl_context *ssl ) /* * Check if a smaller max length was negotiated */ - if( ssl->session_out != NULL && - mfl_code_to_length[ssl->session_out->mfl_code] < max_len ) - { + if ( ssl->session_out != NULL && + mfl_code_to_length[ssl->session_out->mfl_code] < max_len ) { max_len = mfl_code_to_length[ssl->session_out->mfl_code]; } @@ -6278,25 +5878,24 @@ size_t mbedtls_ssl_get_max_frag_len( const mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_X509_CRT_PARSE_C) const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl ) { - if( ssl == NULL || ssl->session == NULL ) - return( NULL ); + if ( ssl == NULL || ssl->session == NULL ) + return ( NULL ); - return( ssl->session->peer_cert ); + return ( ssl->session->peer_cert ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_CLI_C) int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl, mbedtls_ssl_session *dst ) { - if( ssl == NULL || - dst == NULL || - ssl->session == NULL || - ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || + dst == NULL || + ssl->session == NULL || + ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( ssl_session_copy( dst, ssl->session ) ); + return ( ssl_session_copy( dst, ssl->session ) ); } #endif /* MBEDTLS_SSL_CLI_C */ @@ -6307,19 +5906,19 @@ int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ret = mbedtls_ssl_handshake_client_step( ssl ); #endif #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ret = mbedtls_ssl_handshake_server_step( ssl ); #endif - return( ret ); + return ( ret ); } /* @@ -6329,22 +5928,21 @@ int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> handshake" ) ); - while( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { + while ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { ret = mbedtls_ssl_handshake_step( ssl ); - if( ret != 0 ) + if ( ret != 0 ) break; } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= handshake" ) ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SSL_RENEGOTIATION) @@ -6362,15 +5960,14 @@ static int ssl_write_hello_request( mbedtls_ssl_context *ssl ) ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_HELLO_REQUEST; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write hello request" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SRV_C */ @@ -6389,16 +5986,15 @@ static int ssl_start_renegotiation( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> renegotiate" ) ); - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_handshake_init( ssl ) ) != 0 ) + return ( ret ); /* RFC 6347 4.2.2: "[...] the HelloRequest will have message_seq = 0 and * the ServerHello will have message_seq = 1" */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ssl->handshake->out_msg_seq = 1; else ssl->handshake->in_msg_seq = 1; @@ -6408,15 +6004,14 @@ static int ssl_start_renegotiation( mbedtls_ssl_context *ssl ) ssl->state = MBEDTLS_SSL_HELLO_REQUEST; ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS; - if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= renegotiate" ) ); - return( 0 ); + return ( 0 ); } /* @@ -6427,23 +6022,22 @@ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_SRV_C) /* On server, just send the request */ - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_PENDING; /* Did we already try/start sending HelloRequest? */ - if( ssl->out_left != 0 ) - return( mbedtls_ssl_flush_output( ssl ) ); + if ( ssl->out_left != 0 ) + return ( mbedtls_ssl_flush_output( ssl ) ); - return( ssl_write_hello_request( ssl ) ); + return ( ssl_write_hello_request( ssl ) ); } #endif /* MBEDTLS_SSL_SRV_C */ @@ -6452,28 +6046,23 @@ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) * On client, either start the renegotiation process or, * if already in progress, continue the handshake */ - if( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ( ret = ssl_start_renegotiation( ssl ) ) != 0 ) - { + if ( ( ret = ssl_start_renegotiation( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_start_renegotiation", ret ); - return( ret ); + return ( ret ); } - } - else - { - if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) - { + } else { + if ( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_SSL_CLI_C */ - return( ret ); + return ( ret ); } /* @@ -6481,21 +6070,19 @@ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) */ static int ssl_check_ctr_renegotiate( mbedtls_ssl_context *ssl ) { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER || - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING || - ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED ) - { - return( 0 ); + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER || + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING || + ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED ) { + return ( 0 ); } - if( memcmp( ssl->in_ctr, ssl->conf->renego_period, 8 ) <= 0 && - memcmp( ssl->out_ctr, ssl->conf->renego_period, 8 ) <= 0 ) - { - return( 0 ); + if ( memcmp( ssl->in_ctr, ssl->conf->renego_period, 8 ) <= 0 && + memcmp( ssl->out_ctr, ssl->conf->renego_period, 8 ) <= 0 ) { + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "record counter limit reached: renegotiate" ) ); - return( mbedtls_ssl_renegotiate( ssl ) ); + return ( mbedtls_ssl_renegotiate( ssl ) ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ @@ -6507,216 +6094,182 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) int ret, record_read = 0; size_t n; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> read" ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - return( ret ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) + return ( ret ); - if( ssl->handshake != NULL && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - return( ret ); + if ( ssl->handshake != NULL && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) + return ( ret ); } } #endif #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) - { + if ( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_check_ctr_renegotiate", ret ); - return( ret ); + return ( ret ); } #endif - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { ret = mbedtls_ssl_handshake( ssl ); - if( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) - { + if ( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) { record_read = 1; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } } - if( ssl->in_offt == NULL ) - { + if ( ssl->in_offt == NULL ) { /* Start timer if not already running */ - if( ssl->f_get_timer != NULL && - ssl->f_get_timer( ssl->p_timer ) == -1 ) - { + if ( ssl->f_get_timer != NULL && + ssl->f_get_timer( ssl->p_timer ) == -1 ) { ssl_set_timer( ssl, ssl->conf->read_timeout ); } - if( ! record_read ) - { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_SSL_CONN_EOF ) - return( 0 ); + if ( ! record_read ) { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_SSL_CONN_EOF ) + return ( 0 ); MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } } - if( ssl->in_msglen == 0 && - ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA ) - { + if ( ssl->in_msglen == 0 && + ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA ) { /* * OpenSSL sends empty messages to randomize the IV */ - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_SSL_CONN_EOF ) - return( 0 ); + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_SSL_CONN_EOF ) + return ( 0 ); MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } } #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received handshake message" ) ); #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && - ( ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_REQUEST || - ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) ) ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && + ( ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_REQUEST || + ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake received (not HelloRequest)" ) ); /* With DTLS, drop the packet (probably from last handshake) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake received (not ClientHello)" ) ); /* With DTLS, drop the packet (probably from last handshake) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } #endif - if( ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED || - ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == - MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) ) - { + if ( ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED || + ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == + MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "refusing renegotiation, sending alert" ) ); #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { /* * SSLv3 does not have a "no_renegotiation" alert */ - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - } - else + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) - { - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_WARNING, - MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) ) != 0 ) - { - return( ret ); - } - } - else + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) { + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_WARNING, + MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) ) != 0 ) { + return ( ret ); + } + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - } - else - { + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + } else { /* DTLS clients need to know renego is server-initiated */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_PENDING; } #endif ret = ssl_start_renegotiation( ssl ); - if( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) - { + if ( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) { record_read = 1; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_start_renegotiation", ret ); - return( ret ); + return ( ret ); } } /* If a non-handshake record was read during renego, fallthrough, * else tell the user they should call mbedtls_ssl_read() again */ - if( ! record_read ) - return( MBEDTLS_ERR_SSL_WANT_READ ); - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { + if ( ! record_read ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { - if( ssl->conf->renego_max_records >= 0 ) - { - if( ++ssl->renego_records_seen > ssl->conf->renego_max_records ) - { + if ( ssl->conf->renego_max_records >= 0 ) { + if ( ++ssl->renego_records_seen > ssl->conf->renego_max_records ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation requested, " - "but not honored by client" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + "but not honored by client" ) ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } } } #endif /* MBEDTLS_SSL_RENEGOTIATION */ /* Fatal and closure alerts handled by mbedtls_ssl_read_record() */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "ignoring non-fatal non-closure alert" ) ); - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad application data message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } ssl->in_offt = ssl->in_msg; /* We're going to return something now, cancel timer, * except if handshake (renegotiation) is in progress */ - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) ssl_set_timer( ssl, 0 ); #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -6724,13 +6277,11 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) * Do it now, after setting in_offt, to avoid taking this branch * again if ssl_write_hello_request() returns WANT_WRITE */ #if defined(MBEDTLS_SSL_SRV_C) && defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { - if( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { + if ( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_resend_hello_request", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ @@ -6743,7 +6294,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) memcpy( buf, ssl->in_offt, n ); ssl->in_msglen -= n; - if( ssl->in_msglen == 0 ) + if ( ssl->in_msglen == 0 ) /* all bytes consumed */ ssl->in_offt = NULL; else @@ -6752,7 +6303,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read" ) ); - return( (int) n ); + return ( (int) n ); } /* @@ -6766,44 +6317,36 @@ static int ssl_write_real( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) size_t max_len = mbedtls_ssl_get_max_frag_len( ssl ); - if( len > max_len ) - { + if ( len > max_len ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "fragment larger than the (negotiated) " - "maximum fragment length: %d > %d", - len, max_len ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - } - else + "maximum fragment length: %d > %d", + len, max_len ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + } else #endif len = max_len; } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ - if( ssl->out_left != 0 ) - { - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - { + if ( ssl->out_left != 0 ) { + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_flush_output", ret ); - return( ret ); + return ( ret ); } - } - else - { + } else { ssl->out_msglen = len; ssl->out_msgtype = MBEDTLS_SSL_MSG_APPLICATION_DATA; memcpy( ssl->out_msg, buf, len ); - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } } - return( (int) len ); + return ( (int) len ); } /* @@ -6819,28 +6362,26 @@ static int ssl_write_split( mbedtls_ssl_context *ssl, { int ret; - if( ssl->conf->cbc_record_splitting == - MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED || - len <= 1 || - ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_1 || - mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc ) - != MBEDTLS_MODE_CBC ) - { - return( ssl_write_real( ssl, buf, len ) ); + if ( ssl->conf->cbc_record_splitting == + MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED || + len <= 1 || + ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_1 || + mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc ) + != MBEDTLS_MODE_CBC ) { + return ( ssl_write_real( ssl, buf, len ) ); } - if( ssl->split_done == 0 ) - { - if( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 ) - return( ret ); + if ( ssl->split_done == 0 ) { + if ( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 ) + return ( ret ); ssl->split_done = 1; } - if( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 ) - return( ret ); + if ( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 ) + return ( ret ); ssl->split_done = 0; - return( ret + 1 ); + return ( ret + 1 ); } #endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ @@ -6853,23 +6394,20 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_ MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write" ) ); - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) - { + if ( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_check_ctr_renegotiate", ret ); - return( ret ); + return ( ret ); } #endif - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } } @@ -6881,7 +6419,7 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_ MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write" ) ); - return( ret ); + return ( ret ); } /* @@ -6891,33 +6429,31 @@ int mbedtls_ssl_close_notify( mbedtls_ssl_context *ssl ) { int ret; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write close notify" ) ); - if( ssl->out_left != 0 ) - return( mbedtls_ssl_flush_output( ssl ) ); + if ( ssl->out_left != 0 ) + return ( mbedtls_ssl_flush_output( ssl ) ); - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_WARNING, - MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) ) != 0 ) - { + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_WARNING, + MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_send_alert_message", ret ); - return( ret ); + return ( ret ); } } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write close notify" ) ); - return( 0 ); + return ( 0 ); } void mbedtls_ssl_transform_free( mbedtls_ssl_transform *transform ) { - if( transform == NULL ) + if ( transform == NULL ) return; #if defined(MBEDTLS_ZLIB_SUPPORT) @@ -6939,8 +6475,7 @@ static void ssl_key_cert_free( mbedtls_ssl_key_cert *key_cert ) { mbedtls_ssl_key_cert *cur = key_cert, *next; - while( cur != NULL ) - { + while ( cur != NULL ) { next = cur->next; mbedtls_free( cur ); cur = next; @@ -6950,7 +6485,7 @@ static void ssl_key_cert_free( mbedtls_ssl_key_cert *key_cert ) void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) { - if( handshake == NULL ) + if ( handshake == NULL ) return; #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ @@ -6989,8 +6524,7 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) #endif #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( handshake->psk != NULL ) - { + if ( handshake->psk != NULL ) { mbedtls_zeroize( handshake->psk, handshake->psk_len ); mbedtls_free( handshake->psk ); } @@ -7002,12 +6536,10 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) * Free only the linked list wrapper, not the keys themselves * since the belong to the SNI callback */ - if( handshake->sni_key_cert != NULL ) - { + if ( handshake->sni_key_cert != NULL ) { mbedtls_ssl_key_cert *cur = handshake->sni_key_cert, *next; - while( cur != NULL ) - { + while ( cur != NULL ) { next = cur->next; mbedtls_free( cur ); cur = next; @@ -7026,12 +6558,11 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) void mbedtls_ssl_session_free( mbedtls_ssl_session *session ) { - if( session == NULL ) + if ( session == NULL ) return; #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( session->peer_cert != NULL ) - { + if ( session->peer_cert != NULL ) { mbedtls_x509_crt_free( session->peer_cert ); mbedtls_free( session->peer_cert ); } @@ -7049,39 +6580,34 @@ void mbedtls_ssl_session_free( mbedtls_ssl_session *session ) */ void mbedtls_ssl_free( mbedtls_ssl_context *ssl ) { - if( ssl == NULL ) + if ( ssl == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> free" ) ); - if( ssl->out_buf != NULL ) - { + if ( ssl->out_buf != NULL ) { mbedtls_zeroize( ssl->out_buf, MBEDTLS_SSL_BUFFER_LEN ); mbedtls_free( ssl->out_buf ); } - if( ssl->in_buf != NULL ) - { + if ( ssl->in_buf != NULL ) { mbedtls_zeroize( ssl->in_buf, MBEDTLS_SSL_BUFFER_LEN ); mbedtls_free( ssl->in_buf ); } #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->compress_buf != NULL ) - { + if ( ssl->compress_buf != NULL ) { mbedtls_zeroize( ssl->compress_buf, MBEDTLS_SSL_BUFFER_LEN ); mbedtls_free( ssl->compress_buf ); } #endif - if( ssl->transform ) - { + if ( ssl->transform ) { mbedtls_ssl_transform_free( ssl->transform ); mbedtls_free( ssl->transform ); } - if( ssl->handshake ) - { + if ( ssl->handshake ) { mbedtls_ssl_handshake_free( ssl->handshake ); mbedtls_ssl_transform_free( ssl->transform_negotiate ); mbedtls_ssl_session_free( ssl->session_negotiate ); @@ -7091,23 +6617,20 @@ void mbedtls_ssl_free( mbedtls_ssl_context *ssl ) mbedtls_free( ssl->session_negotiate ); } - if( ssl->session ) - { + if ( ssl->session ) { mbedtls_ssl_session_free( ssl->session ); mbedtls_free( ssl->session ); } #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( ssl->hostname != NULL ) - { + if ( ssl->hostname != NULL ) { mbedtls_zeroize( ssl->hostname, strlen( ssl->hostname ) ); mbedtls_free( ssl->hostname ); } #endif #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_finish != NULL ) - { + if ( mbedtls_ssl_hw_record_finish != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_finish()" ) ); mbedtls_ssl_hw_record_finish( ssl ); } @@ -7189,8 +6712,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, * Things that are common to all presets */ #if defined(MBEDTLS_SSL_CLI_C) - if( endpoint == MBEDTLS_SSL_IS_CLIENT ) - { + if ( endpoint == MBEDTLS_SSL_IS_CLIENT ) { conf->authmode = MBEDTLS_SSL_VERIFY_REQUIRED; #if defined(MBEDTLS_SSL_SESSION_TICKETS) conf->session_tickets = MBEDTLS_SSL_SESSION_TICKETS_ENABLED; @@ -7235,22 +6757,19 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, #endif #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) - if( endpoint == MBEDTLS_SSL_IS_SERVER ) - { - if( ( ret = mbedtls_ssl_conf_dh_param( conf, - MBEDTLS_DHM_RFC5114_MODP_2048_P, - MBEDTLS_DHM_RFC5114_MODP_2048_G ) ) != 0 ) - { - return( ret ); - } - } + if ( endpoint == MBEDTLS_SSL_IS_SERVER ) { + if ( ( ret = mbedtls_ssl_conf_dh_param( conf, + MBEDTLS_DHM_RFC5114_MODP_2048_P, + MBEDTLS_DHM_RFC5114_MODP_2048_G ) ) != 0 ) { + return ( ret ); + } + } #endif /* * Preset-specific defaults */ - switch( preset ) - { + switch ( preset ) { /* * NSA Suite B */ @@ -7261,10 +6780,10 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION; conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = - ssl_preset_suiteb_ciphersuites; + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = + ssl_preset_suiteb_ciphersuites; #if defined(MBEDTLS_X509_CRT_PARSE_C) conf->cert_profile = &mbedtls_x509_crt_profile_suiteb; @@ -7289,15 +6808,15 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_2; #endif conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = - mbedtls_ssl_list_ciphersuites(); + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = + mbedtls_ssl_list_ciphersuites(); #if defined(MBEDTLS_X509_CRT_PARSE_C) conf->cert_profile = &mbedtls_x509_crt_profile_default; @@ -7316,7 +6835,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, #endif } - return( 0 ); + return ( 0 ); } /* @@ -7330,8 +6849,7 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) #endif #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( conf->psk != NULL ) - { + if ( conf->psk != NULL ) { mbedtls_zeroize( conf->psk, conf->psk_len ); mbedtls_zeroize( conf->psk_identity, conf->psk_identity_len ); mbedtls_free( conf->psk ); @@ -7356,30 +6874,29 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) unsigned char mbedtls_ssl_sig_from_pk( mbedtls_pk_context *pk ) { #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_can_do( pk, MBEDTLS_PK_RSA ) ) - return( MBEDTLS_SSL_SIG_RSA ); + if ( mbedtls_pk_can_do( pk, MBEDTLS_PK_RSA ) ) + return ( MBEDTLS_SSL_SIG_RSA ); #endif #if defined(MBEDTLS_ECDSA_C) - if( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECDSA ) ) - return( MBEDTLS_SSL_SIG_ECDSA ); + if ( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECDSA ) ) + return ( MBEDTLS_SSL_SIG_ECDSA ); #endif - return( MBEDTLS_SSL_SIG_ANON ); + return ( MBEDTLS_SSL_SIG_ANON ); } mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ) { - switch( sig ) - { + switch ( sig ) { #if defined(MBEDTLS_RSA_C) case MBEDTLS_SSL_SIG_RSA: - return( MBEDTLS_PK_RSA ); + return ( MBEDTLS_PK_RSA ); #endif #if defined(MBEDTLS_ECDSA_C) case MBEDTLS_SSL_SIG_ECDSA: - return( MBEDTLS_PK_ECDSA ); + return ( MBEDTLS_PK_ECDSA ); #endif default: - return( MBEDTLS_PK_NONE ); + return ( MBEDTLS_PK_NONE ); } } #endif /* MBEDTLS_PK_C && ( MBEDTLS_RSA_C || MBEDTLS_ECDSA_C ) */ @@ -7389,30 +6906,29 @@ mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ) */ mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ) { - switch( hash ) - { + switch ( hash ) { #if defined(MBEDTLS_MD5_C) case MBEDTLS_SSL_HASH_MD5: - return( MBEDTLS_MD_MD5 ); + return ( MBEDTLS_MD_MD5 ); #endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_SSL_HASH_SHA1: - return( MBEDTLS_MD_SHA1 ); + return ( MBEDTLS_MD_SHA1 ); #endif #if defined(MBEDTLS_SHA256_C) case MBEDTLS_SSL_HASH_SHA224: - return( MBEDTLS_MD_SHA224 ); + return ( MBEDTLS_MD_SHA224 ); case MBEDTLS_SSL_HASH_SHA256: - return( MBEDTLS_MD_SHA256 ); + return ( MBEDTLS_MD_SHA256 ); #endif #if defined(MBEDTLS_SHA512_C) case MBEDTLS_SSL_HASH_SHA384: - return( MBEDTLS_MD_SHA384 ); + return ( MBEDTLS_MD_SHA384 ); case MBEDTLS_SSL_HASH_SHA512: - return( MBEDTLS_MD_SHA512 ); + return ( MBEDTLS_MD_SHA512 ); #endif default: - return( MBEDTLS_MD_NONE ); + return ( MBEDTLS_MD_NONE ); } } @@ -7421,30 +6937,29 @@ mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ) */ unsigned char mbedtls_ssl_hash_from_md_alg( int md ) { - switch( md ) - { + switch ( md ) { #if defined(MBEDTLS_MD5_C) case MBEDTLS_MD_MD5: - return( MBEDTLS_SSL_HASH_MD5 ); + return ( MBEDTLS_SSL_HASH_MD5 ); #endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: - return( MBEDTLS_SSL_HASH_SHA1 ); + return ( MBEDTLS_SSL_HASH_SHA1 ); #endif #if defined(MBEDTLS_SHA256_C) case MBEDTLS_MD_SHA224: - return( MBEDTLS_SSL_HASH_SHA224 ); + return ( MBEDTLS_SSL_HASH_SHA224 ); case MBEDTLS_MD_SHA256: - return( MBEDTLS_SSL_HASH_SHA256 ); + return ( MBEDTLS_SSL_HASH_SHA256 ); #endif #if defined(MBEDTLS_SHA512_C) case MBEDTLS_MD_SHA384: - return( MBEDTLS_SSL_HASH_SHA384 ); + return ( MBEDTLS_SSL_HASH_SHA384 ); case MBEDTLS_MD_SHA512: - return( MBEDTLS_SSL_HASH_SHA512 ); + return ( MBEDTLS_SSL_HASH_SHA512 ); #endif default: - return( MBEDTLS_SSL_HASH_NONE ); + return ( MBEDTLS_SSL_HASH_NONE ); } } @@ -7457,14 +6972,14 @@ int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_i { const mbedtls_ecp_group_id *gid; - if( ssl->conf->curve_list == NULL ) - return( -1 ); + if ( ssl->conf->curve_list == NULL ) + return ( -1 ); - for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) - if( *gid == grp_id ) - return( 0 ); + for ( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) + if ( *gid == grp_id ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_ECP_C */ @@ -7478,22 +6993,22 @@ int mbedtls_ssl_check_sig_hash( const mbedtls_ssl_context *ssl, { const int *cur; - if( ssl->conf->sig_hashes == NULL ) - return( -1 ); + if ( ssl->conf->sig_hashes == NULL ) + return ( -1 ); - for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) - if( *cur == (int) md ) - return( 0 ); + for ( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) + if ( *cur == (int) md ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ #if defined(MBEDTLS_X509_CRT_PARSE_C) int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, - const mbedtls_ssl_ciphersuite_t *ciphersuite, - int cert_endpoint, - uint32_t *flags ) + const mbedtls_ssl_ciphersuite_t *ciphersuite, + int cert_endpoint, + uint32_t *flags ) { int ret = 0; #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) @@ -7512,11 +7027,9 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, #endif #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - if( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) - { + if ( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) { /* Server part of the key exchange */ - switch( ciphersuite->key_exchange ) - { + switch ( ciphersuite->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_RSA: case MBEDTLS_KEY_EXCHANGE_RSA_PSK: usage = MBEDTLS_X509_KU_KEY_ENCIPHERMENT; @@ -7541,15 +7054,12 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, case MBEDTLS_KEY_EXCHANGE_ECJPAKE: usage = 0; } - } - else - { + } else { /* Client auth: we only implement rsa_sign and mbedtls_ecdsa_sign for now */ usage = MBEDTLS_X509_KU_DIGITAL_SIGNATURE; } - if( mbedtls_x509_crt_check_key_usage( cert, usage ) != 0 ) - { + if ( mbedtls_x509_crt_check_key_usage( cert, usage ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_KEY_USAGE; ret = -1; } @@ -7558,25 +7068,21 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, #endif /* MBEDTLS_X509_CHECK_KEY_USAGE */ #if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) - if( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) - { + if ( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) { ext_oid = MBEDTLS_OID_SERVER_AUTH; ext_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_SERVER_AUTH ); - } - else - { + } else { ext_oid = MBEDTLS_OID_CLIENT_AUTH; ext_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_CLIENT_AUTH ); } - if( mbedtls_x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) - { + if ( mbedtls_x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_EXT_KEY_USAGE; ret = -1; } #endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ - return( ret ); + return ( ret ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ @@ -7590,18 +7096,16 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, * 1.x <-> 3.x+1 for x != 0 (DTLS 1.2 based on TLS 1.2) */ void mbedtls_ssl_write_version( int major, int minor, int transport, - unsigned char ver[2] ) + unsigned char ver[2] ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( minor == MBEDTLS_SSL_MINOR_VERSION_2 ) + if ( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( minor == MBEDTLS_SSL_MINOR_VERSION_2 ) --minor; /* DTLS 1.0 stored as TLS 1.1 internally */ ver[0] = (unsigned char)( 255 - ( major - 2 ) ); ver[1] = (unsigned char)( 255 - ( minor - 1 ) ); - } - else + } else #else ((void) transport); #endif @@ -7612,18 +7116,16 @@ void mbedtls_ssl_write_version( int major, int minor, int transport, } void mbedtls_ssl_read_version( int *major, int *minor, int transport, - const unsigned char ver[2] ) + const unsigned char ver[2] ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { *major = 255 - ver[0] + 2; *minor = 255 - ver[1] + 1; - if( *minor == MBEDTLS_SSL_MINOR_VERSION_1 ) + if ( *minor == MBEDTLS_SSL_MINOR_VERSION_1 ) ++*minor; /* DTLS 1.0 stored as TLS 1.1 internally */ - } - else + } else #else ((void) transport); #endif @@ -7636,11 +7138,10 @@ void mbedtls_ssl_read_version( int *major, int *minor, int transport, int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ) { #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; - switch( md ) - { + switch ( md ) { #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) #if defined(MBEDTLS_MD5_C) case MBEDTLS_SSL_HASH_MD5: diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/threading.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/threading.c index 83ec01a4..69abbf75 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/threading.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/threading.c @@ -32,7 +32,7 @@ #if defined(MBEDTLS_THREADING_PTHREAD) static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || mutex->is_valid ) + if ( mutex == NULL || mutex->is_valid ) return; mutex->is_valid = pthread_mutex_init( &mutex->mutex, NULL ) == 0; @@ -40,7 +40,7 @@ static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || !mutex->is_valid ) + if ( mutex == NULL || !mutex->is_valid ) return; (void) pthread_mutex_destroy( &mutex->mutex ); @@ -49,24 +49,24 @@ static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex ) static int threading_mutex_lock_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || ! mutex->is_valid ) - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); + if ( mutex == NULL || ! mutex->is_valid ) + return ( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); - if( pthread_mutex_lock( &mutex->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( pthread_mutex_lock( &mutex->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); - return( 0 ); + return ( 0 ); } static int threading_mutex_unlock_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || ! mutex->is_valid ) - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); + if ( mutex == NULL || ! mutex->is_valid ) + return ( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); - if( pthread_mutex_unlock( &mutex->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( pthread_mutex_unlock( &mutex->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); - return( 0 ); + return ( 0 ); } void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t * ) = threading_mutex_init_pthread; @@ -85,7 +85,7 @@ int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_unl static int threading_mutex_fail( mbedtls_threading_mutex_t *mutex ) { ((void) mutex ); - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); } static void threading_mutex_dummy( mbedtls_threading_mutex_t *mutex ) { @@ -102,9 +102,9 @@ int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_fai * Set functions pointers and initialize global mutexes */ void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * ), - void (*mutex_free)( mbedtls_threading_mutex_t * ), - int (*mutex_lock)( mbedtls_threading_mutex_t * ), - int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ) + void (*mutex_free)( mbedtls_threading_mutex_t * ), + int (*mutex_lock)( mbedtls_threading_mutex_t * ), + int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ) { mbedtls_mutex_init = mutex_init; mbedtls_mutex_free = mutex_free; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/timing.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/timing.c index a7c7ff02..69e84d52 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/timing.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/timing.c @@ -52,8 +52,7 @@ #include #include -struct _hr_time -{ +struct _hr_time { LARGE_INTEGER start; }; @@ -65,8 +64,7 @@ struct _hr_time #include #include -struct _hr_time -{ +struct _hr_time { struct timeval start; }; @@ -82,7 +80,7 @@ unsigned long mbedtls_timing_hardclock( void ) unsigned long tsc; __asm rdtsc __asm mov [tsc], eax - return( tsc ); + return ( tsc ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && ( _MSC_VER && _M_IX86 ) || __WATCOMC__ */ @@ -98,7 +96,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long lo, hi; asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo ); + return ( lo ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __i386__ */ @@ -112,7 +110,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long lo, hi; asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo | ( hi << 32 ) ); + return ( lo | ( hi << 32 ) ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && ( __amd64__ || __x86_64__ ) */ @@ -126,15 +124,13 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long tbl, tbu0, tbu1; - do - { + do { asm volatile( "mftbu %0" : "=r" (tbu0) ); asm volatile( "mftb %0" : "=r" (tbl ) ); asm volatile( "mftbu %0" : "=r" (tbu1) ); - } - while( tbu0 != tbu1 ); + } while ( tbu0 != tbu1 ); - return( tbl ); + return ( tbl ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && ( __powerpc__ || __ppc__ ) */ @@ -151,7 +147,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long tick; asm volatile( "rdpr %%tick, %0;" : "=&r" (tick) ); - return( tick ); + return ( tick ); } #endif /* __OpenBSD__ */ #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && @@ -167,7 +163,7 @@ unsigned long mbedtls_timing_hardclock( void ) unsigned long tick; asm volatile( ".byte 0x83, 0x41, 0x00, 0x00" ); asm volatile( "mov %%g1, %0" : "=r" (tick) ); - return( tick ); + return ( tick ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __sparc__ && !__sparc64__ */ @@ -181,7 +177,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long cc; asm volatile( "rpcc %0" : "=r" (cc) ); - return( cc & 0xFFFFFFFF ); + return ( cc & 0xFFFFFFFF ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __alpha__ */ @@ -195,7 +191,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long itc; asm volatile( "mov %0 = ar.itc" : "=r" (itc) ); - return( itc ); + return ( itc ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __ia64__ */ @@ -211,7 +207,7 @@ unsigned long mbedtls_timing_hardclock( void ) QueryPerformanceCounter( &offset ); - return( (unsigned long)( offset.QuadPart ) ); + return ( (unsigned long)( offset.QuadPart ) ); } #endif /* !HAVE_HARDCLOCK && _MSC_VER && !EFIX64 && !EFI32 */ @@ -226,15 +222,14 @@ unsigned long mbedtls_timing_hardclock( void ) { struct timeval tv_cur; - if( hardclock_init == 0 ) - { + if ( hardclock_init == 0 ) { gettimeofday( &tv_init, NULL ); hardclock_init = 1; } gettimeofday( &tv_cur, NULL ); - return( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 - + ( tv_cur.tv_usec - tv_init.tv_usec ) ); + return ( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 + + ( tv_cur.tv_usec - tv_init.tv_usec ) ); } #endif /* !HAVE_HARDCLOCK */ @@ -252,13 +247,13 @@ unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int QueryPerformanceFrequency( &hfreq ); delta = (unsigned long)( ( 1000 * - ( offset.QuadPart - t->start.QuadPart ) ) / - hfreq.QuadPart ); + ( offset.QuadPart - t->start.QuadPart ) ) / + hfreq.QuadPart ); - if( reset ) + if ( reset ) QueryPerformanceCounter( &t->start ); - return( delta ); + return ( delta ); } /* It's OK to use a global because alarm() is supposed to be global anyway */ @@ -269,7 +264,7 @@ static DWORD WINAPI TimerProc( LPVOID TimerContext ) ((void) TimerContext); Sleep( alarmMs ); mbedtls_timing_alarmed = 1; - return( TRUE ); + return ( TRUE ); } void mbedtls_set_alarm( int seconds ) @@ -291,17 +286,16 @@ unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int gettimeofday( &offset, NULL ); - if( reset ) - { + if ( reset ) { t->start.tv_sec = offset.tv_sec; t->start.tv_usec = offset.tv_usec; - return( 0 ); + return ( 0 ); } delta = ( offset.tv_sec - t->start.tv_sec ) * 1000 - + ( offset.tv_usec - t->start.tv_usec ) / 1000; + + ( offset.tv_usec - t->start.tv_usec ) / 1000; - return( delta ); + return ( delta ); } static void sighandler( int signum ) @@ -329,7 +323,7 @@ void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms ) ctx->int_ms = int_ms; ctx->fin_ms = fin_ms; - if( fin_ms != 0 ) + if ( fin_ms != 0 ) (void) mbedtls_timing_get_timer( &ctx->timer, 1 ); } @@ -341,18 +335,18 @@ int mbedtls_timing_get_delay( void *data ) mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data; unsigned long elapsed_ms; - if( ctx->fin_ms == 0 ) - return( -1 ); + if ( ctx->fin_ms == 0 ) + return ( -1 ); elapsed_ms = mbedtls_timing_get_timer( &ctx->timer, 0 ); - if( elapsed_ms >= ctx->fin_ms ) - return( 2 ); + if ( elapsed_ms >= ctx->fin_ms ) + return ( 2 ); - if( elapsed_ms >= ctx->int_ms ) - return( 1 ); + if ( elapsed_ms >= ctx->int_ms ) + return ( 1 ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_TIMING_ALT */ @@ -371,7 +365,7 @@ static void busy_msleep( unsigned long msec ) (void) mbedtls_timing_get_timer( &hires, 1 ); - while( mbedtls_timing_get_timer( &hires, 0 ) < msec ) + while ( mbedtls_timing_get_timer( &hires, 0 ) < msec ) i++; j = i; @@ -401,73 +395,69 @@ int mbedtls_timing_self_test( int verbose ) uint32_t a, b; mbedtls_timing_delay_context ctx; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING tests note: will take some time!\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING test #1 (set_alarm / get_timer): " ); - for( secs = 1; secs <= 3; secs++ ) - { + for ( secs = 1; secs <= 3; secs++ ) { (void) mbedtls_timing_get_timer( &hires, 1 ); mbedtls_set_alarm( (int) secs ); - while( !mbedtls_timing_alarmed ) + while ( !mbedtls_timing_alarmed ) ; millisecs = mbedtls_timing_get_timer( &hires, 0 ); /* For some reason on Windows it looks like alarm has an extra delay * (maybe related to creating a new thread). Allow some room here. */ - if( millisecs < 800 * secs || millisecs > 1200 * secs + 300 ) - { - if( verbose != 0 ) + if ( millisecs < 800 * secs || millisecs > 1200 * secs + 300 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING test #2 (set/get_delay ): " ); - for( a = 200; a <= 400; a += 200 ) - { - for( b = 200; b <= 400; b += 200 ) - { + for ( a = 200; a <= 400; a += 200 ) { + for ( b = 200; b <= 400; b += 200 ) { mbedtls_timing_set_delay( &ctx, a, a + b ); busy_msleep( a - a / 8 ); - if( mbedtls_timing_get_delay( &ctx ) != 0 ) + if ( mbedtls_timing_get_delay( &ctx ) != 0 ) FAIL; busy_msleep( a / 4 ); - if( mbedtls_timing_get_delay( &ctx ) != 1 ) + if ( mbedtls_timing_get_delay( &ctx ) != 1 ) FAIL; busy_msleep( b - a / 8 - b / 8 ); - if( mbedtls_timing_get_delay( &ctx ) != 1 ) + if ( mbedtls_timing_get_delay( &ctx ) != 1 ) FAIL; busy_msleep( b / 4 ); - if( mbedtls_timing_get_delay( &ctx ) != 2 ) + if ( mbedtls_timing_get_delay( &ctx ) != 2 ) FAIL; } } mbedtls_timing_set_delay( &ctx, 0, 0 ); busy_msleep( 200 ); - if( mbedtls_timing_get_delay( &ctx ) != -1 ) + if ( mbedtls_timing_get_delay( &ctx ) != -1 ) FAIL; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING test #3 (hardclock / get_timer): " ); /* @@ -478,9 +468,8 @@ int mbedtls_timing_self_test( int verbose ) hardfail = 0; hard_test: - if( hardfail > 1 ) - { - if( verbose != 0 ) + if ( hardfail > 1 ) { + if ( verbose != 0 ) mbedtls_printf( "failed (ignored)\n" ); goto hard_test_done; @@ -494,30 +483,28 @@ hard_test: ratio = cycles / millisecs; /* Check that the ratio is mostly constant */ - for( millisecs = 2; millisecs <= 4; millisecs++ ) - { + for ( millisecs = 2; millisecs <= 4; millisecs++ ) { cycles = mbedtls_timing_hardclock(); busy_msleep( millisecs ); cycles = mbedtls_timing_hardclock() - cycles; /* Allow variation up to 20% */ - if( cycles / millisecs < ratio - ratio / 5 || - cycles / millisecs > ratio + ratio / 5 ) - { + if ( cycles / millisecs < ratio - ratio / 5 || + cycles / millisecs > ratio + ratio / 5 ) { hardfail++; goto hard_test; } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); hard_test_done: - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version.c index 6ca80d46..1a74f68d 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version.c @@ -32,7 +32,7 @@ unsigned int mbedtls_version_get_number() { - return( MBEDTLS_VERSION_NUMBER ); + return ( MBEDTLS_VERSION_NUMBER ); } void mbedtls_version_get_string( char *string ) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version_features.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version_features.c index e866e67a..1cdf9f59 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version_features.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/version_features.c @@ -629,19 +629,18 @@ int mbedtls_version_check_feature( const char *feature ) { const char **idx = features; - if( *idx == NULL ) - return( -2 ); + if ( *idx == NULL ) + return ( -2 ); - if( feature == NULL ) - return( -1 ); + if ( feature == NULL ) + return ( -1 ); - while( *idx != NULL ) - { - if( !strcmp( *idx, feature ) ) - return( 0 ); + while ( *idx != NULL ) { + if ( !strcmp( *idx, feature ) ) + return ( 0 ); idx++; } - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_VERSION_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509.c index fad390d8..0ee1c8fb 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509.c @@ -86,28 +86,28 @@ * CertificateSerialNumber ::= INTEGER */ int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *serial ) + mbedtls_x509_buf *serial ) { int ret; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_SERIAL + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_SERIAL + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( **p != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_PRIMITIVE | 2 ) && - **p != MBEDTLS_ASN1_INTEGER ) - return( MBEDTLS_ERR_X509_INVALID_SERIAL + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( **p != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_PRIMITIVE | 2 ) && + **p != MBEDTLS_ASN1_INTEGER ) + return ( MBEDTLS_ERR_X509_INVALID_SERIAL + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); serial->tag = *(*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &serial->len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_SERIAL + ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, &serial->len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_SERIAL + ret ); serial->p = *p; *p += serial->len; - return( 0 ); + return ( 0 ); } /* Get an algorithm identifier without parameters (eg for signatures) @@ -117,28 +117,28 @@ int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, * parameters ANY DEFINED BY algorithm OPTIONAL } */ int mbedtls_x509_get_alg_null( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *alg ) + mbedtls_x509_buf *alg ) { int ret; - if( ( ret = mbedtls_asn1_get_alg_null( p, end, alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_alg_null( p, end, alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - return( 0 ); + return ( 0 ); } /* * Parse an algorithm identifier with (optional) paramaters */ int mbedtls_x509_get_alg( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *alg, mbedtls_x509_buf *params ) + mbedtls_x509_buf *alg, mbedtls_x509_buf *params ) { int ret; - if( ( ret = mbedtls_asn1_get_alg( p, end, alg, params ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_alg( p, end, alg, params ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) @@ -160,42 +160,42 @@ static int x509_get_hash_alg( const mbedtls_x509_buf *alg, mbedtls_md_type_t *md size_t len; /* Make sure we got a SEQUENCE and setup bounds */ - if( alg->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( alg->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); p = (unsigned char *) alg->p; end = p + alg->len; - if( p >= end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( p >= end ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); /* Parse md_oid */ md_oid.tag = *p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &md_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &md_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); md_oid.p = p; p += md_oid.len; /* Get md_alg from md_oid */ - if( ( ret = mbedtls_oid_get_md_alg( &md_oid, md_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_oid_get_md_alg( &md_oid, md_alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); /* Make sure params is absent of NULL */ - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_NULL ) ) != 0 || len != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_NULL ) ) != 0 || len != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -211,8 +211,8 @@ static int x509_get_hash_alg( const mbedtls_x509_buf *alg, mbedtls_md_type_t *md * option. Enfore this at parsing time. */ int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, - mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, - int *salt_len ) + mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, + int *salt_len ) { int ret; unsigned char *p; @@ -226,121 +226,113 @@ int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, *salt_len = 20; /* Make sure params is a SEQUENCE and setup bounds */ - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); p = (unsigned char *) params->p; end = p + params->len; - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * HashAlgorithm */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) { end2 = p + len; /* HashAlgorithm ::= AlgorithmIdentifier (without parameters) */ - if( ( ret = mbedtls_x509_get_alg_null( &p, end2, &alg_id ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_alg_null( &p, end2, &alg_id ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_oid_get_md_alg( &alg_id, md_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_oid_get_md_alg( &alg_id, md_alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * MaskGenAlgorithm */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) { end2 = p + len; /* MaskGenAlgorithm ::= AlgorithmIdentifier (params = HashAlgorithm) */ - if( ( ret = mbedtls_x509_get_alg( &p, end2, &alg_id, &alg_params ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_alg( &p, end2, &alg_id, &alg_params ) ) != 0 ) + return ( ret ); /* Only MFG1 is recognised for now */ - if( MBEDTLS_OID_CMP( MBEDTLS_OID_MGF1, &alg_id ) != 0 ) - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE + - MBEDTLS_ERR_OID_NOT_FOUND ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_MGF1, &alg_id ) != 0 ) + return ( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE + + MBEDTLS_ERR_OID_NOT_FOUND ); /* Parse HashAlgorithm */ - if( ( ret = x509_get_hash_alg( &alg_params, mgf_md ) ) != 0 ) - return( ret ); + if ( ( ret = x509_get_hash_alg( &alg_params, mgf_md ) ) != 0 ) + return ( ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * salt_len */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 2 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 2 ) ) == 0 ) { end2 = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end2, salt_len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end2, salt_len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * trailer_field (if present, must be 1) */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 3 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 3 ) ) == 0 ) { int trailer_field; end2 = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end2, &trailer_field ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end2, &trailer_field ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( trailer_field != 1 ) - return( MBEDTLS_ERR_X509_INVALID_ALG ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( trailer_field != 1 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ @@ -362,46 +354,46 @@ static int x509_get_attr_type_value( unsigned char **p, mbedtls_x509_buf *oid; mbedtls_x509_buf *val; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); oid = &cur->oid; oid->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &oid->len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &oid->len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); oid->p = *p; *p += oid->len; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( **p != MBEDTLS_ASN1_BMP_STRING && **p != MBEDTLS_ASN1_UTF8_STRING && - **p != MBEDTLS_ASN1_T61_STRING && **p != MBEDTLS_ASN1_PRINTABLE_STRING && - **p != MBEDTLS_ASN1_IA5_STRING && **p != MBEDTLS_ASN1_UNIVERSAL_STRING && - **p != MBEDTLS_ASN1_BIT_STRING ) - return( MBEDTLS_ERR_X509_INVALID_NAME + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( **p != MBEDTLS_ASN1_BMP_STRING && **p != MBEDTLS_ASN1_UTF8_STRING && + **p != MBEDTLS_ASN1_T61_STRING && **p != MBEDTLS_ASN1_PRINTABLE_STRING && + **p != MBEDTLS_ASN1_IA5_STRING && **p != MBEDTLS_ASN1_UNIVERSAL_STRING && + **p != MBEDTLS_ASN1_BIT_STRING ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); val = &cur->val; val->tag = *(*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &val->len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, &val->len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); val->p = *p; *p += val->len; cur->next = NULL; - return( 0 ); + return ( 0 ); } /* @@ -428,30 +420,28 @@ static int x509_get_attr_type_value( unsigned char **p, * this list, eg mbedtls_x509_dn_gets(). */ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, - mbedtls_x509_name *cur ) + mbedtls_x509_name *cur ) { int ret; size_t set_len; const unsigned char *end_set; /* don't use recursion, we'd risk stack overflow if not optimized */ - while( 1 ) - { + while ( 1 ) { /* * parse SET */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &set_len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SET ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &set_len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SET ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); end_set = *p + set_len; - while( 1 ) - { - if( ( ret = x509_get_attr_type_value( p, end_set, cur ) ) != 0 ) - return( ret ); + while ( 1 ) { + if ( ( ret = x509_get_attr_type_value( p, end_set, cur ) ) != 0 ) + return ( ret ); - if( *p == end_set ) + if ( *p == end_set ) break; /* Mark this item as being no the only one in a set */ @@ -459,8 +449,8 @@ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, cur->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_name ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); cur = cur->next; } @@ -468,22 +458,23 @@ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, /* * continue until end of SEQUENCE is reached */ - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); cur->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_name ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); cur = cur->next; } } -static int x509_parse_int(unsigned char **p, unsigned n, int *res){ +static int x509_parse_int(unsigned char **p, unsigned n, int *res) +{ *res = 0; - for( ; n > 0; --n ){ - if( ( **p < '0') || ( **p > '9' ) ) return MBEDTLS_ERR_X509_INVALID_DATE; + for ( ; n > 0; --n ) { + if ( ( **p < '0') || ( **p > '9' ) ) return MBEDTLS_ERR_X509_INVALID_DATE; *res *= 10; *res += (*(*p)++ - '0'); } @@ -499,22 +490,30 @@ static int x509_date_is_valid(const mbedtls_x509_time *time) CHECK_RANGE( 0, 59, time->min ); CHECK_RANGE( 0, 59, time->sec ); - switch( time->mon ) - { - case 1: case 3: case 5: case 7: case 8: case 10: case 12: + switch ( time->mon ) { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: CHECK_RANGE( 1, 31, time->day ); break; - case 4: case 6: case 9: case 11: + case 4: + case 6: + case 9: + case 11: CHECK_RANGE( 1, 30, time->day ); break; case 2: CHECK_RANGE( 1, 28 + (time->year % 4 == 0), time->day ); break; default: - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -523,68 +522,64 @@ static int x509_date_is_valid(const mbedtls_x509_time *time) * generalTime GeneralizedTime } */ int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, - mbedtls_x509_time *time ) + mbedtls_x509_time *time ) { int ret; size_t len; unsigned char tag; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); tag = **p; - if( tag == MBEDTLS_ASN1_UTC_TIME ) - { + if ( tag == MBEDTLS_ASN1_UTC_TIME ) { (*p)++; ret = mbedtls_asn1_get_len( p, end, &len ); - if( ret != 0 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + ret ); CHECK( x509_parse_int( p, 2, &time->year ) ); CHECK( x509_parse_int( p, 2, &time->mon ) ); CHECK( x509_parse_int( p, 2, &time->day ) ); CHECK( x509_parse_int( p, 2, &time->hour ) ); CHECK( x509_parse_int( p, 2, &time->min ) ); - if( len > 10 ) + if ( len > 10 ) CHECK( x509_parse_int( p, 2, &time->sec ) ); - if( len > 12 && *(*p)++ != 'Z' ) - return( MBEDTLS_ERR_X509_INVALID_DATE ); + if ( len > 12 && *(*p)++ != 'Z' ) + return ( MBEDTLS_ERR_X509_INVALID_DATE ); time->year += 100 * ( time->year < 50 ); time->year += 1900; CHECK( x509_date_is_valid( time ) ); - return( 0 ); - } - else if( tag == MBEDTLS_ASN1_GENERALIZED_TIME ) - { + return ( 0 ); + } else if ( tag == MBEDTLS_ASN1_GENERALIZED_TIME ) { (*p)++; ret = mbedtls_asn1_get_len( p, end, &len ); - if( ret != 0 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + ret ); CHECK( x509_parse_int( p, 4, &time->year ) ); CHECK( x509_parse_int( p, 2, &time->mon ) ); CHECK( x509_parse_int( p, 2, &time->day ) ); CHECK( x509_parse_int( p, 2, &time->hour ) ); CHECK( x509_parse_int( p, 2, &time->min ) ); - if( len > 12 ) + if ( len > 12 ) CHECK( x509_parse_int( p, 2, &time->sec ) ); - if( len > 14 && *(*p)++ != 'Z' ) - return( MBEDTLS_ERR_X509_INVALID_DATE ); + if ( len > 14 && *(*p)++ != 'Z' ) + return ( MBEDTLS_ERR_X509_INVALID_DATE ); CHECK( x509_date_is_valid( time ) ); - return( 0 ); - } - else - return( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + return ( 0 ); + } else + return ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x509_buf *sig ) @@ -593,14 +588,14 @@ int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x size_t len; int tag_type; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_SIGNATURE + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_SIGNATURE + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); tag_type = **p; - if( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_SIGNATURE + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_SIGNATURE + ret ); sig->tag = tag_type; sig->len = len; @@ -608,55 +603,52 @@ int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x *p += len; - return( 0 ); + return ( 0 ); } /* * Get signature algorithm from alg OID and optional parameters */ int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x509_buf *sig_params, - mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, - void **sig_opts ) + mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, + void **sig_opts ) { int ret; - if( *sig_opts != NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( *sig_opts != NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - if( ( ret = mbedtls_oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + ret ); + if ( ( ret = mbedtls_oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + ret ); #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - if( *pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { + if ( *pk_alg == MBEDTLS_PK_RSASSA_PSS ) { mbedtls_pk_rsassa_pss_options *pss_opts; pss_opts = mbedtls_calloc( 1, sizeof( mbedtls_pk_rsassa_pss_options ) ); - if( pss_opts == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( pss_opts == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); ret = mbedtls_x509_get_rsassa_pss_params( sig_params, - md_alg, - &pss_opts->mgf1_hash_id, - &pss_opts->expected_salt_len ); - if( ret != 0 ) - { + md_alg, + &pss_opts->mgf1_hash_id, + &pss_opts->expected_salt_len ); + if ( ret != 0 ) { mbedtls_free( pss_opts ); - return( ret ); + return ( ret ); } *sig_opts = (void *) pss_opts; - } - else + } else #endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ { /* Make sure parameters are absent or NULL */ - if( ( sig_params->tag != MBEDTLS_ASN1_NULL && sig_params->tag != 0 ) || - sig_params->len != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG ); + if ( ( sig_params->tag != MBEDTLS_ASN1_NULL && sig_params->tag != 0 ) || + sig_params->len != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG ); } - return( 0 ); + return ( 0 ); } /* @@ -664,19 +656,19 @@ int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x50 * be either manually updated or extensions should be parsed! */ int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *ext, int tag ) + mbedtls_x509_buf *ext, int tag ) { int ret; size_t len; - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); ext->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | tag ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | tag ) ) != 0 ) + return ( ret ); ext->p = *p; end = *p + ext->len; @@ -689,15 +681,15 @@ int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, * critical BOOLEAN DEFAULT FALSE, * extnValue OCTET STRING } */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( end != *p + len ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( end != *p + len ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -719,36 +711,32 @@ int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ) p = buf; n = size; - while( name != NULL ) - { - if( !name->oid.p ) - { + while ( name != NULL ) { + if ( !name->oid.p ) { name = name->next; continue; } - if( name != dn ) - { + if ( name != dn ) { ret = mbedtls_snprintf( p, n, merge ? " + " : ", " ); MBEDTLS_X509_SAFE_SNPRINTF; } ret = mbedtls_oid_get_attr_short_name( &name->oid, &short_name ); - if( ret == 0 ) + if ( ret == 0 ) ret = mbedtls_snprintf( p, n, "%s=", short_name ); else ret = mbedtls_snprintf( p, n, "\?\?=" ); MBEDTLS_X509_SAFE_SNPRINTF; - for( i = 0; i < name->val.len; i++ ) - { - if( i >= sizeof( s ) - 1 ) + for ( i = 0; i < name->val.len; i++ ) { + if ( i >= sizeof( s ) - 1 ) break; c = name->val.p[i]; - if( c < 32 || c == 127 || ( c > 128 && c < 160 ) ) - s[i] = '?'; + if ( c < 32 || c == 127 || ( c > 128 && c < 160 ) ) + s[i] = '?'; else s[i] = c; } s[i] = '\0'; @@ -759,7 +747,7 @@ int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ) name = name->next; } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* @@ -776,33 +764,31 @@ int mbedtls_x509_serial_gets( char *buf, size_t size, const mbedtls_x509_buf *se n = size; nr = ( serial->len <= 32 ) - ? serial->len : 28; + ? serial->len : 28; - for( i = 0; i < nr; i++ ) - { - if( i == 0 && nr > 1 && serial->p[i] == 0x0 ) + for ( i = 0; i < nr; i++ ) { + if ( i == 0 && nr > 1 && serial->p[i] == 0x0 ) continue; ret = mbedtls_snprintf( p, n, "%02X%s", - serial->p[i], ( i < nr - 1 ) ? ":" : "" ); + serial->p[i], ( i < nr - 1 ) ? ":" : "" ); MBEDTLS_X509_SAFE_SNPRINTF; } - if( nr != serial->len ) - { + if ( nr != serial->len ) { ret = mbedtls_snprintf( p, n, "...." ); MBEDTLS_X509_SAFE_SNPRINTF; } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* * Helper for writing signature algorithms */ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *sig_oid, - mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, - const void *sig_opts ) + mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, + const void *sig_opts ) { int ret; char *p = buf; @@ -810,15 +796,14 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s const char *desc = NULL; ret = mbedtls_oid_get_sig_alg_desc( sig_oid, &desc ); - if( ret != 0 ) + if ( ret != 0 ) ret = mbedtls_snprintf( p, n, "???" ); else ret = mbedtls_snprintf( p, n, "%s", desc ); MBEDTLS_X509_SAFE_SNPRINTF; #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - if( pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { + if ( pk_alg == MBEDTLS_PK_RSASSA_PSS ) { const mbedtls_pk_rsassa_pss_options *pss_opts; const mbedtls_md_info_t *md_info, *mgf_md_info; @@ -828,9 +813,9 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s mgf_md_info = mbedtls_md_info_from_type( pss_opts->mgf1_hash_id ); ret = mbedtls_snprintf( p, n, " (%s, MGF1-%s, 0x%02X)", - md_info ? mbedtls_md_get_name( md_info ) : "???", - mgf_md_info ? mbedtls_md_get_name( mgf_md_info ) : "???", - pss_opts->expected_salt_len ); + md_info ? mbedtls_md_get_name( md_info ) : "???", + mgf_md_info ? mbedtls_md_get_name( mgf_md_info ) : "???", + pss_opts->expected_salt_len ); MBEDTLS_X509_SAFE_SNPRINTF; } #else @@ -839,7 +824,7 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s ((void) sig_opts); #endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ - return( (int)( size - n ) ); + return ( (int)( size - n ) ); } /* @@ -854,7 +839,7 @@ int mbedtls_x509_key_size_helper( char *buf, size_t buf_size, const char *name ) ret = mbedtls_snprintf( p, n, "%s key size", name ); MBEDTLS_X509_SAFE_SNPRINTF; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_HAVE_TIME_DATE) @@ -876,7 +861,7 @@ static int x509_get_current_time( mbedtls_x509_time *now ) now->min = st.wMinute; now->sec = st.wSecond; - return( 0 ); + return ( 0 ); } #else static int x509_get_current_time( mbedtls_x509_time *now ) @@ -886,17 +871,16 @@ static int x509_get_current_time( mbedtls_x509_time *now ) int ret = 0; #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_lock( &mbedtls_threading_gmtime_mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_lock( &mbedtls_threading_gmtime_mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif tt = mbedtls_time( NULL ); lt = gmtime( &tt ); - if( lt == NULL ) + if ( lt == NULL ) ret = -1; - else - { + else { now->year = lt->tm_year + 1900; now->mon = lt->tm_mon + 1; now->day = lt->tm_mday; @@ -906,11 +890,11 @@ static int x509_get_current_time( mbedtls_x509_time *now ) } #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &mbedtls_threading_gmtime_mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &mbedtls_threading_gmtime_mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } #endif /* _WIN32 && !EFIX64 && !EFI32 */ @@ -919,60 +903,60 @@ static int x509_get_current_time( mbedtls_x509_time *now ) */ static int x509_check_time( const mbedtls_x509_time *before, const mbedtls_x509_time *after ) { - if( before->year > after->year ) - return( 1 ); + if ( before->year > after->year ) + return ( 1 ); - if( before->year == after->year && - before->mon > after->mon ) - return( 1 ); + if ( before->year == after->year && + before->mon > after->mon ) + return ( 1 ); - if( before->year == after->year && - before->mon == after->mon && - before->day > after->day ) - return( 1 ); + if ( before->year == after->year && + before->mon == after->mon && + before->day > after->day ) + return ( 1 ); - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour > after->hour ) - return( 1 ); + if ( before->year == after->year && + before->mon == after->mon && + before->day == after->day && + before->hour > after->hour ) + return ( 1 ); - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour == after->hour && - before->min > after->min ) - return( 1 ); + if ( before->year == after->year && + before->mon == after->mon && + before->day == after->day && + before->hour == after->hour && + before->min > after->min ) + return ( 1 ); - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour == after->hour && - before->min == after->min && - before->sec > after->sec ) - return( 1 ); + if ( before->year == after->year && + before->mon == after->mon && + before->day == after->day && + before->hour == after->hour && + before->min == after->min && + before->sec > after->sec ) + return ( 1 ); - return( 0 ); + return ( 0 ); } int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) { mbedtls_x509_time now; - if( x509_get_current_time( &now ) != 0 ) - return( 1 ); + if ( x509_get_current_time( &now ) != 0 ) + return ( 1 ); - return( x509_check_time( &now, to ) ); + return ( x509_check_time( &now, to ) ); } int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) { mbedtls_x509_time now; - if( x509_get_current_time( &now ) != 0 ) - return( 1 ); + if ( x509_get_current_time( &now ) != 0 ) + return ( 1 ); - return( x509_check_time( from, &now ) ); + return ( x509_check_time( from, &now ) ); } #else /* MBEDTLS_HAVE_TIME_DATE */ @@ -980,13 +964,13 @@ int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) { ((void) to); - return( 0 ); + return ( 0 ); } int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) { ((void) from); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVE_TIME_DATE */ @@ -1006,55 +990,52 @@ int mbedtls_x509_self_test( int verbose ) mbedtls_x509_crt cacert; mbedtls_x509_crt clicert; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " X.509 certificate load: " ); mbedtls_x509_crt_init( &clicert ); ret = mbedtls_x509_crt_parse( &clicert, (const unsigned char *) mbedtls_test_cli_crt, - mbedtls_test_cli_crt_len ); - if( ret != 0 ) - { - if( verbose != 0 ) + mbedtls_test_cli_crt_len ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); + return ( ret ); } mbedtls_x509_crt_init( &cacert ); ret = mbedtls_x509_crt_parse( &cacert, (const unsigned char *) mbedtls_test_ca_crt, - mbedtls_test_ca_crt_len ); - if( ret != 0 ) - { - if( verbose != 0 ) + mbedtls_test_ca_crt_len ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); + return ( ret ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n X.509 signature verify: "); ret = mbedtls_x509_crt_verify( &clicert, &cacert, NULL, NULL, &flags, NULL, NULL ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); + return ( ret ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n\n"); mbedtls_x509_crt_free( &cacert ); mbedtls_x509_crt_free( &clicert ); - return( 0 ); + return ( 0 ); #else ((void) verbose); - return( 0 ); + return ( 0 ); #endif /* MBEDTLS_CERTS_C && MBEDTLS_SHA1_C */ } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_create.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_create.c index df20ec8e..b1312067 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_create.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_create.c @@ -41,8 +41,7 @@ typedef struct { #define ADD_STRLEN( s ) s, sizeof( s ) - 1 -static const x509_attr_descriptor_t x509_attrs[] = -{ +static const x509_attr_descriptor_t x509_attrs[] = { { ADD_STRLEN( "CN" ), MBEDTLS_OID_AT_CN }, { ADD_STRLEN( "commonName" ), MBEDTLS_OID_AT_CN }, { ADD_STRLEN( "C" ), MBEDTLS_OID_AT_COUNTRY }, @@ -78,12 +77,12 @@ static const char *x509_at_oid_from_name( const char *name, size_t name_len ) { const x509_attr_descriptor_t *cur; - for( cur = x509_attrs; cur->name != NULL; cur++ ) - if( cur->name_len == name_len && - strncmp( cur->name, name, name_len ) == 0 ) + for ( cur = x509_attrs; cur->name != NULL; cur++ ) + if ( cur->name_len == name_len && + strncmp( cur->name, name, name_len ) == 0 ) break; - return( cur->oid ); + return ( cur->oid ); } int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *name ) @@ -99,12 +98,9 @@ int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *na /* Clear existing chain if present */ mbedtls_asn1_free_named_data_list( head ); - while( c <= end ) - { - if( in_tag && *c == '=' ) - { - if( ( oid = x509_at_oid_from_name( s, c - s ) ) == NULL ) - { + while ( c <= end ) { + if ( in_tag && *c == '=' ) { + if ( ( oid = x509_at_oid_from_name( s, c - s ) ) == NULL ) { ret = MBEDTLS_ERR_X509_UNKNOWN_OID; goto exit; } @@ -114,39 +110,32 @@ int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *na d = data; } - if( !in_tag && *c == '\\' && c != end ) - { + if ( !in_tag && *c == '\\' && c != end ) { c++; /* Check for valid escaped characters */ - if( c == end || *c != ',' ) - { + if ( c == end || *c != ',' ) { ret = MBEDTLS_ERR_X509_INVALID_NAME; goto exit; } - } - else if( !in_tag && ( *c == ',' || c == end ) ) - { - if( mbedtls_asn1_store_named_data( head, oid, strlen( oid ), - (unsigned char *) data, - d - data ) == NULL ) - { - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + } else if ( !in_tag && ( *c == ',' || c == end ) ) { + if ( mbedtls_asn1_store_named_data( head, oid, strlen( oid ), + (unsigned char *) data, + d - data ) == NULL ) { + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); } - while( c < end && *(c + 1) == ' ' ) + while ( c < end && *(c + 1) == ' ' ) c++; s = c + 1; in_tag = 1; } - if( !in_tag && s != c + 1 ) - { + if ( !in_tag && s != c + 1 ) { *(d++) = *c; - if( d - data == MBEDTLS_X509_MAX_DN_NAME_SIZE ) - { + if ( d - data == MBEDTLS_X509_MAX_DN_NAME_SIZE ) { ret = MBEDTLS_ERR_X509_INVALID_NAME; goto exit; } @@ -157,27 +146,26 @@ int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *na exit: - return( ret ); + return ( ret ); } /* The first byte of the value in the mbedtls_asn1_named_data structure is reserved * to store the critical boolean for us */ int mbedtls_x509_set_extension( mbedtls_asn1_named_data **head, const char *oid, size_t oid_len, - int critical, const unsigned char *val, size_t val_len ) + int critical, const unsigned char *val, size_t val_len ) { mbedtls_asn1_named_data *cur; - if( ( cur = mbedtls_asn1_store_named_data( head, oid, oid_len, - NULL, val_len + 1 ) ) == NULL ) - { - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( ( cur = mbedtls_asn1_store_named_data( head, oid, oid_len, + NULL, val_len + 1 ) ) == NULL ) { + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); } cur->val.p[0] = critical; memcpy( cur->val.p + 1, val, val_len ); - return( 0 ); + return ( 0 ); } /* @@ -201,18 +189,15 @@ static int x509_write_name( unsigned char **p, unsigned char *start, // Write PrintableString for all except MBEDTLS_OID_PKCS9_EMAIL // - if( MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_EMAIL ) == oid_len && - memcmp( oid, MBEDTLS_OID_PKCS9_EMAIL, oid_len ) == 0 ) - { + if ( MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_EMAIL ) == oid_len && + memcmp( oid, MBEDTLS_OID_PKCS9_EMAIL, oid_len ) == 0 ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_ia5_string( p, start, - (const char *) name, - name_len ) ); - } - else - { + (const char *) name, + name_len ) ); + } else { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_printable_string( p, start, - (const char *) name, - name_len ) ); + (const char *) name, + name_len ) ); } // Write OID @@ -221,53 +206,52 @@ static int x509_write_name( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SET ) ); + MBEDTLS_ASN1_SET ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_x509_write_names( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ) + mbedtls_asn1_named_data *first ) { int ret; size_t len = 0; mbedtls_asn1_named_data *cur = first; - while( cur != NULL ) - { + while ( cur != NULL ) { MBEDTLS_ASN1_CHK_ADD( len, x509_write_name( p, start, (char *) cur->oid.p, - cur->oid.len, - cur->val.p, cur->val.len ) ); + cur->oid.len, + cur->val.p, cur->val.len ) ); cur = cur->next; } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_x509_write_sig( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - unsigned char *sig, size_t size ) + const char *oid, size_t oid_len, + unsigned char *sig, size_t size ) { int ret; size_t len = 0; - if( *p < start || (size_t)( *p - start ) < size ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < size ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len = size; (*p) -= len; memcpy( *p, sig, len ); - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = 0; len += 1; @@ -278,9 +262,9 @@ int mbedtls_x509_write_sig( unsigned char **p, unsigned char *start, // Write OID // MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( p, start, oid, - oid_len, 0 ) ); + oid_len, 0 ) ); - return( (int) len ); + return ( (int) len ); } static int x509_write_extension( unsigned char **p, unsigned char *start, @@ -290,25 +274,24 @@ static int x509_write_extension( unsigned char **p, unsigned char *start, size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, ext->val.p + 1, - ext->val.len - 1 ) ); + ext->val.len - 1 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, ext->val.len - 1 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OCTET_STRING ) ); - if( ext->val.p[0] != 0 ) - { + if ( ext->val.p[0] != 0 ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_bool( p, start, 1 ) ); } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, ext->oid.p, - ext->oid.len ) ); + ext->oid.len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, ext->oid.len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OID ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } /* @@ -322,19 +305,18 @@ static int x509_write_extension( unsigned char **p, unsigned char *start, * } */ int mbedtls_x509_write_extensions( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ) + mbedtls_asn1_named_data *first ) { int ret; size_t len = 0; mbedtls_asn1_named_data *cur_ext = first; - while( cur_ext != NULL ) - { + while ( cur_ext != NULL ) { MBEDTLS_ASN1_CHK_ADD( len, x509_write_extension( p, start, cur_ext ) ); cur_ext = cur_ext->next; } - return( (int) len ); + return ( (int) len ); } #endif /* MBEDTLS_X509_CREATE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crl.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crl.c index 7b2b4733..843c469e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crl.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crl.c @@ -67,31 +67,31 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* * Version ::= INTEGER { v1(0), v2(1) } */ static int x509_crl_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) + const unsigned char *end, + int *ver ) { int ret; - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return ( 0 ); } - return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); + return ( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); } - return( 0 ); + return ( 0 ); } /* @@ -105,43 +105,41 @@ static int x509_get_crl_ext( unsigned char **p, size_t len = 0; /* Get explicit tag */ - if( ( ret = mbedtls_x509_get_ext( p, end, ext, 0) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_x509_get_ext( p, end, ext, 0) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } - while( *p < end ) - { - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + while ( *p < end ) { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); *p += len; } - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* * X.509 CRL v2 entry extensions (no extensions parsed yet.) */ static int x509_get_crl_entry_ext( unsigned char **p, - const unsigned char *end, - mbedtls_x509_buf *ext ) + const unsigned char *end, + mbedtls_x509_buf *ext ) { int ret; size_t len = 0; /* OPTIONAL */ - if( end <= *p ) - return( 0 ); + if ( end <= *p ) + return ( 0 ); ext->tag = **p; ext->p = *p; @@ -150,37 +148,34 @@ static int x509_get_crl_entry_ext( unsigned char **p, * Get CRL-entry extension sequence header * crlEntryExtensions Extensions OPTIONAL -- if present, MUST be v2 */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { ext->p = NULL; - return( 0 ); + return ( 0 ); } - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); } end = *p + ext->len; - if( end != *p + ext->len ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( end != *p + ext->len ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) - { - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + while ( *p < end ) { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); *p += len; } - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -194,29 +189,26 @@ static int x509_get_entries( unsigned char **p, size_t entry_len; mbedtls_x509_crl_entry *cur_entry = entry; - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_tag( p, end, &entry_len, - MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &entry_len, + MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } end = *p + entry_len; - while( *p < end ) - { + while ( *p < end ) { size_t len2; const unsigned char *end2; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len2, - MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len2, + MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) { + return ( ret ); } cur_entry->raw.tag = **p; @@ -224,36 +216,35 @@ static int x509_get_entries( unsigned char **p, cur_entry->raw.len = len2; end2 = *p + len2; - if( ( ret = mbedtls_x509_get_serial( p, end2, &cur_entry->serial ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_serial( p, end2, &cur_entry->serial ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_x509_get_time( p, end2, - &cur_entry->revocation_date ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_time( p, end2, + &cur_entry->revocation_date ) ) != 0 ) + return ( ret ); - if( ( ret = x509_get_crl_entry_ext( p, end2, - &cur_entry->entry_ext ) ) != 0 ) - return( ret ); + if ( ( ret = x509_get_crl_entry_ext( p, end2, + &cur_entry->entry_ext ) ) != 0 ) + return ( ret ); - if( *p < end ) - { + if ( *p < end ) { cur_entry->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crl_entry ) ); - if( cur_entry->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( cur_entry->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); cur_entry = cur_entry->next; } } - return( 0 ); + return ( 0 ); } /* * Parse one CRLs in DER format and append it to the chained list */ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, - const unsigned char *buf, size_t buflen ) + const unsigned char *buf, size_t buflen ) { int ret; size_t len; @@ -264,8 +255,8 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, /* * Check for valid input */ - if( crl == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( crl == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); memset( &sig_params1, 0, sizeof( mbedtls_x509_buf ) ); memset( &sig_params2, 0, sizeof( mbedtls_x509_buf ) ); @@ -274,17 +265,15 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, /* * Add new CRL on the end of the chain if needed. */ - while( crl->version != 0 && crl->next != NULL ) + while ( crl->version != 0 && crl->next != NULL ) crl = crl->next; - if( crl->version != 0 && crl->next == NULL ) - { + if ( crl->version != 0 && crl->next == NULL ) { crl->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crl ) ); - if( crl->next == NULL ) - { + if ( crl->next == NULL ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); } mbedtls_x509_crl_init( crl->next ); @@ -294,8 +283,8 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, /* * Copy raw DER-encoded CRL */ - if( ( p = mbedtls_calloc( 1, buflen ) ) == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( ( p = mbedtls_calloc( 1, buflen ) ) == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); memcpy( p, buf, buflen ); @@ -310,18 +299,16 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - if( len != (size_t) ( end - p ) ) - { + if ( len != (size_t) ( end - p ) ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } /* @@ -329,11 +316,10 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, */ crl->tbs.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } end = p + len; @@ -345,27 +331,24 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * * signature AlgorithmIdentifier */ - if( ( ret = x509_crl_get_version( &p, end, &crl->version ) ) != 0 || - ( ret = mbedtls_x509_get_alg( &p, end, &crl->sig_oid, &sig_params1 ) ) != 0 ) - { + if ( ( ret = x509_crl_get_version( &p, end, &crl->version ) ) != 0 || + ( ret = mbedtls_x509_get_alg( &p, end, &crl->sig_oid, &sig_params1 ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } crl->version++; - if( crl->version > 2 ) - { + if ( crl->version > 2 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); + return ( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } - if( ( ret = mbedtls_x509_get_sig_alg( &crl->sig_oid, &sig_params1, - &crl->sig_md, &crl->sig_pk, - &crl->sig_opts ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig_alg( &crl->sig_oid, &sig_params1, + &crl->sig_md, &crl->sig_pk, + &crl->sig_opts ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); + return ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); } /* @@ -373,17 +356,15 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, */ crl->issuer_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_x509_get_name( &p, p + len, &crl->issuer ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_name( &p, p + len, &crl->issuer ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } crl->issuer_raw.len = p - crl->issuer_raw.p; @@ -392,21 +373,18 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * thisUpdate Time * nextUpdate Time OPTIONAL */ - if( ( ret = mbedtls_x509_get_time( &p, end, &crl->this_update ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_time( &p, end, &crl->this_update ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_x509_get_time( &p, end, &crl->next_update ) ) != 0 ) - { - if( ret != ( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) && - ret != ( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ) ) - { + if ( ( ret = mbedtls_x509_get_time( &p, end, &crl->next_update ) ) != 0 ) { + if ( ret != ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) && + ret != ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ) ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } } @@ -418,32 +396,28 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * -- if present, MUST be v2 * } OPTIONAL */ - if( ( ret = x509_get_entries( &p, end, &crl->entry ) ) != 0 ) - { + if ( ( ret = x509_get_entries( &p, end, &crl->entry ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } /* * crlExtensions EXPLICIT Extensions OPTIONAL * -- if present, MUST be v2 */ - if( crl->version == 2 ) - { + if ( crl->version == 2 ) { ret = x509_get_crl_ext( &p, end, &crl->crl_ext ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } end = crl->raw.p + crl->raw.len; @@ -452,36 +426,32 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } - if( crl->sig_oid.len != sig_oid2.len || - memcmp( crl->sig_oid.p, sig_oid2.p, crl->sig_oid.len ) != 0 || - sig_params1.len != sig_params2.len || - ( sig_params1.len != 0 && - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) - { + if ( crl->sig_oid.len != sig_oid2.len || + memcmp( crl->sig_oid.p, sig_oid2.p, crl->sig_oid.len ) != 0 || + sig_params1.len != sig_params2.len || + ( sig_params1.len != 0 && + memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_SIG_MISMATCH ); + return ( MBEDTLS_ERR_X509_SIG_MISMATCH ); } - if( ( ret = mbedtls_x509_get_sig( &p, end, &crl->sig ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig( &p, end, &crl->sig ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return ( 0 ); } /* @@ -495,25 +465,23 @@ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, s mbedtls_pem_context pem; int is_pem = 0; - if( chain == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( chain == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - do - { + do { mbedtls_pem_init( &pem ); // Avoid calling mbedtls_pem_read_buffer() on non-null-terminated // string - if( buflen == 0 || buf[buflen - 1] != '\0' ) + if ( buflen == 0 || buf[buflen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, "-----BEGIN X509 CRL-----", "-----END X509 CRL-----", - buf, NULL, 0, &use_len ); + buf, NULL, 0, &use_len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ @@ -522,29 +490,26 @@ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, s buflen -= use_len; buf += use_len; - if( ( ret = mbedtls_x509_crl_parse_der( chain, - pem.buf, pem.buflen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509_crl_parse_der( chain, + pem.buf, pem.buflen ) ) != 0 ) { + return ( ret ); } mbedtls_pem_free( &pem ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - return( ret ); + return ( ret ); } } /* In the PEM case, buflen is 1 at the end, for the terminated NULL byte. * And a valid CRL cannot be less than 1 byte anyway. */ - while( is_pem && buflen > 1 ); + while ( is_pem && buflen > 1 ); - if( is_pem ) - return( 0 ); + if ( is_pem ) + return ( 0 ); else #endif /* MBEDTLS_PEM_PARSE_C */ - return( mbedtls_x509_crl_parse_der( chain, buf, buflen ) ); + return ( mbedtls_x509_crl_parse_der( chain, buf, buflen ) ); } #if defined(MBEDTLS_FS_IO) @@ -557,15 +522,15 @@ int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_x509_crl_parse( chain, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -578,7 +543,7 @@ int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ) * Return an informational string about the CRL. */ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_crl *crl ) + const mbedtls_x509_crl *crl ) { int ret; size_t n; @@ -589,7 +554,7 @@ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, n = size; ret = mbedtls_snprintf( p, n, "%sCRL version : %d", - prefix, crl->version ); + prefix, crl->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sissuer name : ", prefix ); @@ -598,39 +563,38 @@ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sthis update : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crl->this_update.year, crl->this_update.mon, - crl->this_update.day, crl->this_update.hour, - crl->this_update.min, crl->this_update.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crl->this_update.year, crl->this_update.mon, + crl->this_update.day, crl->this_update.hour, + crl->this_update.min, crl->this_update.sec ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%snext update : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crl->next_update.year, crl->next_update.mon, - crl->next_update.day, crl->next_update.hour, - crl->next_update.min, crl->next_update.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crl->next_update.year, crl->next_update.mon, + crl->next_update.day, crl->next_update.hour, + crl->next_update.min, crl->next_update.sec ); MBEDTLS_X509_SAFE_SNPRINTF; entry = &crl->entry; ret = mbedtls_snprintf( p, n, "\n%sRevoked certificates:", - prefix ); + prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - while( entry != NULL && entry->raw.len != 0 ) - { + while ( entry != NULL && entry->raw.len != 0 ) { ret = mbedtls_snprintf( p, n, "\n%sserial number: ", - prefix ); + prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_serial_gets( p, n, &entry->serial ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, " revocation date: " \ - "%04d-%02d-%02d %02d:%02d:%02d", - entry->revocation_date.year, entry->revocation_date.mon, - entry->revocation_date.day, entry->revocation_date.hour, - entry->revocation_date.min, entry->revocation_date.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", + entry->revocation_date.year, entry->revocation_date.mon, + entry->revocation_date.day, entry->revocation_date.hour, + entry->revocation_date.min, entry->revocation_date.sec ); MBEDTLS_X509_SAFE_SNPRINTF; entry = entry->next; @@ -640,13 +604,13 @@ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_sig_alg_gets( p, n, &crl->sig_oid, crl->sig_pk, crl->sig_md, - crl->sig_opts ); + crl->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* @@ -669,18 +633,16 @@ void mbedtls_x509_crl_free( mbedtls_x509_crl *crl ) mbedtls_x509_crl_entry *entry_cur; mbedtls_x509_crl_entry *entry_prv; - if( crl == NULL ) + if ( crl == NULL ) return; - do - { + do { #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) mbedtls_free( crl_cur->sig_opts ); #endif name_cur = crl_cur->issuer.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); @@ -688,35 +650,30 @@ void mbedtls_x509_crl_free( mbedtls_x509_crl *crl ) } entry_cur = crl_cur->entry.next; - while( entry_cur != NULL ) - { + while ( entry_cur != NULL ) { entry_prv = entry_cur; entry_cur = entry_cur->next; mbedtls_zeroize( entry_prv, sizeof( mbedtls_x509_crl_entry ) ); mbedtls_free( entry_prv ); } - if( crl_cur->raw.p != NULL ) - { + if ( crl_cur->raw.p != NULL ) { mbedtls_zeroize( crl_cur->raw.p, crl_cur->raw.len ); mbedtls_free( crl_cur->raw.p ); } crl_cur = crl_cur->next; - } - while( crl_cur != NULL ); + } while ( crl_cur != NULL ); crl_cur = crl; - do - { + do { crl_prv = crl_cur; crl_cur = crl_cur->next; mbedtls_zeroize( crl_prv, sizeof( mbedtls_x509_crl ) ); - if( crl_prv != crl ) + if ( crl_prv != crl ) mbedtls_free( crl_prv ); - } - while( crl_cur != NULL ); + } while ( crl_cur != NULL ); } #endif /* MBEDTLS_X509_CRL_PARSE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crt.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crt.c index 60e14f90..8d455070 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crt.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_crt.c @@ -76,15 +76,16 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* * Default profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = { /* Hashes from SHA-1 and above */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_RIPEMD160 ) | @@ -100,8 +101,7 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = /* * Next-default profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = { /* Hashes from SHA-256 and above */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) | @@ -125,8 +125,7 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = /* * NSA Suite B Profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = { /* Only SHA-256 and 384 */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ), @@ -149,10 +148,10 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = static int x509_profile_check_md_alg( const mbedtls_x509_crt_profile *profile, mbedtls_md_type_t md_alg ) { - if( ( profile->allowed_mds & MBEDTLS_X509_ID_FLAG( md_alg ) ) != 0 ) - return( 0 ); + if ( ( profile->allowed_mds & MBEDTLS_X509_ID_FLAG( md_alg ) ) != 0 ) + return ( 0 ); - return( -1 ); + return ( -1 ); } /* @@ -162,10 +161,10 @@ static int x509_profile_check_md_alg( const mbedtls_x509_crt_profile *profile, static int x509_profile_check_pk_alg( const mbedtls_x509_crt_profile *profile, mbedtls_pk_type_t pk_alg ) { - if( ( profile->allowed_pks & MBEDTLS_X509_ID_FLAG( pk_alg ) ) != 0 ) - return( 0 ); + if ( ( profile->allowed_pks & MBEDTLS_X509_ID_FLAG( pk_alg ) ) != 0 ) + return ( 0 ); - return( -1 ); + return ( -1 ); } /* @@ -177,30 +176,28 @@ static int x509_profile_check_key( const mbedtls_x509_crt_profile *profile, const mbedtls_pk_context *pk ) { #if defined(MBEDTLS_RSA_C) - if( pk_alg == MBEDTLS_PK_RSA || pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { - if( mbedtls_pk_get_bitlen( pk ) >= profile->rsa_min_bitlen ) - return( 0 ); + if ( pk_alg == MBEDTLS_PK_RSA || pk_alg == MBEDTLS_PK_RSASSA_PSS ) { + if ( mbedtls_pk_get_bitlen( pk ) >= profile->rsa_min_bitlen ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif #if defined(MBEDTLS_ECP_C) - if( pk_alg == MBEDTLS_PK_ECDSA || - pk_alg == MBEDTLS_PK_ECKEY || - pk_alg == MBEDTLS_PK_ECKEY_DH ) - { + if ( pk_alg == MBEDTLS_PK_ECDSA || + pk_alg == MBEDTLS_PK_ECKEY || + pk_alg == MBEDTLS_PK_ECKEY_DH ) { mbedtls_ecp_group_id gid = mbedtls_pk_ec( *pk )->grp.id; - if( ( profile->allowed_curves & MBEDTLS_X509_ID_FLAG( gid ) ) != 0 ) - return( 0 ); + if ( ( profile->allowed_curves & MBEDTLS_X509_ID_FLAG( gid ) ) != 0 ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif - return( -1 ); + return ( -1 ); } /* @@ -213,28 +210,26 @@ static int x509_get_version( unsigned char **p, int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return ( 0 ); } - return( ret ); + return ( ret ); } end = *p + len; - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); + if ( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_VERSION + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_VERSION + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -250,23 +245,23 @@ static int x509_get_dates( unsigned char **p, int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + ret ); end = *p + len; - if( ( ret = mbedtls_x509_get_time( p, end, from ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_time( p, end, from ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_x509_get_time( p, end, to ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_time( p, end, to ) ) != 0 ) + return ( ret ); - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -278,24 +273,23 @@ static int x509_get_uid( unsigned char **p, { int ret; - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); uid->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &uid->len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | n ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &uid->len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | n ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } uid->p = *p; *p += uid->len; - return( 0 ); + return ( 0 ); } static int x509_get_basic_constraints( unsigned char **p, @@ -314,57 +308,56 @@ static int x509_get_basic_constraints( unsigned char **p, *ca_istrue = 0; /* DEFAULT FALSE */ *max_pathlen = 0; /* endless */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_bool( p, end, ca_istrue ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + if ( ( ret = mbedtls_asn1_get_bool( p, end, ca_istrue ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ret = mbedtls_asn1_get_int( p, end, ca_istrue ); - if( ret != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *ca_istrue != 0 ) + if ( *ca_istrue != 0 ) *ca_istrue = 1; } - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_int( p, end, max_pathlen ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_int( p, end, max_pathlen ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); (*max_pathlen)++; - return( 0 ); + return ( 0 ); } static int x509_get_ns_cert_type( unsigned char **p, - const unsigned char *end, - unsigned char *ns_cert_type) + const unsigned char *end, + unsigned char *ns_cert_type) { int ret; mbedtls_x509_bitstring bs = { 0, 0, NULL }; - if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( bs.len != 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( bs.len != 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); /* Get actual bitstring */ *ns_cert_type = *bs.p; - return( 0 ); + return ( 0 ); } static int x509_get_key_usage( unsigned char **p, @@ -375,21 +368,20 @@ static int x509_get_key_usage( unsigned char **p, size_t i; mbedtls_x509_bitstring bs = { 0, 0, NULL }; - if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( bs.len < 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( bs.len < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); /* Get actual bitstring */ *key_usage = 0; - for( i = 0; i < bs.len && i < sizeof( unsigned int ); i++ ) - { - *key_usage |= (unsigned int) bs.p[i] << (8*i); + for ( i = 0; i < bs.len && i < sizeof( unsigned int ); i++ ) { + *key_usage |= (unsigned int) bs.p[i] << (8 * i); } - return( 0 ); + return ( 0 ); } /* @@ -398,20 +390,20 @@ static int x509_get_key_usage( unsigned char **p, * KeyPurposeId ::= OBJECT IDENTIFIER */ static int x509_get_ext_key_usage( unsigned char **p, - const unsigned char *end, - mbedtls_x509_sequence *ext_key_usage) + const unsigned char *end, + mbedtls_x509_sequence *ext_key_usage) { int ret; - if( ( ret = mbedtls_asn1_get_sequence_of( p, end, ext_key_usage, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_sequence_of( p, end, ext_key_usage, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); /* Sequence length must be >= 1 */ - if( ext_key_usage->buf.p == NULL ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( ext_key_usage->buf.p == NULL ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); - return( 0 ); + return ( 0 ); } /* @@ -451,47 +443,44 @@ static int x509_get_subject_alt_name( unsigned char **p, mbedtls_asn1_sequence *cur = subject_alt_name; /* Get main sequence tag */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) - { - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + while ( *p < end ) { + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); tag = **p; (*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &tag_len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, &tag_len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( ( tag & MBEDTLS_ASN1_CONTEXT_SPECIFIC ) != MBEDTLS_ASN1_CONTEXT_SPECIFIC ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( ( tag & MBEDTLS_ASN1_CONTEXT_SPECIFIC ) != MBEDTLS_ASN1_CONTEXT_SPECIFIC ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); /* Skip everything but DNS name */ - if( tag != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | 2 ) ) - { + if ( tag != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | 2 ) ) { *p += tag_len; continue; } /* Allocate and assign next pointer */ - if( cur->buf.p != NULL ) - { - if( cur->next != NULL ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); + if ( cur->buf.p != NULL ) { + if ( cur->next != NULL ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); cur->next = mbedtls_calloc( 1, sizeof( mbedtls_asn1_sequence ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_ALLOC_FAILED ); cur = cur->next; } @@ -506,11 +495,11 @@ static int x509_get_subject_alt_name( unsigned char **p, /* Set final sequence entry's next pointer to NULL */ cur->next = NULL; - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -525,16 +514,14 @@ static int x509_get_crt_ext( unsigned char **p, size_t len; unsigned char *end_ext_data, *end_ext_octet; - if( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } - while( *p < end ) - { + while ( *p < end ) { /* * Extension ::= SEQUENCE { * extnID OBJECT IDENTIFIER, @@ -545,115 +532,112 @@ static int x509_get_crt_ext( unsigned char **p, int is_critical = 0; /* DEFAULT FALSE */ int ext_type = 0; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); end_ext_data = *p + len; /* Get extension ID */ extn_oid.tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &extn_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &extn_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); extn_oid.p = *p; *p += extn_oid.len; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); /* Get optional critical */ - if( ( ret = mbedtls_asn1_get_bool( p, end_ext_data, &is_critical ) ) != 0 && - ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_bool( p, end_ext_data, &is_critical ) ) != 0 && + ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); /* Data should be octet string type */ - if( ( ret = mbedtls_asn1_get_tag( p, end_ext_data, &len, - MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end_ext_data, &len, + MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); end_ext_octet = *p + len; - if( end_ext_octet != end_ext_data ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( end_ext_octet != end_ext_data ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); /* * Detect supported extensions */ ret = mbedtls_oid_get_x509_ext_type( &extn_oid, &ext_type ); - if( ret != 0 ) - { + if ( ret != 0 ) { /* No parser found, skip extension */ *p = end_ext_octet; #if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) - if( is_critical ) - { + if ( is_critical ) { /* Data is marked as critical: fail */ - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } #endif continue; } /* Forbid repeated extensions */ - if( ( crt->ext_types & ext_type ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); + if ( ( crt->ext_types & ext_type ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); crt->ext_types |= ext_type; - switch( ext_type ) - { - case MBEDTLS_X509_EXT_BASIC_CONSTRAINTS: - /* Parse basic constraints */ - if( ( ret = x509_get_basic_constraints( p, end_ext_octet, - &crt->ca_istrue, &crt->max_pathlen ) ) != 0 ) - return( ret ); - break; + switch ( ext_type ) { + case MBEDTLS_X509_EXT_BASIC_CONSTRAINTS: + /* Parse basic constraints */ + if ( ( ret = x509_get_basic_constraints( p, end_ext_octet, + &crt->ca_istrue, &crt->max_pathlen ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_KEY_USAGE: - /* Parse key usage */ - if( ( ret = x509_get_key_usage( p, end_ext_octet, - &crt->key_usage ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_KEY_USAGE: + /* Parse key usage */ + if ( ( ret = x509_get_key_usage( p, end_ext_octet, + &crt->key_usage ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE: - /* Parse extended key usage */ - if( ( ret = x509_get_ext_key_usage( p, end_ext_octet, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE: + /* Parse extended key usage */ + if ( ( ret = x509_get_ext_key_usage( p, end_ext_octet, + &crt->ext_key_usage ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME: - /* Parse subject alt name */ - if( ( ret = x509_get_subject_alt_name( p, end_ext_octet, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME: + /* Parse subject alt name */ + if ( ( ret = x509_get_subject_alt_name( p, end_ext_octet, + &crt->subject_alt_names ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_NS_CERT_TYPE: - /* Parse netscape certificate type */ - if( ( ret = x509_get_ns_cert_type( p, end_ext_octet, - &crt->ns_cert_type ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_NS_CERT_TYPE: + /* Parse netscape certificate type */ + if ( ( ret = x509_get_ns_cert_type( p, end_ext_octet, + &crt->ns_cert_type ) ) != 0 ) + return ( ret ); + break; - default: - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + default: + return ( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); } } - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -674,8 +658,8 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * /* * Check for valid input */ - if( crt == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( crt == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); // Use the original buffer until we figure out actual length p = (unsigned char*) buf; @@ -688,30 +672,28 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - if( len > (size_t) ( end - p ) ) - { + if ( len > (size_t) ( end - p ) ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } crt_end = p + len; // Create and populate a new buffer for the raw field crt->raw.len = crt_end - buf; crt->raw.p = p = mbedtls_calloc( 1, crt->raw.len ); - if( p == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( p == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); memcpy( p, buf, crt->raw.len ); - // Direct pointers to the new buffer + // Direct pointers to the new buffer p += crt->raw.len - len; end = crt_end = p + len; @@ -720,11 +702,10 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * */ crt->tbs.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } end = p + len; @@ -737,29 +718,26 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * * signature AlgorithmIdentifier */ - if( ( ret = x509_get_version( &p, end, &crt->version ) ) != 0 || - ( ret = mbedtls_x509_get_serial( &p, end, &crt->serial ) ) != 0 || - ( ret = mbedtls_x509_get_alg( &p, end, &crt->sig_oid, - &sig_params1 ) ) != 0 ) - { + if ( ( ret = x509_get_version( &p, end, &crt->version ) ) != 0 || + ( ret = mbedtls_x509_get_serial( &p, end, &crt->serial ) ) != 0 || + ( ret = mbedtls_x509_get_alg( &p, end, &crt->sig_oid, + &sig_params1 ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } crt->version++; - if( crt->version > 3 ) - { + if ( crt->version > 3 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); + return ( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } - if( ( ret = mbedtls_x509_get_sig_alg( &crt->sig_oid, &sig_params1, - &crt->sig_md, &crt->sig_pk, - &crt->sig_opts ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig_alg( &crt->sig_oid, &sig_params1, + &crt->sig_md, &crt->sig_pk, + &crt->sig_opts ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } /* @@ -767,17 +745,15 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * */ crt->issuer_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_x509_get_name( &p, p + len, &crt->issuer ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_name( &p, p + len, &crt->issuer ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } crt->issuer_raw.len = p - crt->issuer_raw.p; @@ -788,11 +764,10 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * notAfter Time } * */ - if( ( ret = x509_get_dates( &p, end, &crt->valid_from, - &crt->valid_to ) ) != 0 ) - { + if ( ( ret = x509_get_dates( &p, end, &crt->valid_from, + &crt->valid_to ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } /* @@ -800,17 +775,15 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * */ crt->subject_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( len && ( ret = mbedtls_x509_get_name( &p, p + len, &crt->subject ) ) != 0 ) - { + if ( len && ( ret = mbedtls_x509_get_name( &p, p + len, &crt->subject ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } crt->subject_raw.len = p - crt->subject_raw.p; @@ -818,10 +791,9 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * /* * SubjectPublicKeyInfo */ - if( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &crt->pk ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &crt->pk ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } /* @@ -832,43 +804,37 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * extensions [3] EXPLICIT Extensions OPTIONAL * -- If present, version shall be v3 */ - if( crt->version == 2 || crt->version == 3 ) - { + if ( crt->version == 2 || crt->version == 3 ) { ret = x509_get_uid( &p, end, &crt->issuer_id, 1 ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } } - if( crt->version == 2 || crt->version == 3 ) - { + if ( crt->version == 2 || crt->version == 3 ) { ret = x509_get_uid( &p, end, &crt->subject_id, 2 ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } } #if !defined(MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3) - if( crt->version == 3 ) + if ( crt->version == 3 ) #endif { ret = x509_get_crt_ext( &p, end, crt ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } end = crt_end; @@ -880,36 +846,32 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } - if( crt->sig_oid.len != sig_oid2.len || - memcmp( crt->sig_oid.p, sig_oid2.p, crt->sig_oid.len ) != 0 || - sig_params1.len != sig_params2.len || - ( sig_params1.len != 0 && - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) - { + if ( crt->sig_oid.len != sig_oid2.len || + memcmp( crt->sig_oid.p, sig_oid2.p, crt->sig_oid.len ) != 0 || + sig_params1.len != sig_params2.len || + ( sig_params1.len != 0 && + memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_SIG_MISMATCH ); + return ( MBEDTLS_ERR_X509_SIG_MISMATCH ); } - if( ( ret = mbedtls_x509_get_sig( &p, end, &crt->sig ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig( &p, end, &crt->sig ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return ( 0 ); } /* @@ -917,7 +879,7 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * chained list */ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *buf, - size_t buflen ) + size_t buflen ) { int ret; mbedtls_x509_crt *crt = chain, *prev = NULL; @@ -925,11 +887,10 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *bu /* * Check for valid input */ - if( crt == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( crt == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - while( crt->version != 0 && crt->next != NULL ) - { + while ( crt->version != 0 && crt->next != NULL ) { prev = crt; crt = crt->next; } @@ -937,30 +898,28 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *bu /* * Add new certificate on the end of the chain if needed. */ - if( crt->version != 0 && crt->next == NULL ) - { + if ( crt->version != 0 && crt->next == NULL ) { crt->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); - if( crt->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( crt->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); prev = crt; mbedtls_x509_crt_init( crt->next ); crt = crt->next; } - if( ( ret = x509_crt_parse_der_core( crt, buf, buflen ) ) != 0 ) - { - if( prev ) + if ( ( ret = x509_crt_parse_der_core( crt, buf, buflen ) ) != 0 ) { + if ( prev ) prev->next = NULL; - if( crt != chain ) + if ( crt != chain ) mbedtls_free( crt ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -977,58 +936,50 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, s /* * Check for valid input */ - if( chain == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( chain == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); /* * Determine buffer content. Buffer contains either one DER certificate or * one or more PEM certificates. */ #if defined(MBEDTLS_PEM_PARSE_C) - if( buflen != 0 && buf[buflen - 1] == '\0' && - strstr( (const char *) buf, "-----BEGIN CERTIFICATE-----" ) != NULL ) - { + if ( buflen != 0 && buf[buflen - 1] == '\0' && + strstr( (const char *) buf, "-----BEGIN CERTIFICATE-----" ) != NULL ) { buf_format = MBEDTLS_X509_FORMAT_PEM; } - if( buf_format == MBEDTLS_X509_FORMAT_DER ) + if ( buf_format == MBEDTLS_X509_FORMAT_DER ) return mbedtls_x509_crt_parse_der( chain, buf, buflen ); #else return mbedtls_x509_crt_parse_der( chain, buf, buflen ); #endif #if defined(MBEDTLS_PEM_PARSE_C) - if( buf_format == MBEDTLS_X509_FORMAT_PEM ) - { + if ( buf_format == MBEDTLS_X509_FORMAT_PEM ) { int ret; mbedtls_pem_context pem; /* 1 rather than 0 since the terminating NULL byte is counted in */ - while( buflen > 1 ) - { + while ( buflen > 1 ) { size_t use_len; mbedtls_pem_init( &pem ); /* If we get there, we know the string is null-terminated */ ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN CERTIFICATE-----", - "-----END CERTIFICATE-----", - buf, NULL, 0, &use_len ); + "-----BEGIN CERTIFICATE-----", + "-----END CERTIFICATE-----", + buf, NULL, 0, &use_len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ buflen -= use_len; buf += use_len; - } - else if( ret == MBEDTLS_ERR_PEM_BAD_INPUT_DATA ) - { - return( ret ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + } else if ( ret == MBEDTLS_ERR_PEM_BAD_INPUT_DATA ) { + return ( ret ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); /* @@ -1037,28 +988,26 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, s buflen -= use_len; buf += use_len; - if( first_error == 0 ) + if ( first_error == 0 ) first_error = ret; total_failed++; continue; - } - else + } else break; ret = mbedtls_x509_crt_parse_der( chain, pem.buf, pem.buflen ); mbedtls_pem_free( &pem ); - if( ret != 0 ) - { + if ( ret != 0 ) { /* * Quit parsing on a memory error */ - if( ret == MBEDTLS_ERR_X509_ALLOC_FAILED ) - return( ret ); + if ( ret == MBEDTLS_ERR_X509_ALLOC_FAILED ) + return ( ret ); - if( first_error == 0 ) + if ( first_error == 0 ) first_error = ret; total_failed++; @@ -1069,12 +1018,12 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, s } } - if( success ) - return( total_failed ); - else if( first_error ) - return( first_error ); + if ( success ) + return ( total_failed ); + else if ( first_error ) + return ( first_error ); else - return( MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT ); + return ( MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT ); #endif /* MBEDTLS_PEM_PARSE_C */ } @@ -1088,15 +1037,15 @@ int mbedtls_x509_crt_parse_file( mbedtls_x509_crt *chain, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_x509_crt_parse( chain, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) @@ -1112,8 +1061,8 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) WIN32_FIND_DATAW file_data; HANDLE hFind; - if( len > MAX_PATH - 3 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( len > MAX_PATH - 3 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); memset( szDir, 0, sizeof(szDir) ); memset( filename, 0, MAX_PATH ); @@ -1124,37 +1073,35 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) w_ret = MultiByteToWideChar( CP_ACP, 0, filename, len, szDir, MAX_PATH - 3 ); - if( w_ret == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( w_ret == 0 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); hFind = FindFirstFileW( szDir, &file_data ); - if( hFind == INVALID_HANDLE_VALUE ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); + if ( hFind == INVALID_HANDLE_VALUE ) + return ( MBEDTLS_ERR_X509_FILE_IO_ERROR ); len = MAX_PATH - len; - do - { + do { memset( p, 0, len ); - if( file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + if ( file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) continue; w_ret = WideCharToMultiByte( CP_ACP, 0, file_data.cFileName, lstrlenW( file_data.cFileName ), p, (int) len - 1, NULL, NULL ); - if( w_ret == 0 ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); + if ( w_ret == 0 ) + return ( MBEDTLS_ERR_X509_FILE_IO_ERROR ); w_ret = mbedtls_x509_crt_parse_file( chain, filename ); - if( w_ret < 0 ) + if ( w_ret < 0 ) ret++; else ret += w_ret; - } - while( FindNextFileW( hFind, &file_data ) != 0 ); + } while ( FindNextFileW( hFind, &file_data ) != 0 ); - if( GetLastError() != ERROR_NO_MORE_FILES ) + if ( GetLastError() != ERROR_NO_MORE_FILES ) ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; FindClose( hFind ); @@ -1166,40 +1113,35 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) char entry_name[MBEDTLS_X509_MAX_FILE_PATH_LEN]; DIR *dir = opendir( path ); - if( dir == NULL ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); + if ( dir == NULL ) + return ( MBEDTLS_ERR_X509_FILE_IO_ERROR ); #if defined(MBEDTLS_THREADING_PTHREAD) - if( ( ret = mbedtls_mutex_lock( &mbedtls_threading_readdir_mutex ) ) != 0 ) - { + if ( ( ret = mbedtls_mutex_lock( &mbedtls_threading_readdir_mutex ) ) != 0 ) { closedir( dir ); - return( ret ); + return ( ret ); } #endif - while( ( entry = readdir( dir ) ) != NULL ) - { + while ( ( entry = readdir( dir ) ) != NULL ) { snp_ret = mbedtls_snprintf( entry_name, sizeof entry_name, "%s/%s", path, entry->d_name ); - if( snp_ret < 0 || (size_t)snp_ret >= sizeof entry_name ) - { + if ( snp_ret < 0 || (size_t)snp_ret >= sizeof entry_name ) { ret = MBEDTLS_ERR_X509_BUFFER_TOO_SMALL; goto cleanup; - } - else if( stat( entry_name, &sb ) == -1 ) - { + } else if ( stat( entry_name, &sb ) == -1 ) { ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; goto cleanup; } - if( !S_ISREG( sb.st_mode ) ) + if ( !S_ISREG( sb.st_mode ) ) continue; // Ignore parse errors // t_ret = mbedtls_x509_crt_parse_file( chain, entry_name ); - if( t_ret < 0 ) + if ( t_ret < 0 ) ret++; else ret += t_ret; @@ -1209,13 +1151,13 @@ cleanup: closedir( dir ); #if defined(MBEDTLS_THREADING_PTHREAD) - if( mbedtls_mutex_unlock( &mbedtls_threading_readdir_mutex ) != 0 ) + if ( mbedtls_mutex_unlock( &mbedtls_threading_readdir_mutex ) != 0 ) ret = MBEDTLS_ERR_THREADING_MUTEX_ERROR; #endif #endif /* _WIN32 */ - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -1229,18 +1171,16 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, const char *sep = ""; size_t sep_len = 0; - while( cur != NULL ) - { - if( cur->buf.len + sep_len >= n ) - { + while ( cur != NULL ) { + if ( cur->buf.len + sep_len >= n ) { *p = '\0'; - return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); } n -= cur->buf.len + sep_len; - for( i = 0; i < sep_len; i++ ) + for ( i = 0; i < sep_len; i++ ) *p++ = sep[i]; - for( i = 0; i < cur->buf.len; i++ ) + for ( i = 0; i < cur->buf.len; i++ ) *p++ = cur->buf.p[i]; sep = ", "; @@ -1254,7 +1194,7 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } #define PRINT_ITEM(i) \ @@ -1288,7 +1228,7 @@ static int x509_info_cert_type( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } #define KEY_USAGE(code,name) \ @@ -1316,7 +1256,7 @@ static int x509_info_key_usage( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } static int x509_info_ext_key_usage( char **buf, size_t *size, @@ -1329,9 +1269,8 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, const mbedtls_x509_sequence *cur = extended_key_usage; const char *sep = ""; - while( cur != NULL ) - { - if( mbedtls_oid_get_extended_key_usage( &cur->buf, &desc ) != 0 ) + while ( cur != NULL ) { + if ( mbedtls_oid_get_extended_key_usage( &cur->buf, &desc ) != 0 ) desc = "???"; ret = mbedtls_snprintf( p, n, "%s%s", sep, desc ); @@ -1345,7 +1284,7 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } /* @@ -1354,7 +1293,7 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, #define BEFORE_COLON 18 #define BC "18" int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_crt *crt ) + const mbedtls_x509_crt *crt ) { int ret; size_t n; @@ -1364,19 +1303,18 @@ int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, p = buf; n = size; - if( NULL == crt ) - { + if ( NULL == crt ) { ret = mbedtls_snprintf( p, n, "\nCertificate is uninitialised!\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } ret = mbedtls_snprintf( p, n, "%scert. version : %d\n", - prefix, crt->version ); + prefix, crt->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "%sserial number : ", - prefix ); + prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_serial_gets( p, n, &crt->serial ); @@ -1393,96 +1331,89 @@ int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sissued on : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crt->valid_from.year, crt->valid_from.mon, - crt->valid_from.day, crt->valid_from.hour, - crt->valid_from.min, crt->valid_from.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crt->valid_from.year, crt->valid_from.mon, + crt->valid_from.day, crt->valid_from.hour, + crt->valid_from.min, crt->valid_from.sec ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sexpires on : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crt->valid_to.year, crt->valid_to.mon, - crt->valid_to.day, crt->valid_to.hour, - crt->valid_to.min, crt->valid_to.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crt->valid_to.year, crt->valid_to.mon, + crt->valid_to.day, crt->valid_to.hour, + crt->valid_to.min, crt->valid_to.sec ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%ssigned using : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_sig_alg_gets( p, n, &crt->sig_oid, crt->sig_pk, - crt->sig_md, crt->sig_opts ); + crt->sig_md, crt->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; /* Key size */ - if( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, - mbedtls_pk_get_name( &crt->pk ) ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, + mbedtls_pk_get_name( &crt->pk ) ) ) != 0 ) { + return ( ret ); } ret = mbedtls_snprintf( p, n, "\n%s%-" BC "s: %d bits", prefix, key_size_str, - (int) mbedtls_pk_get_bitlen( &crt->pk ) ); + (int) mbedtls_pk_get_bitlen( &crt->pk ) ); MBEDTLS_X509_SAFE_SNPRINTF; /* * Optional extensions */ - if( crt->ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS ) { ret = mbedtls_snprintf( p, n, "\n%sbasic constraints : CA=%s", prefix, - crt->ca_istrue ? "true" : "false" ); + crt->ca_istrue ? "true" : "false" ); MBEDTLS_X509_SAFE_SNPRINTF; - if( crt->max_pathlen > 0 ) - { + if ( crt->max_pathlen > 0 ) { ret = mbedtls_snprintf( p, n, ", max_pathlen=%d", crt->max_pathlen - 1 ); MBEDTLS_X509_SAFE_SNPRINTF; } } - if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) { ret = mbedtls_snprintf( p, n, "\n%ssubject alt name : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_subject_alt_name( &p, &n, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_subject_alt_name( &p, &n, + &crt->subject_alt_names ) ) != 0 ) + return ( ret ); } - if( crt->ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE ) { ret = mbedtls_snprintf( p, n, "\n%scert. type : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 ) + return ( ret ); } - if( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) { ret = mbedtls_snprintf( p, n, "\n%skey usage : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 ) + return ( ret ); } - if( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) { ret = mbedtls_snprintf( p, n, "\n%sext key usage : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_ext_key_usage( &p, &n, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_ext_key_usage( &p, &n, + &crt->ext_key_usage ) ) != 0 ) + return ( ret ); } ret = mbedtls_snprintf( p, n, "\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } struct x509_crt_verify_string { @@ -1515,16 +1446,15 @@ static const struct x509_crt_verify_string x509_crt_verify_strings[] = { }; int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, - uint32_t flags ) + uint32_t flags ) { int ret; const struct x509_crt_verify_string *cur; char *p = buf; size_t n = size; - for( cur = x509_crt_verify_strings; cur->string != NULL ; cur++ ) - { - if( ( flags & cur->code ) == 0 ) + for ( cur = x509_crt_verify_strings; cur->string != NULL ; cur++ ) { + if ( ( flags & cur->code ) == 0 ) continue; ret = mbedtls_snprintf( p, n, "%s%s\n", prefix, cur->string ); @@ -1532,14 +1462,13 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, flags ^= cur->code; } - if( flags != 0 ) - { + if ( flags != 0 ) { ret = mbedtls_snprintf( p, n, "%sUnknown reason " - "(this should not happen)\n", prefix ); + "(this should not happen)\n", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) @@ -1548,54 +1477,52 @@ int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt, { unsigned int usage_must, usage_may; unsigned int may_mask = MBEDTLS_X509_KU_ENCIPHER_ONLY - | MBEDTLS_X509_KU_DECIPHER_ONLY; + | MBEDTLS_X509_KU_DECIPHER_ONLY; - if( ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) == 0 ) - return( 0 ); + if ( ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) == 0 ) + return ( 0 ); usage_must = usage & ~may_mask; - if( ( ( crt->key_usage & ~may_mask ) & usage_must ) != usage_must ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( ( ( crt->key_usage & ~may_mask ) & usage_must ) != usage_must ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); usage_may = usage & may_mask; - if( ( ( crt->key_usage & may_mask ) | usage_may ) != usage_may ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( ( ( crt->key_usage & may_mask ) | usage_may ) != usage_may ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt, - const char *usage_oid, - size_t usage_len ) + const char *usage_oid, + size_t usage_len ) { const mbedtls_x509_sequence *cur; /* Extension is not mandatory, absent means no restriction */ - if( ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) == 0 ) - return( 0 ); + if ( ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) == 0 ) + return ( 0 ); /* * Look for the requested usage (or wildcard ANY) in our list */ - for( cur = &crt->ext_key_usage; cur != NULL; cur = cur->next ) - { + for ( cur = &crt->ext_key_usage; cur != NULL; cur = cur->next ) { const mbedtls_x509_buf *cur_oid = &cur->buf; - if( cur_oid->len == usage_len && - memcmp( cur_oid->p, usage_oid, usage_len ) == 0 ) - { - return( 0 ); + if ( cur_oid->len == usage_len && + memcmp( cur_oid->p, usage_oid, usage_len ) == 0 ) { + return ( 0 ); } - if( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE, cur_oid ) == 0 ) - return( 0 ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE, cur_oid ) == 0 ) + return ( 0 ); } - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); } #endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ @@ -1607,19 +1534,17 @@ int mbedtls_x509_crt_is_revoked( const mbedtls_x509_crt *crt, const mbedtls_x509 { const mbedtls_x509_crl_entry *cur = &crl->entry; - while( cur != NULL && cur->serial.len != 0 ) - { - if( crt->serial.len == cur->serial.len && - memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 ) - { - if( mbedtls_x509_time_is_past( &cur->revocation_date ) ) - return( 1 ); + while ( cur != NULL && cur->serial.len != 0 ) { + if ( crt->serial.len == cur->serial.len && + memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 ) { + if ( mbedtls_x509_time_is_past( &cur->revocation_date ) ) + return ( 1 ); } cur = cur->next; } - return( 0 ); + return ( 0 ); } /* @@ -1634,16 +1559,14 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, unsigned char hash[MBEDTLS_MD_MAX_SIZE]; const mbedtls_md_info_t *md_info; - if( ca == NULL ) - return( flags ); + if ( ca == NULL ) + return ( flags ); - while( crl_list != NULL ) - { - if( crl_list->version == 0 || - crl_list->issuer_raw.len != ca->subject_raw.len || - memcmp( crl_list->issuer_raw.p, ca->subject_raw.p, - crl_list->issuer_raw.len ) != 0 ) - { + while ( crl_list != NULL ) { + if ( crl_list->version == 0 || + crl_list->issuer_raw.len != ca->subject_raw.len || + memcmp( crl_list->issuer_raw.p, ca->subject_raw.p, + crl_list->issuer_raw.len ) != 0 ) { crl_list = crl_list->next; continue; } @@ -1652,8 +1575,7 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, * Check if the CA is configured to sign CRLs */ #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - if( mbedtls_x509_crt_check_key_usage( ca, MBEDTLS_X509_KU_CRL_SIGN ) != 0 ) - { + if ( mbedtls_x509_crt_check_key_usage( ca, MBEDTLS_X509_KU_CRL_SIGN ) != 0 ) { flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } @@ -1662,15 +1584,14 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, /* * Check if CRL is correctly signed by the trusted CA */ - if( x509_profile_check_md_alg( profile, crl_list->sig_md ) != 0 ) + if ( x509_profile_check_md_alg( profile, crl_list->sig_md ) != 0 ) flags |= MBEDTLS_X509_BADCRL_BAD_MD; - if( x509_profile_check_pk_alg( profile, crl_list->sig_pk ) != 0 ) + if ( x509_profile_check_pk_alg( profile, crl_list->sig_pk ) != 0 ) flags |= MBEDTLS_X509_BADCRL_BAD_PK; md_info = mbedtls_md_info_from_type( crl_list->sig_md ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { /* * Cannot check 'unknown' hash */ @@ -1680,13 +1601,12 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, mbedtls_md( md_info, crl_list->tbs.p, crl_list->tbs.len, hash ); - if( x509_profile_check_key( profile, crl_list->sig_pk, &ca->pk ) != 0 ) + if ( x509_profile_check_key( profile, crl_list->sig_pk, &ca->pk ) != 0 ) flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - if( mbedtls_pk_verify_ext( crl_list->sig_pk, crl_list->sig_opts, &ca->pk, - crl_list->sig_md, hash, mbedtls_md_get_size( md_info ), - crl_list->sig.p, crl_list->sig.len ) != 0 ) - { + if ( mbedtls_pk_verify_ext( crl_list->sig_pk, crl_list->sig_opts, &ca->pk, + crl_list->sig_md, hash, mbedtls_md_get_size( md_info ), + crl_list->sig.p, crl_list->sig.len ) != 0 ) { flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } @@ -1694,17 +1614,16 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, /* * Check for validity of CRL (Do not drop out) */ - if( mbedtls_x509_time_is_past( &crl_list->next_update ) ) + if ( mbedtls_x509_time_is_past( &crl_list->next_update ) ) flags |= MBEDTLS_X509_BADCRL_EXPIRED; - if( mbedtls_x509_time_is_future( &crl_list->this_update ) ) + if ( mbedtls_x509_time_is_future( &crl_list->this_update ) ) flags |= MBEDTLS_X509_BADCRL_FUTURE; /* * Check if certificate is revoked */ - if( mbedtls_x509_crt_is_revoked( crt, crl_list ) ) - { + if ( mbedtls_x509_crt_is_revoked( crt, crl_list ) ) { flags |= MBEDTLS_X509_BADCERT_REVOKED; break; } @@ -1712,7 +1631,7 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, crl_list = crl_list->next; } - return( flags ); + return ( flags ); } #endif /* MBEDTLS_X509_CRL_PARSE_C */ @@ -1725,24 +1644,22 @@ static int x509_memcasecmp( const void *s1, const void *s2, size_t len ) unsigned char diff; const unsigned char *n1 = s1, *n2 = s2; - for( i = 0; i < len; i++ ) - { + for ( i = 0; i < len; i++ ) { diff = n1[i] ^ n2[i]; - if( diff == 0 ) + if ( diff == 0 ) continue; - if( diff == 32 && - ( ( n1[i] >= 'a' && n1[i] <= 'z' ) || - ( n1[i] >= 'A' && n1[i] <= 'Z' ) ) ) - { + if ( diff == 32 && + ( ( n1[i] >= 'a' && n1[i] <= 'z' ) || + ( n1[i] >= 'A' && n1[i] <= 'Z' ) ) ) { continue; } - return( -1 ); + return ( -1 ); } - return( 0 ); + return ( 0 ); } /* @@ -1753,28 +1670,25 @@ static int x509_check_wildcard( const char *cn, mbedtls_x509_buf *name ) size_t i; size_t cn_idx = 0, cn_len = strlen( cn ); - if( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' ) - return( 0 ); + if ( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' ) + return ( 0 ); - for( i = 0; i < cn_len; ++i ) - { - if( cn[i] == '.' ) - { + for ( i = 0; i < cn_len; ++i ) { + if ( cn[i] == '.' ) { cn_idx = i; break; } } - if( cn_idx == 0 ) - return( -1 ); + if ( cn_idx == 0 ) + return ( -1 ); - if( cn_len - cn_idx == name->len - 1 && - x509_memcasecmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 ) - { - return( 0 ); + if ( cn_len - cn_idx == name->len - 1 && + x509_memcasecmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 ) { + return ( 0 ); } - return( -1 ); + return ( -1 ); } /* @@ -1785,22 +1699,20 @@ static int x509_check_wildcard( const char *cn, mbedtls_x509_buf *name ) */ static int x509_string_cmp( const mbedtls_x509_buf *a, const mbedtls_x509_buf *b ) { - if( a->tag == b->tag && - a->len == b->len && - memcmp( a->p, b->p, b->len ) == 0 ) - { - return( 0 ); + if ( a->tag == b->tag && + a->len == b->len && + memcmp( a->p, b->p, b->len ) == 0 ) { + return ( 0 ); } - if( ( a->tag == MBEDTLS_ASN1_UTF8_STRING || a->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && - ( b->tag == MBEDTLS_ASN1_UTF8_STRING || b->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && - a->len == b->len && - x509_memcasecmp( a->p, b->p, b->len ) == 0 ) - { - return( 0 ); + if ( ( a->tag == MBEDTLS_ASN1_UTF8_STRING || a->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && + ( b->tag == MBEDTLS_ASN1_UTF8_STRING || b->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && + a->len == b->len && + x509_memcasecmp( a->p, b->p, b->len ) == 0 ) { + return ( 0 ); } - return( -1 ); + return ( -1 ); } /* @@ -1816,33 +1728,31 @@ static int x509_string_cmp( const mbedtls_x509_buf *a, const mbedtls_x509_buf *b static int x509_name_cmp( const mbedtls_x509_name *a, const mbedtls_x509_name *b ) { /* Avoid recursion, it might not be optimised by the compiler */ - while( a != NULL || b != NULL ) - { - if( a == NULL || b == NULL ) - return( -1 ); + while ( a != NULL || b != NULL ) { + if ( a == NULL || b == NULL ) + return ( -1 ); /* type */ - if( a->oid.tag != b->oid.tag || - a->oid.len != b->oid.len || - memcmp( a->oid.p, b->oid.p, b->oid.len ) != 0 ) - { - return( -1 ); + if ( a->oid.tag != b->oid.tag || + a->oid.len != b->oid.len || + memcmp( a->oid.p, b->oid.p, b->oid.len ) != 0 ) { + return ( -1 ); } /* value */ - if( x509_string_cmp( &a->val, &b->val ) != 0 ) - return( -1 ); + if ( x509_string_cmp( &a->val, &b->val ) != 0 ) + return ( -1 ); /* structure of the list of sets */ - if( a->next_merged != b->next_merged ) - return( -1 ); + if ( a->next_merged != b->next_merged ) + return ( -1 ); a = a->next; b = b->next; } /* a == NULL == b */ - return( 0 ); + return ( 0 ); } /* @@ -1859,45 +1769,43 @@ static int x509_crt_check_parent( const mbedtls_x509_crt *child, int need_ca_bit; /* Parent must be the issuer */ - if( x509_name_cmp( &child->issuer, &parent->subject ) != 0 ) - return( -1 ); + if ( x509_name_cmp( &child->issuer, &parent->subject ) != 0 ) + return ( -1 ); /* Parent must have the basicConstraints CA bit set as a general rule */ need_ca_bit = 1; /* Exception: v1/v2 certificates that are locally trusted. */ - if( top && parent->version < 3 ) + if ( top && parent->version < 3 ) need_ca_bit = 0; /* Exception: self-signed end-entity certs that are locally trusted. */ - if( top && bottom && - child->raw.len == parent->raw.len && - memcmp( child->raw.p, parent->raw.p, child->raw.len ) == 0 ) - { + if ( top && bottom && + child->raw.len == parent->raw.len && + memcmp( child->raw.p, parent->raw.p, child->raw.len ) == 0 ) { need_ca_bit = 0; } - if( need_ca_bit && ! parent->ca_istrue ) - return( -1 ); + if ( need_ca_bit && ! parent->ca_istrue ) + return ( -1 ); #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - if( need_ca_bit && - mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 ) - { - return( -1 ); + if ( need_ca_bit && + mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 ) { + return ( -1 ); } #endif - return( 0 ); + return ( 0 ); } static int x509_crt_verify_top( - mbedtls_x509_crt *child, mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - int path_cnt, int self_cnt, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *child, mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + int path_cnt, int self_cnt, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { int ret; uint32_t ca_flags = 0; @@ -1905,16 +1813,16 @@ static int x509_crt_verify_top( unsigned char hash[MBEDTLS_MD_MAX_SIZE]; const mbedtls_md_info_t *md_info; - if( mbedtls_x509_time_is_past( &child->valid_to ) ) + if ( mbedtls_x509_time_is_past( &child->valid_to ) ) *flags |= MBEDTLS_X509_BADCERT_EXPIRED; - if( mbedtls_x509_time_is_future( &child->valid_from ) ) + if ( mbedtls_x509_time_is_future( &child->valid_from ) ) *flags |= MBEDTLS_X509_BADCERT_FUTURE; - if( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) + if ( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_MD; - if( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) + if ( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; /* @@ -1923,19 +1831,16 @@ static int x509_crt_verify_top( *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; md_info = mbedtls_md_info_from_type( child->sig_md ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { /* * Cannot check 'unknown', no need to try any CA */ trust_ca = NULL; - } - else + } else mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ); - for( /* trust_ca */ ; trust_ca != NULL; trust_ca = trust_ca->next ) - { - if( x509_crt_check_parent( child, trust_ca, 1, path_cnt == 0 ) != 0 ) + for ( /* trust_ca */ ; trust_ca != NULL; trust_ca = trust_ca->next ) { + if ( x509_crt_check_parent( child, trust_ca, 1, path_cnt == 0 ) != 0 ) continue; check_path_cnt = path_cnt + 1; @@ -1944,34 +1849,29 @@ static int x509_crt_verify_top( * Reduce check_path_cnt to check against if top of the chain is * the same as the trusted CA */ - if( child->subject_raw.len == trust_ca->subject_raw.len && - memcmp( child->subject_raw.p, trust_ca->subject_raw.p, - child->issuer_raw.len ) == 0 ) - { + if ( child->subject_raw.len == trust_ca->subject_raw.len && + memcmp( child->subject_raw.p, trust_ca->subject_raw.p, + child->issuer_raw.len ) == 0 ) { check_path_cnt--; } /* Self signed certificates do not count towards the limit */ - if( trust_ca->max_pathlen > 0 && - trust_ca->max_pathlen < check_path_cnt - self_cnt ) - { + if ( trust_ca->max_pathlen > 0 && + trust_ca->max_pathlen < check_path_cnt - self_cnt ) { continue; } - if( mbedtls_x509_time_is_past( &trust_ca->valid_to ) ) - { + if ( mbedtls_x509_time_is_past( &trust_ca->valid_to ) ) { continue; } - if( mbedtls_x509_time_is_future( &trust_ca->valid_from ) ) - { + if ( mbedtls_x509_time_is_future( &trust_ca->valid_from ) ) { continue; } - if( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &trust_ca->pk, - child->sig_md, hash, mbedtls_md_get_size( md_info ), - child->sig.p, child->sig.len ) != 0 ) - { + if ( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &trust_ca->pk, + child->sig_md, hash, mbedtls_md_get_size( md_info ), + child->sig.p, child->sig.len ) != 0 ) { continue; } @@ -1980,7 +1880,7 @@ static int x509_crt_verify_top( */ *flags &= ~MBEDTLS_X509_BADCERT_NOT_TRUSTED; - if( x509_profile_check_key( profile, child->sig_pk, &trust_ca->pk ) != 0 ) + if ( x509_profile_check_key( profile, child->sig_pk, &trust_ca->pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; break; @@ -1991,11 +1891,10 @@ static int x509_crt_verify_top( * to the callback for any issues with validity and CRL presence for the * trusted CA certificate. */ - if( trust_ca != NULL && - ( child->subject_raw.len != trust_ca->subject_raw.len || - memcmp( child->subject_raw.p, trust_ca->subject_raw.p, - child->issuer_raw.len ) != 0 ) ) - { + if ( trust_ca != NULL && + ( child->subject_raw.len != trust_ca->subject_raw.len || + memcmp( child->subject_raw.p, trust_ca->subject_raw.p, + child->issuer_raw.len ) != 0 ) ) { #if defined(MBEDTLS_X509_CRL_PARSE_C) /* Check trusted CA's CRL for the chain's top crt */ *flags |= x509_crt_verifycrl( child, trust_ca, ca_crl, profile ); @@ -2003,35 +1902,32 @@ static int x509_crt_verify_top( ((void) ca_crl); #endif - if( NULL != f_vrfy ) - { - if( ( ret = f_vrfy( p_vrfy, trust_ca, path_cnt + 1, - &ca_flags ) ) != 0 ) - { - return( ret ); + if ( NULL != f_vrfy ) { + if ( ( ret = f_vrfy( p_vrfy, trust_ca, path_cnt + 1, + &ca_flags ) ) != 0 ) { + return ( ret ); } } } /* Call callback on top cert */ - if( NULL != f_vrfy ) - { - if( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) - return( ret ); + if ( NULL != f_vrfy ) { + if ( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) + return ( ret ); } *flags |= ca_flags; - return( 0 ); + return ( 0 ); } static int x509_crt_verify_child( - mbedtls_x509_crt *child, mbedtls_x509_crt *parent, - mbedtls_x509_crt *trust_ca, mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - int path_cnt, int self_cnt, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *child, mbedtls_x509_crt *parent, + mbedtls_x509_crt *trust_ca, mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + int path_cnt, int self_cnt, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { int ret; uint32_t parent_flags = 0; @@ -2040,47 +1936,42 @@ static int x509_crt_verify_child( const mbedtls_md_info_t *md_info; /* Counting intermediate self signed certificates */ - if( ( path_cnt != 0 ) && x509_name_cmp( &child->issuer, &child->subject ) == 0 ) + if ( ( path_cnt != 0 ) && x509_name_cmp( &child->issuer, &child->subject ) == 0 ) self_cnt++; /* path_cnt is 0 for the first intermediate CA */ - if( 1 + path_cnt > MBEDTLS_X509_MAX_INTERMEDIATE_CA ) - { + if ( 1 + path_cnt > MBEDTLS_X509_MAX_INTERMEDIATE_CA ) { *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; - return( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); + return ( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); } - if( mbedtls_x509_time_is_past( &child->valid_to ) ) + if ( mbedtls_x509_time_is_past( &child->valid_to ) ) *flags |= MBEDTLS_X509_BADCERT_EXPIRED; - if( mbedtls_x509_time_is_future( &child->valid_from ) ) + if ( mbedtls_x509_time_is_future( &child->valid_from ) ) *flags |= MBEDTLS_X509_BADCERT_FUTURE; - if( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) + if ( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_MD; - if( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) + if ( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; md_info = mbedtls_md_info_from_type( child->sig_md ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { /* * Cannot check 'unknown' hash */ *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; - } - else - { + } else { mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ); - if( x509_profile_check_key( profile, child->sig_pk, &parent->pk ) != 0 ) + if ( x509_profile_check_key( profile, child->sig_pk, &parent->pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - if( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &parent->pk, - child->sig_md, hash, mbedtls_md_get_size( md_info ), - child->sig.p, child->sig.len ) != 0 ) - { + if ( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &parent->pk, + child->sig_md, hash, mbedtls_md_get_size( md_info ), + child->sig.p, child->sig.len ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; } } @@ -2091,84 +1982,75 @@ static int x509_crt_verify_child( #endif /* Look for a grandparent in trusted CAs */ - for( grandparent = trust_ca; - grandparent != NULL; - grandparent = grandparent->next ) - { - if( x509_crt_check_parent( parent, grandparent, - 0, path_cnt == 0 ) == 0 ) + for ( grandparent = trust_ca; + grandparent != NULL; + grandparent = grandparent->next ) { + if ( x509_crt_check_parent( parent, grandparent, + 0, path_cnt == 0 ) == 0 ) break; } - if( grandparent != NULL ) - { + if ( grandparent != NULL ) { ret = x509_crt_verify_top( parent, grandparent, ca_crl, profile, - path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); + if ( ret != 0 ) + return ( ret ); + } else { /* Look for a grandparent upwards the chain */ - for( grandparent = parent->next; - grandparent != NULL; - grandparent = grandparent->next ) - { + for ( grandparent = parent->next; + grandparent != NULL; + grandparent = grandparent->next ) { /* +2 because the current step is not yet accounted for * and because max_pathlen is one higher than it should be. * Also self signed certificates do not count to the limit. */ - if( grandparent->max_pathlen > 0 && - grandparent->max_pathlen < 2 + path_cnt - self_cnt ) - { + if ( grandparent->max_pathlen > 0 && + grandparent->max_pathlen < 2 + path_cnt - self_cnt ) { continue; } - if( x509_crt_check_parent( parent, grandparent, - 0, path_cnt == 0 ) == 0 ) + if ( x509_crt_check_parent( parent, grandparent, + 0, path_cnt == 0 ) == 0 ) break; } /* Is our parent part of the chain or at the top? */ - if( grandparent != NULL ) - { + if ( grandparent != NULL ) { ret = x509_crt_verify_child( parent, grandparent, trust_ca, ca_crl, profile, path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + if ( ret != 0 ) + return ( ret ); + } else { ret = x509_crt_verify_top( parent, trust_ca, ca_crl, profile, path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); } } /* child is verified to be a child of the parent, call verify callback */ - if( NULL != f_vrfy ) - if( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) - return( ret ); + if ( NULL != f_vrfy ) + if ( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) + return ( ret ); *flags |= parent_flags; - return( 0 ); + return ( 0 ); } /* * Verify the certificate validity */ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { - return( mbedtls_x509_crt_verify_with_profile( crt, trust_ca, ca_crl, - &mbedtls_x509_crt_profile_default, cn, flags, f_vrfy, p_vrfy ) ); + return ( mbedtls_x509_crt_verify_with_profile( crt, trust_ca, ca_crl, + &mbedtls_x509_crt_profile_default, cn, flags, f_vrfy, p_vrfy ) ); } @@ -2176,12 +2058,12 @@ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, * Verify the certificate validity, with profile */ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { size_t cn_len; int ret; @@ -2191,59 +2073,51 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, mbedtls_x509_sequence *cur = NULL; mbedtls_pk_type_t pk_type; - if( profile == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( profile == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); *flags = 0; - if( cn != NULL ) - { + if ( cn != NULL ) { name = &crt->subject; cn_len = strlen( cn ); - if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) { cur = &crt->subject_alt_names; - while( cur != NULL ) - { - if( cur->buf.len == cn_len && - x509_memcasecmp( cn, cur->buf.p, cn_len ) == 0 ) + while ( cur != NULL ) { + if ( cur->buf.len == cn_len && + x509_memcasecmp( cn, cur->buf.p, cn_len ) == 0 ) break; - if( cur->buf.len > 2 && - memcmp( cur->buf.p, "*.", 2 ) == 0 && - x509_check_wildcard( cn, &cur->buf ) == 0 ) - { + if ( cur->buf.len > 2 && + memcmp( cur->buf.p, "*.", 2 ) == 0 && + x509_check_wildcard( cn, &cur->buf ) == 0 ) { break; } cur = cur->next; } - if( cur == NULL ) + if ( cur == NULL ) *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH; - } - else - { - while( name != NULL ) - { - if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 ) - { - if( name->val.len == cn_len && - x509_memcasecmp( name->val.p, cn, cn_len ) == 0 ) + } else { + while ( name != NULL ) { + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 ) { + if ( name->val.len == cn_len && + x509_memcasecmp( name->val.p, cn, cn_len ) == 0 ) break; - if( name->val.len > 2 && - memcmp( name->val.p, "*.", 2 ) == 0 && - x509_check_wildcard( cn, &name->val ) == 0 ) + if ( name->val.len > 2 && + memcmp( name->val.p, "*.", 2 ) == 0 && + x509_check_wildcard( cn, &name->val ) == 0 ) break; } name = name->next; } - if( name == NULL ) + if ( name == NULL ) *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH; } } @@ -2251,54 +2125,47 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, /* Check the type and size of the key */ pk_type = mbedtls_pk_get_type( &crt->pk ); - if( x509_profile_check_pk_alg( profile, pk_type ) != 0 ) + if ( x509_profile_check_pk_alg( profile, pk_type ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; - if( x509_profile_check_key( profile, pk_type, &crt->pk ) != 0 ) + if ( x509_profile_check_key( profile, pk_type, &crt->pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; /* Look for a parent in trusted CAs */ - for( parent = trust_ca; parent != NULL; parent = parent->next ) - { - if( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) + for ( parent = trust_ca; parent != NULL; parent = parent->next ) { + if ( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) break; } - if( parent != NULL ) - { + if ( parent != NULL ) { ret = x509_crt_verify_top( crt, parent, ca_crl, profile, pathlen, selfsigned, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + if ( ret != 0 ) + return ( ret ); + } else { /* Look for a parent upwards the chain */ - for( parent = crt->next; parent != NULL; parent = parent->next ) - if( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) + for ( parent = crt->next; parent != NULL; parent = parent->next ) + if ( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) break; /* Are we part of the chain or at the top? */ - if( parent != NULL ) - { + if ( parent != NULL ) { ret = x509_crt_verify_child( crt, parent, trust_ca, ca_crl, profile, pathlen, selfsigned, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + if ( ret != 0 ) + return ( ret ); + } else { ret = x509_crt_verify_top( crt, trust_ca, ca_crl, profile, pathlen, selfsigned, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); } } - if( *flags != 0 ) - return( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); + if ( *flags != 0 ) + return ( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); - return( 0 ); + return ( 0 ); } /* @@ -2321,11 +2188,10 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) mbedtls_x509_sequence *seq_cur; mbedtls_x509_sequence *seq_prv; - if( crt == NULL ) + if ( crt == NULL ) return; - do - { + do { mbedtls_pk_free( &cert_cur->pk ); #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) @@ -2333,8 +2199,7 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) #endif name_cur = cert_cur->issuer.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); @@ -2342,8 +2207,7 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) } name_cur = cert_cur->subject.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); @@ -2351,8 +2215,7 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) } seq_cur = cert_cur->ext_key_usage.next; - while( seq_cur != NULL ) - { + while ( seq_cur != NULL ) { seq_prv = seq_cur; seq_cur = seq_cur->next; mbedtls_zeroize( seq_prv, sizeof( mbedtls_x509_sequence ) ); @@ -2360,35 +2223,30 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) } seq_cur = cert_cur->subject_alt_names.next; - while( seq_cur != NULL ) - { + while ( seq_cur != NULL ) { seq_prv = seq_cur; seq_cur = seq_cur->next; mbedtls_zeroize( seq_prv, sizeof( mbedtls_x509_sequence ) ); mbedtls_free( seq_prv ); } - if( cert_cur->raw.p != NULL ) - { + if ( cert_cur->raw.p != NULL ) { mbedtls_zeroize( cert_cur->raw.p, cert_cur->raw.len ); mbedtls_free( cert_cur->raw.p ); } cert_cur = cert_cur->next; - } - while( cert_cur != NULL ); + } while ( cert_cur != NULL ); cert_cur = crt; - do - { + do { cert_prv = cert_cur; cert_cur = cert_cur->next; mbedtls_zeroize( cert_prv, sizeof( mbedtls_x509_crt ) ); - if( cert_prv != crt ) + if ( cert_prv != crt ) mbedtls_free( cert_prv ); - } - while( cert_cur != NULL ); + } while ( cert_cur != NULL ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_csr.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_csr.c index 603d06b6..c44c98d2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_csr.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509_csr.c @@ -61,38 +61,38 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* * Version ::= INTEGER { v1(0) } */ static int x509_csr_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) + const unsigned char *end, + int *ver ) { int ret; - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return ( 0 ); } - return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); + return ( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); } - return( 0 ); + return ( 0 ); } /* * Parse a CSR in DER format */ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, - const unsigned char *buf, size_t buflen ) + const unsigned char *buf, size_t buflen ) { int ret; size_t len; @@ -104,8 +104,8 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, /* * Check for valid input */ - if( csr == NULL || buf == NULL || buflen == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( csr == NULL || buf == NULL || buflen == 0 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); mbedtls_x509_csr_init( csr ); @@ -114,8 +114,8 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, */ p = mbedtls_calloc( 1, len = buflen ); - if( p == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( p == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); memcpy( p, buf, buflen ); @@ -130,18 +130,16 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, * signature BIT STRING * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - if( len != (size_t) ( end - p ) ) - { + if ( len != (size_t) ( end - p ) ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } /* @@ -149,11 +147,10 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, */ csr->cri.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } end = p + len; @@ -162,18 +159,16 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, /* * Version ::= INTEGER { v1(0) } */ - if( ( ret = x509_csr_get_version( &p, end, &csr->version ) ) != 0 ) - { + if ( ( ret = x509_csr_get_version( &p, end, &csr->version ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } csr->version++; - if( csr->version != 1 ) - { + if ( csr->version != 1 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); + return ( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } /* @@ -181,17 +176,15 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, */ csr->subject_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_x509_get_name( &p, p + len, &csr->subject ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_name( &p, p + len, &csr->subject ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } csr->subject_raw.len = p - csr->subject_raw.p; @@ -199,10 +192,9 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, /* * subjectPKInfo SubjectPublicKeyInfo */ - if( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &csr->pk ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &csr->pk ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } /* @@ -215,11 +207,10 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, * the requester's expectations - this cannot cause a violation of our * signature policies. */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } p += len; @@ -230,34 +221,30 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, * signatureAlgorithm AlgorithmIdentifier, * signature BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &csr->sig_oid, &sig_params ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_alg( &p, end, &csr->sig_oid, &sig_params ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_x509_get_sig_alg( &csr->sig_oid, &sig_params, - &csr->sig_md, &csr->sig_pk, - &csr->sig_opts ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig_alg( &csr->sig_oid, &sig_params, + &csr->sig_md, &csr->sig_pk, + &csr->sig_opts ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); + return ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); } - if( ( ret = mbedtls_x509_get_sig( &p, end, &csr->sig ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig( &p, end, &csr->sig ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return ( 0 ); } /* @@ -274,40 +261,36 @@ int mbedtls_x509_csr_parse( mbedtls_x509_csr *csr, const unsigned char *buf, siz /* * Check for valid input */ - if( csr == NULL || buf == NULL || buflen == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( csr == NULL || buf == NULL || buflen == 0 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); #if defined(MBEDTLS_PEM_PARSE_C) mbedtls_pem_init( &pem ); /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( buf[buflen - 1] != '\0' ) + if ( buf[buflen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN CERTIFICATE REQUEST-----", - "-----END CERTIFICATE REQUEST-----", - buf, NULL, 0, &use_len ); + "-----BEGIN CERTIFICATE REQUEST-----", + "-----END CERTIFICATE REQUEST-----", + buf, NULL, 0, &use_len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded, parse the result */ - if( ( ret = mbedtls_x509_csr_parse_der( csr, pem.buf, pem.buflen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_csr_parse_der( csr, pem.buf, pem.buflen ) ) != 0 ) + return ( ret ); mbedtls_pem_free( &pem ); - return( 0 ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + return ( 0 ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - return( ret ); - } - else + return ( ret ); + } else #endif /* MBEDTLS_PEM_PARSE_C */ - return( mbedtls_x509_csr_parse_der( csr, buf, buflen ) ); + return ( mbedtls_x509_csr_parse_der( csr, buf, buflen ) ); } #if defined(MBEDTLS_FS_IO) @@ -320,15 +303,15 @@ int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_x509_csr_parse( csr, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -338,7 +321,7 @@ int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ) * Return an informational string about the CSR. */ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_csr *csr ) + const mbedtls_x509_csr *csr ) { int ret; size_t n; @@ -349,7 +332,7 @@ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, n = size; ret = mbedtls_snprintf( p, n, "%sCSR version : %d", - prefix, csr->version ); + prefix, csr->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%ssubject name : ", prefix ); @@ -361,20 +344,19 @@ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_sig_alg_gets( p, n, &csr->sig_oid, csr->sig_pk, csr->sig_md, - csr->sig_opts ); + csr->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, - mbedtls_pk_get_name( &csr->pk ) ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, + mbedtls_pk_get_name( &csr->pk ) ) ) != 0 ) { + return ( ret ); } ret = mbedtls_snprintf( p, n, "\n%s%-" BC "s: %d bits\n", prefix, key_size_str, - (int) mbedtls_pk_get_bitlen( &csr->pk ) ); + (int) mbedtls_pk_get_bitlen( &csr->pk ) ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* @@ -393,7 +375,7 @@ void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ) mbedtls_x509_name *name_cur; mbedtls_x509_name *name_prv; - if( csr == NULL ) + if ( csr == NULL ) return; mbedtls_pk_free( &csr->pk ); @@ -403,16 +385,14 @@ void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ) #endif name_cur = csr->subject.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); mbedtls_free( name_prv ); } - if( csr->raw.p != NULL ) - { + if ( csr->raw.p != NULL ) { mbedtls_zeroize( csr->raw.p, csr->raw.len ); mbedtls_free( csr->raw.p ); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_crt.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_crt.c index d1d9a22a..b2c19ba9 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_crt.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_crt.c @@ -45,8 +45,10 @@ #endif /* MBEDTLS_PEM_WRITE_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } void mbedtls_x509write_crt_init( mbedtls_x509write_cert *ctx ) @@ -89,13 +91,13 @@ void mbedtls_x509write_crt_set_issuer_key( mbedtls_x509write_cert *ctx, mbedtls_ } int mbedtls_x509write_crt_set_subject_name( mbedtls_x509write_cert *ctx, - const char *subject_name ) + const char *subject_name ) { return mbedtls_x509_string_to_names( &ctx->subject, subject_name ); } int mbedtls_x509write_crt_set_issuer_name( mbedtls_x509write_cert *ctx, - const char *issuer_name ) + const char *issuer_name ) { return mbedtls_x509_string_to_names( &ctx->issuer, issuer_name ); } @@ -104,39 +106,38 @@ int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *ctx, const mbedtls { int ret; - if( ( ret = mbedtls_mpi_copy( &ctx->serial, serial ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mpi_copy( &ctx->serial, serial ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *ctx, const char *not_before, - const char *not_after ) + const char *not_after ) { - if( strlen( not_before ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 || - strlen( not_after ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 ) - { - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( strlen( not_before ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 || + strlen( not_after ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 ) { + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); } strncpy( ctx->not_before, not_before, MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); - strncpy( ctx->not_after , not_after , MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); + strncpy( ctx->not_after, not_after, MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); ctx->not_before[MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; ctx->not_after[MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; - return( 0 ); + return ( 0 ); } int mbedtls_x509write_crt_set_extension( mbedtls_x509write_cert *ctx, - const char *oid, size_t oid_len, - int critical, - const unsigned char *val, size_t val_len ) + const char *oid, size_t oid_len, + int critical, + const unsigned char *val, size_t val_len ) { return mbedtls_x509_set_extension( &ctx->extensions, oid, oid_len, - critical, val, val_len ); + critical, val, val_len ); } int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, - int is_ca, int max_pathlen ) + int is_ca, int max_pathlen ) { int ret; unsigned char buf[9]; @@ -145,13 +146,11 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, memset( buf, 0, sizeof(buf) ); - if( is_ca && max_pathlen > 127 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( is_ca && max_pathlen > 127 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - if( is_ca ) - { - if( max_pathlen >= 0 ) - { + if ( is_ca ) { + if ( max_pathlen >= 0 ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, max_pathlen ) ); } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_bool( &c, buf, 1 ) ); @@ -159,11 +158,11 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_BASIC_CONSTRAINTS, - MBEDTLS_OID_SIZE( MBEDTLS_OID_BASIC_CONSTRAINTS ), - 0, buf + sizeof(buf) - len, len ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_BASIC_CONSTRAINTS ), + 0, buf + sizeof(buf) - len, len ); } #if defined(MBEDTLS_SHA1_C) @@ -185,8 +184,8 @@ int mbedtls_x509write_crt_set_subject_key_identifier( mbedtls_x509write_cert *ct MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_OCTET_STRING ) ); return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER, - MBEDTLS_OID_SIZE( MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER ), - 0, buf + sizeof(buf) - len, len ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER ), + 0, buf + sizeof(buf) - len, len ); } int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert *ctx ) @@ -208,42 +207,42 @@ int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert * MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER, - MBEDTLS_OID_SIZE( MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER ), - 0, buf + sizeof(buf) - len, len ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER ), + 0, buf + sizeof(buf) - len, len ); } #endif /* MBEDTLS_SHA1_C */ int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *ctx, - unsigned int key_usage ) + unsigned int key_usage ) { unsigned char buf[4], ku; unsigned char *c; int ret; /* We currently only support 7 bits, from 0x80 to 0x02 */ - if( ( key_usage & ~0xfe ) != 0 ) - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + if ( ( key_usage & ~0xfe ) != 0 ) + return ( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); c = buf + 4; ku = (unsigned char) key_usage; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ku, 7 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ku, 7 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_KEY_USAGE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), - 1, buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), + 1, buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, - unsigned char ns_cert_type ) + unsigned char ns_cert_type ) { unsigned char buf[4]; unsigned char *c; @@ -251,16 +250,16 @@ int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, c = buf + 4; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_NS_CERT_TYPE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), - 0, buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), + 0, buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } static int x509_write_time( unsigned char **p, unsigned char *start, @@ -272,29 +271,26 @@ static int x509_write_time( unsigned char **p, unsigned char *start, /* * write MBEDTLS_ASN1_UTC_TIME if year < 2050 (2 bytes shorter) */ - if( time[0] == '2' && time[1] == '0' && time [2] < '5' ) - { + if ( time[0] == '2' && time[1] == '0' && time [2] < '5' ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) time + 2, - size - 2 ) ); + (const unsigned char *) time + 2, + size - 2 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_UTC_TIME ) ); - } - else - { + } else { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) time, - size ) ); + (const unsigned char *) time, + size ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_GENERALIZED_TIME ) ); } - return( (int) len ); + return ( (int) len ); } int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; const char *sig_oid; @@ -314,13 +310,12 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, /* Signature algorithm needed in TBS, and later for actual signature */ pk_alg = mbedtls_pk_get_type( ctx->issuer_key ); - if( pk_alg == MBEDTLS_PK_ECKEY ) + if ( pk_alg == MBEDTLS_PK_ECKEY ) pk_alg = MBEDTLS_PK_ECDSA; - if( ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, - &sig_oid, &sig_oid_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, + &sig_oid, &sig_oid_len ) ) != 0 ) { + return ( ret ); } /* @@ -329,16 +324,16 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_extensions( &c, tmp_buf, ctx->extensions ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONTEXT_SPECIFIC | - MBEDTLS_ASN1_CONSTRUCTED | 3 ) ); + MBEDTLS_ASN1_CONSTRUCTED | 3 ) ); /* * SubjectPublicKeyInfo */ MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_pk_write_pubkey_der( ctx->subject_key, - tmp_buf, c - tmp_buf ) ); + tmp_buf, c - tmp_buf ) ); c -= pub_len; len += pub_len; @@ -355,15 +350,15 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, sub_len = 0; MBEDTLS_ASN1_CHK_ADD( sub_len, x509_write_time( &c, tmp_buf, ctx->not_after, - MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); + MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); MBEDTLS_ASN1_CHK_ADD( sub_len, x509_write_time( &c, tmp_buf, ctx->not_before, - MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); + MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); len += sub_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, sub_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); /* * Issuer ::= Name @@ -374,7 +369,7 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, * Signature ::= AlgorithmIdentifier */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( &c, tmp_buf, - sig_oid, strlen( sig_oid ), 0 ) ); + sig_oid, strlen( sig_oid ), 0 ) ); /* * Serial ::= INTEGER @@ -389,21 +384,20 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, len += sub_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, sub_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONTEXT_SPECIFIC | - MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); + MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); /* * Make signature */ mbedtls_md( mbedtls_md_info_from_type( ctx->md_alg ), c, len, hash ); - if( ( ret = mbedtls_pk_sign( ctx->issuer_key, ctx->md_alg, hash, 0, sig, &sig_len, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pk_sign( ctx->issuer_key, ctx->md_alg, hash, 0, sig, &sig_len, + f_rng, p_rng ) ) != 0 ) { + return ( ret ); } /* @@ -411,10 +405,10 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, */ c2 = buf + size; MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf, - sig_oid, sig_oid_len, sig, sig_len ) ); + sig_oid, sig_oid_len, sig, sig_len ) ); - if( len > (size_t)( c2 - buf ) ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len > (size_t)( c2 - buf ) ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); c2 -= len; memcpy( c2, c, len ); @@ -422,9 +416,9 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, len += sig_and_oid_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c2, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c2, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } #define PEM_BEGIN_CRT "-----BEGIN CERTIFICATE-----\n" @@ -432,27 +426,25 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, #if defined(MBEDTLS_PEM_WRITE_C) int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *crt, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char output_buf[4096]; size_t olen = 0; - if( ( ret = mbedtls_x509write_crt_der( crt, output_buf, sizeof(output_buf), - f_rng, p_rng ) ) < 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509write_crt_der( crt, output_buf, sizeof(output_buf), + f_rng, p_rng ) ) < 0 ) { + return ( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CRT, PEM_END_CRT, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CRT, PEM_END_CRT, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_csr.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_csr.c index 8fd856b2..8db69355 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_csr.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/x509write_csr.c @@ -44,8 +44,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } void mbedtls_x509write_csr_init( mbedtls_x509write_csr *ctx ) @@ -72,17 +74,17 @@ void mbedtls_x509write_csr_set_key( mbedtls_x509write_csr *ctx, mbedtls_pk_conte } int mbedtls_x509write_csr_set_subject_name( mbedtls_x509write_csr *ctx, - const char *subject_name ) + const char *subject_name ) { return mbedtls_x509_string_to_names( &ctx->subject, subject_name ); } int mbedtls_x509write_csr_set_extension( mbedtls_x509write_csr *ctx, - const char *oid, size_t oid_len, - const unsigned char *val, size_t val_len ) + const char *oid, size_t oid_len, + const unsigned char *val, size_t val_len ) { return mbedtls_x509_set_extension( &ctx->extensions, oid, oid_len, - 0, val, val_len ); + 0, val, val_len ); } int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned char key_usage ) @@ -93,20 +95,20 @@ int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned ch c = buf + 4; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &key_usage, 7 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &key_usage, 7 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_csr_set_extension( ctx, MBEDTLS_OID_KEY_USAGE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), - buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), + buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, - unsigned char ns_cert_type ) + unsigned char ns_cert_type ) { unsigned char buf[4]; unsigned char *c; @@ -114,21 +116,21 @@ int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, c = buf + 4; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_csr_set_extension( ctx, MBEDTLS_OID_NS_CERT_TYPE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), - buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), + buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; const char *sig_oid; @@ -148,30 +150,29 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_extensions( &c, tmp_buf, ctx->extensions ) ); - if( len ) - { + if ( len ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SET ) ); + MBEDTLS_ASN1_SET ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_oid( &c, tmp_buf, MBEDTLS_OID_PKCS9_CSR_EXT_REQ, - MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_CSR_EXT_REQ ) ) ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_CSR_EXT_REQ ) ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ); + MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ); MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_pk_write_pubkey_der( ctx->key, - tmp_buf, c - tmp_buf ) ); + tmp_buf, c - tmp_buf ) ); c -= pub_len; len += pub_len; @@ -187,7 +188,7 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); /* * Prepare signature @@ -195,15 +196,14 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s mbedtls_md( mbedtls_md_info_from_type( ctx->md_alg ), c, len, hash ); pk_alg = mbedtls_pk_get_type( ctx->key ); - if( pk_alg == MBEDTLS_PK_ECKEY ) + if ( pk_alg == MBEDTLS_PK_ECKEY ) pk_alg = MBEDTLS_PK_ECDSA; - if( ( ret = mbedtls_pk_sign( ctx->key, ctx->md_alg, hash, 0, sig, &sig_len, - f_rng, p_rng ) ) != 0 || - ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, - &sig_oid, &sig_oid_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pk_sign( ctx->key, ctx->md_alg, hash, 0, sig, &sig_len, + f_rng, p_rng ) ) != 0 || + ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, + &sig_oid, &sig_oid_len ) ) != 0 ) { + return ( ret ); } /* @@ -211,10 +211,10 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s */ c2 = buf + size; MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf, - sig_oid, sig_oid_len, sig, sig_len ) ); + sig_oid, sig_oid_len, sig, sig_len ) ); - if( len > (size_t)( c2 - buf ) ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len > (size_t)( c2 - buf ) ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); c2 -= len; memcpy( c2, c, len ); @@ -222,9 +222,9 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s len += sig_and_oid_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c2, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c2, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } #define PEM_BEGIN_CSR "-----BEGIN CERTIFICATE REQUEST-----\n" @@ -232,27 +232,25 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s #if defined(MBEDTLS_PEM_WRITE_C) int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char output_buf[4096]; size_t olen = 0; - if( ( ret = mbedtls_x509write_csr_der( ctx, output_buf, sizeof(output_buf), - f_rng, p_rng ) ) < 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509write_csr_der( ctx, output_buf, sizeof(output_buf), + f_rng, p_rng ) ) < 0 ) { + return ( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CSR, PEM_END_CSR, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CSR, PEM_END_CSR, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/xtea.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/xtea.c index fe0a3509..0079497a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/xtea.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/external_libs/mbedtls/library/xtea.c @@ -43,8 +43,10 @@ #if !defined(MBEDTLS_XTEA_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -77,7 +79,7 @@ void mbedtls_xtea_init( mbedtls_xtea_context *ctx ) void mbedtls_xtea_free( mbedtls_xtea_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_xtea_context ) ); @@ -92,8 +94,7 @@ void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] memset( ctx, 0, sizeof(mbedtls_xtea_context) ); - for( i = 0; i < 4; i++ ) - { + for ( i = 0; i < 4; i++ ) { GET_UINT32_BE( ctx->k[i], key, i << 2 ); } } @@ -102,7 +103,7 @@ void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] * XTEA encrypt function */ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, - const unsigned char input[8], unsigned char output[8]) + const unsigned char input[8], unsigned char output[8]) { uint32_t *k, v0, v1, i; @@ -111,24 +112,19 @@ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, GET_UINT32_BE( v0, input, 0 ); GET_UINT32_BE( v1, input, 4 ); - if( mode == MBEDTLS_XTEA_ENCRYPT ) - { + if ( mode == MBEDTLS_XTEA_ENCRYPT ) { uint32_t sum = 0, delta = 0x9E3779B9; - for( i = 0; i < 32; i++ ) - { + for ( i = 0; i < 32; i++ ) { v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); sum += delta; - v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); + v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]); } - } - else /* MBEDTLS_XTEA_DECRYPT */ - { + } else { /* MBEDTLS_XTEA_DECRYPT */ uint32_t delta = 0x9E3779B9, sum = delta * 32; - for( i = 0; i < 32; i++ ) - { - v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); + for ( i = 0; i < 32; i++ ) { + v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]); sum -= delta; v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); } @@ -137,7 +133,7 @@ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, PUT_UINT32_BE( v0, output, 0 ); PUT_UINT32_BE( v1, output, 4 ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -145,23 +141,21 @@ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, * XTEA-CBC buffer encryption/decryption */ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, - unsigned char iv[8], const unsigned char *input, - unsigned char *output) + unsigned char iv[8], const unsigned char *input, + unsigned char *output) { int i; unsigned char temp[8]; - if( length % 8 ) - return( MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH ); + if ( length % 8 ) + return ( MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_XTEA_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_XTEA_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 8 ); mbedtls_xtea_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 8 ); @@ -170,12 +164,9 @@ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, output += 8; length -= 8; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_xtea_crypt_ecb( ctx, mode, output, output ); @@ -187,7 +178,7 @@ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* !MBEDTLS_XTEA_ALT */ @@ -198,24 +189,34 @@ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, * XTEA tests vectors (non-official) */ -static const unsigned char xtea_test_key[6][16] = -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } +static const unsigned char xtea_test_key[6][16] = { + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + } }; -static const unsigned char xtea_test_pt[6][8] = -{ +static const unsigned char xtea_test_pt[6][8] = { { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, { 0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f }, @@ -224,8 +225,7 @@ static const unsigned char xtea_test_pt[6][8] = { 0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55 } }; -static const unsigned char xtea_test_ct[6][8] = -{ +static const unsigned char xtea_test_ct[6][8] = { { 0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5 }, { 0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8 }, { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, @@ -244,9 +244,8 @@ int mbedtls_xtea_self_test( int verbose ) mbedtls_xtea_context ctx; mbedtls_xtea_init( &ctx ); - for( i = 0; i < 6; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 6; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " XTEA test #%d: ", i + 1 ); memcpy( buf, xtea_test_pt[i], 8 ); @@ -254,26 +253,25 @@ int mbedtls_xtea_self_test( int verbose ) mbedtls_xtea_setup( &ctx, xtea_test_key[i] ); mbedtls_xtea_crypt_ecb( &ctx, MBEDTLS_XTEA_ENCRYPT, buf, buf ); - if( memcmp( buf, xtea_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, xtea_test_ct[i], 8 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_xtea_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/config.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/config.h index ee54920d..6b678e21 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/config.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/config.h @@ -1,17 +1,20 @@ /* #undef AUTH_MODE_CERT */ #define AUTH_MODE_KEY /* #undef AUTH_WITH_NOTLS */ -/* #undef GATEWAY_ENABLED */ +#define GATEWAY_ENABLED /* #undef COAP_COMM_ENABLED */ #define OTA_MQTT_CHANNEL /* #undef SYSTEM_COMM */ -#define EVENT_POST_ENABLED +/* #undef EVENT_POST_ENABLED */ #define ACTION_ENABLED /* #undef DEV_DYN_REG_ENABLED */ /* #undef LOG_UPLOAD */ /* #undef IOT_DEBUG */ /* #undef DEBUG_DEV_INFO_USED */ -/* #undef AT_TCP_ENABLED */ -/* #undef AT_UART_RECV_IRQ */ +#define AT_TCP_ENABLED +#define AT_UART_RECV_IRQ /* #undef AT_OS_USED */ /* #undef AT_DEBUG */ +/* #undef OTA_USE_HTTPS */ +#define GATEWAY_ENABLED +/* #undef MULTITHREAD_ENABLED */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_data_template.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_data_template.h index ddc339a9..227c98a1 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_data_template.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_data_template.h @@ -153,9 +153,11 @@ typedef struct { * * @param pParams data_template init parameters * + * @param pMqttClient data_template mqtt_client,construct mqtt_client if input NULL + * * @return a valid data_template client handle when success, or NULL otherwise */ -void* IOT_Template_Construct(TemplateInitParams *pParams); +void* IOT_Template_Construct(TemplateInitParams *pParams, void *pMqttClient); /** * @brief Publish MQTT message @@ -216,7 +218,29 @@ int IOT_Template_Destroy(void *handle); * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ int IOT_Template_Yield(void *handle, uint32_t timeout_ms); - + +#ifdef MULTITHREAD_ENABLED +/** + * @brief Check connection and keep alive state, read/handle MQTT message in synchronized way + * + * @param pClient handle to data_template client + * @param timeout_ms timeout value (unit: ms) for this operation + * + * @return QCLOUD_RET_SUCCESS when success, or err code for failure + */ +int IOT_Template_Yield_Without_MQTT_Yield(void *handle, uint32_t timeout_ms); + + +/** + * @brief Only release Data_Template Client resource, retain mqtt client for multi-thread case + * + * @param pClient pointer of handle to data_template client + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Template_Destroy_Except_MQTT(void *handle); +#endif + /** * @brief Register device property * diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_gateway.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h similarity index 95% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_gateway.h rename to components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h index eb738b3a..e565e8f6 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_gateway.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h @@ -142,6 +142,14 @@ int IOT_Gateway_Unsubscribe(void *client, char *topic_filter); */ int IOT_Gateway_Yield(void *client, uint32_t timeout_ms); +/** + * @brief Get mqtt_client of GateWay + * + * @param client handle to gateway client + * + * @return mqtt_client of GateWay + */ +void *IOT_Gateway_Get_MQTT_Client(void *client); #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/lite-utils.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/lite-utils.h index 5c992fe1..fcf7775f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/lite-utils.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/lite-utils.h @@ -65,6 +65,8 @@ char *LITE_format_nstring(const int len, const char *fmt, ...); void LITE_hexbuf_convert(unsigned char *digest, char *out, int buflen, int uppercase); void LITE_hexstr_convert(char *hexstr, uint8_t *out_buf, int len); void LITE_replace_substr(char orig[], char key[], char swap[]); +void LITE_str_strip_char(char *src, char destCh); + char *LITE_json_value_of(char *key, char *src); list_head_t *LITE_json_keys_of(char *src, char *prefix); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/qcloud_iot_export.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/qcloud_iot_export.h index 52a67d49..c6c47689 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/qcloud_iot_export.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/include/qcloud_iot_export.h @@ -25,7 +25,7 @@ extern "C" { /* IoT C-SDK version info */ -#define QCLOUD_IOT_DEVICE_SDK_VERSION "3.1.0" +#define QCLOUD_IOT_DEVICE_SDK_VERSION "3.1.1" /**************** QCloud IoT C-SDK constants begin ************************/ @@ -36,22 +36,22 @@ extern "C" { #define MAX_SIZE_OF_PRODUCT_ID (10) /* MAX size of product secret */ -#define MAX_SIZE_OF_PRODUCT_SECRET (32) +#define MAX_SIZE_OF_PRODUCT_SECRET (32) /* MAX size of device name */ #define MAX_SIZE_OF_DEVICE_NAME (48) /* MAX size of device secret */ -#define MAX_SIZE_OF_DEVICE_SECRET (64) +#define MAX_SIZE_OF_DEVICE_SECRET (64) /* MAX size of device cert file name */ #define MAX_SIZE_OF_DEVICE_CERT_FILE_NAME (128) /* MAX size of device key file name */ -#define MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME (128) +#define MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME (128) /* MAX num of subdevice */ -#define MAX_NUM_SUB_DEV (5) +#define MAX_NUM_SUB_DEV (50) /**************** QCloud IoT C-SDK constants end *************************/ @@ -76,7 +76,7 @@ typedef struct { typedef struct { DeviceInfo gw_info; DeviceInfo sub_dev_info[MAX_NUM_SUB_DEV]; - unsigned int sub_dev_num; + int sub_dev_num; } GatewayDeviceInfo; #endif @@ -85,8 +85,10 @@ typedef struct { #include "qcloud_iot_export_error.h" #include "qcloud_iot_export_log.h" #include "qcloud_iot_export_mqtt.h" -#include "qcloud_iot_export_ota.h" #include "qcloud_iot_export_data_template.h" +#include "qcloud_iot_export_ota.h" +#include "qcloud_iot_export_gateway.h" + #ifdef __cplusplus diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/make.settings b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/make.settings index c45ad21d..543250f2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/make.settings +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/make.settings @@ -19,6 +19,12 @@ PLATFORM_AT_DEV = esp8266 # 是否打开MQTT通道的总开关 FEATURE_MQTT_COMM_ENABLED = y +# 是否打开网关功能 +FEATURE_GATEWAY_ENABLED = n + +# 是否使能多线程 +FEATURE_MULTITHREAD_ENABLED = n + # 是否打开OTA固件升级总开关 FEATURE_OTA_COMM_ENABLED = y @@ -51,3 +57,7 @@ FEATURE_AT_OS_USED = y # 是否打开AT模组调试功能 FEATURE_AT_DEBUG = y + +# 是否使用HTTPS下载固件 +FEATURE_OTA_USE_HTTPS = y + diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c index 5845ec62..ca239529 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c @@ -26,57 +26,57 @@ #include "at_socket_inf.h" #include "at_device_esp8266.h" -#define WIFI_CONN_FLAG (1<<0) -#define SEND_OK_FLAG (1<<1) -#define SEND_FAIL_FLAG (1<<2) +#define WIFI_CONN_FLAG (1<<0) +#define SEND_OK_FLAG (1<<1) +#define SEND_FAIL_FLAG (1<<2) static uint8_t sg_SocketBitMap = 0; static at_evt_cb_t at_evt_cb_table[] = { - [AT_SOCKET_EVT_RECV] = NULL, - [AT_SOCKET_EVT_CLOSED] = NULL, + [AT_SOCKET_EVT_RECV] = NULL, + [AT_SOCKET_EVT_CLOSED] = NULL, }; - + static int alloc_fd(void) { - uint8_t i; - int fd; + uint8_t i; + int fd; - for(i = 0; i < ESP8266_MAX_SOCKET_NUM; i++){ - if(0 == ((sg_SocketBitMap>>i) & 0x01)){ - sg_SocketBitMap |= (1<> i) & 0x01)) { + sg_SocketBitMap |= (1 << i) & 0xff; + break; + } + } - return (i < ESP8266_MAX_SOCKET_NUM)?(fd = i):(fd = UNUSED_SOCKET); + return (i < ESP8266_MAX_SOCKET_NUM) ? (fd = i) : (fd = UNUSED_SOCKET); } static void free_fd(int fd) { - uint8_t i = fd; + uint8_t i = fd; - if((fd != UNUSED_SOCKET) && fd < ESP8266_MAX_SOCKET_NUM){ - sg_SocketBitMap &= ~((1< sizeof(temp)){ + while (temp_size < bfsz) { + if (bfsz - temp_size > sizeof(temp)) { at_client_recv(temp, sizeof(temp), timeout); - }else{ + } else { at_client_recv(temp, bfsz - temp_size, timeout); } temp_size += sizeof(temp); @@ -133,15 +131,14 @@ static void urc_recv_func(const char *data, size_t size) } /* sync receive data */ - if (at_client_recv(recv_buf, bfsz, timeout) != bfsz) - { + if (at_client_recv(recv_buf, bfsz, timeout) != bfsz) { Log_e("receive size(%d) data failed!", bfsz); HAL_Free(recv_buf); return; } /* notice the receive buffer and buffer size */ - if (at_evt_cb_table[AT_SOCKET_EVT_RECV]){ + if (at_evt_cb_table[AT_SOCKET_EVT_RECV]) { at_evt_cb_table[AT_SOCKET_EVT_RECV](fd, AT_SOCKET_EVT_RECV, recv_buf, bfsz); } } @@ -149,7 +146,7 @@ static void urc_recv_func(const char *data, size_t size) static void urc_busy_p_func(const char *data, size_t size) { POINTER_SANITY_CHECK_RTN(data); - + Log_d("system is processing a commands and it cannot respond to the current commands."); } @@ -162,348 +159,344 @@ static void urc_busy_s_func(const char *data, size_t size) static void urc_func(const char *data, size_t size) { - POINTER_SANITY_CHECK_RTN(data); - int i; - - if (strstr(data, "WIFI CONNECTED")){ + POINTER_SANITY_CHECK_RTN(data); + int i; + + if (strstr(data, "WIFI CONNECTED")) { at_setFlag(WIFI_CONN_FLAG); - }else if (strstr(data, "WIFI DISCONNECT")){ - /* notice the socket is disconnect by remote */ - if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]){ - for(i = 0; i < ESP8266_MAX_SOCKET_NUM; i++){ - at_evt_cb_table[AT_SOCKET_EVT_CLOSED](i, AT_SOCKET_EVT_CLOSED, NULL, 0); - free_fd(i); - } - } + } else if (strstr(data, "WIFI DISCONNECT")) { + /* notice the socket is disconnect by remote */ + if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]) { + for (i = 0; i < ESP8266_MAX_SOCKET_NUM; i++) { + at_evt_cb_table[AT_SOCKET_EVT_CLOSED](i, AT_SOCKET_EVT_CLOSED, NULL, 0); + free_fd(i); + } + } } } static at_urc urc_table[] = { - {"SEND OK", "\r\n", urc_send_func}, - {"SEND FAIL", "\r\n", urc_send_func}, - {"Recv", "bytes\r\n", urc_send_bfsz_func}, - {"", ",CLOSED\r\n", urc_close_func}, - {"+IPD", ":", urc_recv_func}, - {"busy p", "\r\n", urc_busy_p_func}, - {"busy s", "\r\n", urc_busy_s_func}, - {"WIFI CONNECTED", "\r\n", urc_func}, - {"WIFI DISCONNECT", "\r\n", urc_func}, + {"SEND OK", "\r\n", urc_send_func}, + {"SEND FAIL", "\r\n", urc_send_func}, + {"Recv", "bytes\r\n", urc_send_bfsz_func}, + {"", ",CLOSED\r\n", urc_close_func}, + {"+IPD", ":", urc_recv_func}, + {"busy p", "\r\n", urc_busy_p_func}, + {"busy s", "\r\n", urc_busy_s_func}, + {"WIFI CONNECTED", "\r\n", urc_func}, + {"WIFI DISCONNECT", "\r\n", urc_func}, }; static void esp8266_set_event_cb(at_socket_evt_t event, at_evt_cb_t cb) { - if (event < sizeof(at_evt_cb_table) / sizeof(at_evt_cb_table[0])){ + if (event < sizeof(at_evt_cb_table) / sizeof(at_evt_cb_table[0])) { at_evt_cb_table[event] = cb; } } static int esp8266_init(void) { - at_response_t resp = NULL; - int ret; - int i; + at_response_t resp = NULL; + int ret; + int i; - resp = at_create_resp(512, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } + resp = at_create_resp(512, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } - /* reset module */ - at_exec_cmd(resp, "AT+RST"); - - /* reset waiting delay */ - at_delayms(2000); - - /* disable echo */ - - ret = at_exec_cmd(resp, "ATE0"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd ATE0 exec err"); - //goto exit; - } - - at_delayms(100); - /* set current mode to Wi-Fi station */ - ret = at_exec_cmd(resp, "AT+CWMODE=1"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CWMODE=1 exec err"); - //goto exit; - } - - at_delayms(100); - /* get module version */ - ret = at_exec_cmd(resp, "AT+GMR"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CWMODE=1 exec err"); - //goto exit; - } - - /* show module version */ - for (i = 0; i < resp->line_counts - 1; i++){ - Log_d("%s", at_resp_get_line(resp, i + 1)); - } + /* reset module */ + at_exec_cmd(resp, "AT+RST"); - at_delayms(100); - at_clearFlag(WIFI_CONN_FLAG); - /* connect to WiFi AP */ - ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); + /* reset waiting delay */ + at_delayms(2000); - if(!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)){ - Log_e("wifi connect timeout"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - ret = at_exec_cmd(resp, "AT+CIPMUX=1"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CIPMUX=1 exec err"); - } + /* disable echo */ + + ret = at_exec_cmd(resp, "ATE0"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd ATE0 exec err"); + //goto exit; + } + + at_delayms(100); + /* set current mode to Wi-Fi station */ + ret = at_exec_cmd(resp, "AT+CWMODE=1"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CWMODE=1 exec err"); + //goto exit; + } + + at_delayms(100); + /* get module version */ + ret = at_exec_cmd(resp, "AT+GMR"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CWMODE=1 exec err"); + //goto exit; + } + + /* show module version */ + for (i = 0; i < resp->line_counts - 1; i++) { + Log_d("%s", at_resp_get_line(resp, i + 1)); + } + + at_delayms(100); + at_clearFlag(WIFI_CONN_FLAG); + /* connect to WiFi AP */ + ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); + + if (!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)) { + Log_e("wifi connect timeout"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + ret = at_exec_cmd(resp, "AT+CIPMUX=1"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CIPMUX=1 exec err"); + } __exit: - if (resp){ - at_delete_resp(resp); - } - - return ret; + if (resp) { + at_delete_resp(resp); + } + + return ret; } static int esp8266_close(int fd) { - at_response_t resp; - int ret; + at_response_t resp; + int ret; - resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } + resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } - ret = at_exec_cmd(resp, "AT+CIPCLOSE=%d", fd); + ret = at_exec_cmd(resp, "AT+CIPCLOSE=%d", fd); - if (QCLOUD_RET_SUCCESS != ret) { //fancyxu - Log_e("close socket(%d) fail",fd); - } + if (QCLOUD_RET_SUCCESS != ret) { //fancyxu + Log_e("close socket(%d) fail", fd); + } - if (resp){ - at_delete_resp(resp); - } + if (resp) { + at_delete_resp(resp); + } - return ret; + return ret; } static int esp8266_connect(const char *ip, uint16_t port, eNetProto proto) { - at_response_t resp; - bool retryed = false; - int fd, ret; - - POINTER_SANITY_CHECK(ip, QCLOUD_ERR_INVAL); - resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - fd = alloc_fd(); - if(fd < 0){ - Log_e("esp8226 support max %d chain", ESP8266_MAX_SOCKET_NUM); - return QCLOUD_ERR_FAILURE; - } - -__retry: + at_response_t resp; + bool retryed = false; + int fd, ret; - switch (proto) - { - case eNET_TCP: - /* send AT commands to connect TCP server */ - ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d,60", fd, ip, port); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("start tcp connect failed, fd=%d,ip(%s),port(%d)",fd, ip, port); - } - break; + POINTER_SANITY_CHECK(ip, QCLOUD_ERR_INVAL); + resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } - case eNET_UDP: - ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d", fd, ip, port); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("start udp connect failed, fd=%d,ip(%s),port(%d)",fd, ip, port); - } - break; + fd = alloc_fd(); + if (fd < 0) { + Log_e("esp8226 support max %d chain", ESP8266_MAX_SOCKET_NUM); + return QCLOUD_ERR_FAILURE; + } - default: - Log_e("Not supported connect type : %d", proto); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } +__retry: - if ((QCLOUD_RET_SUCCESS != ret) && !retryed){ - Log_e("socket(%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", fd); - if (QCLOUD_RET_SUCCESS != esp8266_close(fd)){ - goto __exit; - } - retryed = true; - at_delayms(100); - goto __retry; - } + switch (proto) { + case eNET_TCP: + /* send AT commands to connect TCP server */ + ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d,60", fd, ip, port); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("start tcp connect failed, fd=%d,ip(%s),port(%d)", fd, ip, port); + } + break; + + case eNET_UDP: + ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d", fd, ip, port); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("start udp connect failed, fd=%d,ip(%s),port(%d)", fd, ip, port); + } + break; + + default: + Log_e("Not supported connect type : %d", proto); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + if ((QCLOUD_RET_SUCCESS != ret) && !retryed) { + Log_e("socket(%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", fd); + if (QCLOUD_RET_SUCCESS != esp8266_close(fd)) { + goto __exit; + } + retryed = true; + at_delayms(100); + goto __retry; + } __exit: - if (resp){ - at_delete_resp(resp); - } + if (resp) { + at_delete_resp(resp); + } - if(QCLOUD_RET_SUCCESS != ret){ - free_fd(fd); - fd = UNUSED_SOCKET; - } + if (QCLOUD_RET_SUCCESS != ret) { + free_fd(fd); + fd = UNUSED_SOCKET; + } - at_delayms(200); - return fd; + at_delayms(200); + return fd; } static int esp8266_send(int fd, const void *buff, size_t len) { - int ret; - at_response_t resp ; - size_t cur_pkt_size = 0; - size_t sent_size = 0; - size_t temp_size = 0; + int ret; + at_response_t resp ; + size_t cur_pkt_size = 0; + size_t sent_size = 0; + size_t temp_size = 0; - POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); - resp = at_create_resp(512, 2, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - /* set AT client end sign to deal with '>' sign.*/ - at_set_end_sign('>'); + POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); + resp = at_create_resp(512, 2, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } - while (sent_size < len) - { - if (len - sent_size < ESP8266_SEND_MAX_LEN_ONCE){ - cur_pkt_size = len - sent_size; - }else{ - cur_pkt_size = ESP8266_SEND_MAX_LEN_ONCE; - } + /* set AT client end sign to deal with '>' sign.*/ + at_set_end_sign('>'); - at_clearFlag(SEND_OK_FLAG); - at_clearFlag(SEND_FAIL_FLAG); - /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line. */ - ret = at_exec_cmd(resp, "AT+CIPSEND=%d,%d", fd, cur_pkt_size); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CIPSEND exec err"); - goto __exit; - } - at_set_end_sign(0); - /* send the real data to server or client */ - temp_size = at_client_send(at_client_get(), (char *)buff + sent_size, cur_pkt_size, AT_RESP_TIMEOUT_MS); + while (sent_size < len) { + if (len - sent_size < ESP8266_SEND_MAX_LEN_ONCE) { + cur_pkt_size = len - sent_size; + } else { + cur_pkt_size = ESP8266_SEND_MAX_LEN_ONCE; + } - if(cur_pkt_size != temp_size){ - Log_e("at send real data failed"); - goto __exit; - } + at_clearFlag(SEND_OK_FLAG); + at_clearFlag(SEND_FAIL_FLAG); + /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line. */ + ret = at_exec_cmd(resp, "AT+CIPSEND=%d,%d", fd, cur_pkt_size); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CIPSEND exec err"); + goto __exit; + } + at_set_end_sign(0); + /* send the real data to server or client */ + temp_size = at_client_send(at_client_get(), (char *)buff + sent_size, cur_pkt_size, AT_RESP_TIMEOUT_MS); + + if (cur_pkt_size != temp_size) { + Log_e("at send real data failed"); + goto __exit; + } #ifndef AT_OS_USED - at_urc urc_send = {.cmd_prefix = "SEND OK",.cmd_suffix = "\r\n", NULL}; - at_client_yeild(&urc_send, resp->timeout); - if (at_client_get()->resp_status != AT_RESP_OK) - { - Log_e("send fail"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } + at_urc urc_send = {.cmd_prefix = "SEND OK", .cmd_suffix = "\r\n", NULL}; + at_client_yeild(&urc_send, resp->timeout); + if (at_client_get()->resp_status != AT_RESP_OK) { + Log_e("send fail"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } #else - if(at_waitFlag(SEND_OK_FLAG|SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)){ - if(at_waitFlag(SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)){ - Log_e("send fail"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - } + if (at_waitFlag(SEND_OK_FLAG | SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)) { + if (at_waitFlag(SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)) { + Log_e("send fail"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + } #endif - sent_size += cur_pkt_size; - } + sent_size += cur_pkt_size; + } - ret = QCLOUD_RET_SUCCESS; + ret = QCLOUD_RET_SUCCESS; __exit: - /* reset the end sign for data */ - if (resp){ - at_delete_resp(resp); - } + /* reset the end sign for data */ + if (resp) { + at_delete_resp(resp); + } - return sent_size; //fancyxu + return sent_size; //fancyxu } static int esp8266_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) { #ifndef AT_OS_USED - at_client_yeild(NULL, timeout); + at_client_yeild(NULL, timeout); #endif - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } static int esp8266_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) { #define RESOLVE_RETRY 5 - char recv_ip[16] = { 0 }; - at_response_t resp; - int ret,i; + char recv_ip[16] = { 0 }; + at_response_t resp; + int ret, i; - POINTER_SANITY_CHECK(host_name, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(host_ip, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(host_name, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(host_ip, QCLOUD_ERR_INVAL); - if(host_ip_len < 16){ - Log_e("host ip buff too short"); - return QCLOUD_ERR_FAILURE; - } + if (host_ip_len < 16) { + Log_e("host ip buff too short"); + return QCLOUD_ERR_FAILURE; + } - resp = at_create_resp(128, 0, 4*AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } + resp = at_create_resp(128, 0, 4 * AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } - for (i = 0; i < RESOLVE_RETRY; i++){ - ret = at_exec_cmd(resp, "AT+CIPDOMAIN=\"%s\"", host_name); - if (QCLOUD_RET_SUCCESS != ret){ - Log_e("exec AT+CIPDOMAIN=\"%s\" fail", host_name); - goto __exit; - } + for (i = 0; i < RESOLVE_RETRY; i++) { + ret = at_exec_cmd(resp, "AT+CIPDOMAIN=\"%s\"", host_name); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("exec AT+CIPDOMAIN=\"%s\" fail", host_name); + goto __exit; + } - /* parse the third line of response data, get the IP address */ - if (at_resp_parse_line_args_by_kw(resp, "+CIPDOMAIN:", "+CIPDOMAIN:%s", recv_ip) < 0){ - at_delayms(100); - /* resolve failed, maybe receive an URC CRLF */ - continue; - } + /* parse the third line of response data, get the IP address */ + if (at_resp_parse_line_args_by_kw(resp, "+CIPDOMAIN:", "+CIPDOMAIN:%s", recv_ip) < 0) { + at_delayms(100); + /* resolve failed, maybe receive an URC CRLF */ + continue; + } - if (strlen(recv_ip) < 8){ - at_delayms(100); - /* resolve failed, maybe receive an URC CRLF */ - continue; - } - else{ - strncpy(host_ip, recv_ip, 15); - host_ip[15] = '\0'; - break; - } - } + if (strlen(recv_ip) < 8) { + at_delayms(100); + /* resolve failed, maybe receive an URC CRLF */ + continue; + } else { + strncpy(host_ip, recv_ip, 15); + host_ip[15] = '\0'; + break; + } + } __exit: - if (resp){ - at_delete_resp(resp); - } - -#undef RESOLVE_RETRY + if (resp) { + at_delete_resp(resp); + } - return ret; +#undef RESOLVE_RETRY + + return ret; } at_device_op_t at_ops_esp8266 = { @@ -514,62 +507,58 @@ at_device_op_t at_ops_esp8266 = { .close = esp8266_close, .parse_domain = esp8266_parse_domain, .set_event_cb = esp8266_set_event_cb, - .deviceName = "esp8266", + .deviceName = "esp8266", }; int at_device_esp8266_init(void) -{ - int i; - int ret; - at_client_t p_client; - - ret = HAL_AT_Uart_Init(); +{ + int i; + int ret; + at_client_t p_client; + + ret = HAL_AT_Uart_Init(); if (QCLOUD_RET_SUCCESS != ret) { Log_e("at uart init fail!"); } else { - Log_d("at uart init success!"); - } + Log_d("at uart init success!"); + } /* initialize AT client */ ret = at_client_init(&p_client); - if(QCLOUD_RET_SUCCESS != ret) - { - Log_e("at client init fail,ret:%d", ret); - goto exit; - } - else - { - Log_d("at client init success"); - } - + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at client init fail,ret:%d", ret); + goto exit; + } else { + Log_d("at client init success"); + } + /* register URC data execution function */ at_set_urc_table(p_client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); - Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); - for(i=0; i < p_client->urc_table_size; i++) - { - Log_d("%s",p_client->urc_table[i].cmd_prefix); - } + Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); + for (i = 0; i < p_client->urc_table_size; i++) { + Log_d("%s", p_client->urc_table[i].cmd_prefix); + } - ret = at_device_op_register(&at_ops_esp8266); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("at device driver register fail"); - goto exit; - } + ret = at_device_op_register(&at_ops_esp8266); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at device driver register fail"); + goto exit; + } exit: - if(QCLOUD_RET_SUCCESS != ret){ - if(NULL != p_client){ - at_client_deinit(p_client); - } - } - + if (QCLOUD_RET_SUCCESS != ret) { + if (NULL != p_client) { + at_client_deinit(p_client); + } + } + return ret; } /*at device driver must realize this api which called by HAL_AT_TCP_Init*/ int at_device_init(void) { - return at_device_esp8266_init(); + return at_device_esp8266_init(); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c index 70180de4..bcfb309a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c @@ -32,7 +32,7 @@ #include "stm32l4xx_hal.h" #define HAL_AT_UART_IRQHandler USART1_IRQHandler -extern UART_HandleTypeDef huart1; +extern UART_HandleTypeDef huart1; static UART_HandleTypeDef *pAtUart = &huart1; extern void AT_Uart_Init(void); @@ -44,16 +44,15 @@ extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); * @brief This function handles AT UART global interrupt,push recv char to ringbuff. */ void HAL_AT_UART_IRQHandler(void) -{ - uint8_t ch; - if(__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) - { - ch = (uint8_t) READ_REG(pAtUart->Instance->RDR)&0xFF; - /*this callback for at_client*/ - at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); - } - __HAL_UART_CLEAR_PEFLAG(pAtUart); +{ + uint8_t ch; + if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { + ch = (uint8_t) READ_REG(pAtUart->Instance->RDR) & 0xFF; + /*this callback for at_client*/ + at_client_uart_rx_isr_cb(&ch, 1); + HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + } + __HAL_UART_CLEAR_PEFLAG(pAtUart); } @@ -65,24 +64,21 @@ void HAL_AT_UART_IRQHandler(void) */ int HAL_AT_Uart_Send(void *data, uint32_t size) { - if(HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) - { - return size; - } - else - { - return 0; - } + if (HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) { + return size; + } else { + return 0; + } } int HAL_AT_Uart_Init(void) { - AT_Uart_Init(); - return QCLOUD_RET_SUCCESS; + AT_Uart_Init(); + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c index 0b42a647..23a0541c 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c @@ -28,7 +28,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -50,111 +50,111 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); #else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo from json not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c index 83127940..955b3a15 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c @@ -31,14 +31,14 @@ //TODO platform dependant void HAL_SleepMs(_IN_ uint32_t ms) { - TickType_t ticks = ms / portTICK_PERIOD_MS; + TickType_t ticks = ms / portTICK_PERIOD_MS; - vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ + vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ - return ; + return ; } - + void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; @@ -70,12 +70,12 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void *HAL_Malloc(_IN_ uint32_t size) { - return pvPortMalloc( size); + return pvPortMalloc( size); } void HAL_Free(_IN_ void *ptr) { - vPortFree(ptr); + vPortFree(ptr); } @@ -106,7 +106,7 @@ void HAL_MutexLock(_IN_ void *mutex) HAL_Printf("%s: invalid mutex\n", __FUNCTION__); return ; } - + if (xSemaphoreTake(mutex, portMAX_DELAY) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); return ; @@ -119,12 +119,12 @@ int HAL_MutexTryLock(_IN_ void *mutex) HAL_Printf("%s: invalid mutex\n", __FUNCTION__); return -1; } - + if (xSemaphoreTake(mutex, 0) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); return -1; } - + return 0; } @@ -147,55 +147,53 @@ void HAL_MutexUnlock(_IN_ void *mutex) /* * return void* threadId */ -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - osThreadId thread_t = (osThreadId)HAL_Malloc(sizeof(osThreadId)); + osThreadId thread_t = (osThreadId)HAL_Malloc(sizeof(osThreadId)); - osThreadDef(taskname, (os_pthread)fn, (osPriority)priority, 0, stack_size); - thread_t = osThreadCreate(osThread(taskname), arg); - if(NULL == thread_t){ - HAL_Printf("create thread fail\n\r"); - } + osThreadDef(taskname, (os_pthread)fn, (osPriority)priority, 0, stack_size); + thread_t = osThreadCreate(osThread(taskname), arg); + if (NULL == thread_t) { + HAL_Printf("create thread fail\n\r"); + } - return (void *)thread_t; + return (void *)thread_t; } int HAL_ThreadDestroy(void* threadId) { - return osThreadTerminate(threadId); + return osThreadTerminate(threadId); } void *HAL_SemaphoreCreate(void) { - return (void *)osSemaphoreCreate(NULL, 1); + return (void *)osSemaphoreCreate(NULL, 1); } void HAL_SemaphoreDestroy(void *sem) { - osStatus ret; - - ret = osSemaphoreDelete ((osSemaphoreId)sem); - if(osOK != ret) - { - HAL_Printf("HAL_SemaphoreDestroy err, err:%d\n\r",ret); - } + osStatus ret; + + ret = osSemaphoreDelete ((osSemaphoreId)sem); + if (osOK != ret) { + HAL_Printf("HAL_SemaphoreDestroy err, err:%d\n\r", ret); + } } void HAL_SemaphorePost(void *sem) { - osStatus ret; - - ret = osSemaphoreRelease ((osSemaphoreId) sem); + osStatus ret; - if(osOK != ret) - { - HAL_Printf("HAL_SemaphorePost err, err:%d\n\r",ret); - } + ret = osSemaphoreRelease ((osSemaphoreId) sem); + + if (osOK != ret) { + HAL_Printf("HAL_SemaphorePost err, err:%d\n\r", ret); + } } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { - return osSemaphoreWait ((osSemaphoreId)sem, timeout_ms); + return osSemaphoreWait ((osSemaphoreId)sem, timeout_ms); } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c index 8d5bb482..bfb91c31 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c @@ -45,8 +45,8 @@ static uint32_t _time_left(uint32_t t_end, uint32_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; + int ret; + struct addrinfo hints, *addr_list, *cur; int fd = 0; char port_str[6]; @@ -55,7 +55,7 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) memset(&hints, 0x00, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + hints.ai_protocol = IPPROTO_TCP; ret = getaddrinfo(host, port_str, &hints, &addr_list); if (ret) { @@ -64,21 +64,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } + fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); + if ( fd < 0 ) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd + LWIP_SOCKET_FD_SHIFT; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd + LWIP_SOCKET_FD_SHIFT; + break; + } - close( fd ); - ret = 0; + close( fd ); + ret = 0; } if (ret == 0) { @@ -105,14 +103,14 @@ int HAL_TCP_Disconnect(uintptr_t fd) /* Shutdown both send and receive operations. */ rc = shutdown((int) fd, 2); - if (0 != rc) { - Log_e("shutdown error: %s", strerror(errno)); + if (0 != rc) { + Log_e("shutdown error: %s", strerror(errno)); return -1; } rc = close((int) fd); if (0 != rc) { - Log_e("closesocket error: %s", strerror(errno)); + Log_e("closesocket error: %s", strerror(errno)); return -1; } @@ -163,13 +161,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -184,8 +181,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -205,7 +202,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou fd_set sets; struct timeval timeout; - + fd -= LWIP_SOCKET_FD_SHIFT; t_end = HAL_GetTimeMs() + timeout_ms; len_recv = 0; @@ -214,7 +211,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou do { t_left = _time_left(t_end, HAL_GetTimeMs()); if (0 == t_left) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } @@ -238,18 +235,18 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou /* reduce log print due to frequent log server connect/disconnect */ if (peer_port == LOG_UPLOAD_SERVER_PORT) - UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); + UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } - Log_e("recv error: %s", strerror(errno)); + } + Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } @@ -257,7 +254,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } else { - Log_e("select-recv error: %s", strerror(errno)); + Log_e("select-recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c index c5a93bdd..13cb3dcb 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c @@ -20,7 +20,7 @@ extern "C" { #include #include #include -#include +#include #include "qcloud_iot_import.h" #define PLATFORM_HAS_TIME_FUNCS @@ -43,72 +43,72 @@ static char now_time_str[20] = {0}; uint32_t HAL_GetTimeMs(void) { #if defined PLATFORM_HAS_TIME_FUNCS - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec*1000 + tv.tv_usec/1000; - + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000 + tv.tv_usec / 1000; + #elif defined PLATFORM_HAS_CMSIS return HAL_GetTick(); -#endif +#endif } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - return HAL_GetTimeMs()/1000; + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) -{ +char* HAL_Timer_current(void) +{ #if defined PLATFORM_HAS_TIME_FUNCS struct timeval tv; - gettimeofday(&tv, NULL); - time_t now_time = tv.tv_sec; - struct tm tm_tmp = *localtime(&now_time); - strftime(now_time_str, 20, "%F %T", &tm_tmp); - return now_time_str; -#else - long time_sec; - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%ld", time_sec); - return now_time_str; + gettimeofday(&tv, NULL); + time_t now_time = tv.tv_sec; + struct tm tm_tmp = *localtime(&now_time); + strftime(now_time_str, 20, "%F %T", &tm_tmp); + return now_time_str; +#else + long time_sec; + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%ld", time_sec); + return now_time_str; #endif } -bool HAL_Timer_expired(Timer *timer) +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout_ms; } -int HAL_Timer_remain(Timer *timer) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - return (int)(timer->end_time - HAL_GetTimeMs()); + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout * 1000; } -void HAL_Timer_init(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - timer->end_time = 0; + return (int)(timer->end_time - HAL_GetTimeMs()); } - +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; +} + + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c index e56de9eb..526c10b5 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c @@ -49,25 +49,25 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd + LWIP_SOCKET_FD_SHIFT; - break; - } + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd + LWIP_SOCKET_FD_SHIFT; + break; + } - close(fd); - ret = 0; + close(fd); + ret = 0; } if (0 == ret) { @@ -87,7 +87,7 @@ void HAL_UDP_Disconnect(uintptr_t fd) { long socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; close(socket_id); } @@ -97,7 +97,7 @@ int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datale int rc = -1; long socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; rc = send(socket_id, (char *)p_data, (int)datalen, 0); if (-1 == rc) { @@ -112,7 +112,7 @@ int HAL_UDP_Read(uintptr_t fd, unsigned char *p_data, unsigned int datalen) long socket_id = -1; int count = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; count = (int)read(socket_id, p_data, datalen); @@ -126,7 +126,7 @@ int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datale fd_set read_fds; int socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; if (socket_id < 0) { diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c index b2300bc0..9c3d8f04 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c @@ -45,176 +45,173 @@ static void *at_uart_irq_recv(void *userContex); #define AT_UART_LINUX_DEV "/dev/ttyUSB0" static uart_dev_t sg_at_uart = { - .fd = -1, - .state = eUNUSED, - .config = {BAUDRATE_115200, DATA_WIDTH_8BIT, NO_PARITY, STOP_BITS_1, FLOW_CONTROL_DISABLED, MODE_TX_RX} + .fd = -1, + .state = eUNUSED, + .config = {BAUDRATE_115200, DATA_WIDTH_8BIT, NO_PARITY, STOP_BITS_1, FLOW_CONTROL_DISABLED, MODE_TX_RX} }; int HAL_AT_Uart_Init(void) { - struct termios t_opt; - speed_t baud; + struct termios t_opt; + speed_t baud; - if (sg_at_uart.state == eOPENED) { - Log_w("%s already opened", AT_UART_LINUX_DEV); - return QCLOUD_ERR_FAILURE; - } + if (sg_at_uart.state == eOPENED) { + Log_w("%s already opened", AT_UART_LINUX_DEV); + return QCLOUD_ERR_FAILURE; + } - if ((sg_at_uart.fd = open(AT_UART_LINUX_DEV, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { - Log_e("open at uart failed\r\n"); - return QCLOUD_ERR_FAILURE; - } + if ((sg_at_uart.fd = open(AT_UART_LINUX_DEV, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { + Log_e("open at uart failed\r\n"); + return QCLOUD_ERR_FAILURE; + } - switch (sg_at_uart.config.baud_rate) { - case BAUDRATE_9600: - baud = B9600; - break; - case BAUDRATE_115200: - baud = B115200; - break; - case BAUDRATE_921600: - baud = B921600; - break; - default: - baud = B115200; - break; - } + switch (sg_at_uart.config.baud_rate) { + case BAUDRATE_9600: + baud = B9600; + break; + case BAUDRATE_115200: + baud = B115200; + break; + case BAUDRATE_921600: + baud = B921600; + break; + default: + baud = B115200; + break; + } - /* set the serial port parameters */ - fcntl(sg_at_uart.fd, F_SETFL, 0); + /* set the serial port parameters */ + fcntl(sg_at_uart.fd, F_SETFL, 0); - if (0 != tcgetattr(sg_at_uart.fd, &t_opt)) { - return QCLOUD_ERR_FAILURE; - } + if (0 != tcgetattr(sg_at_uart.fd, &t_opt)) { + return QCLOUD_ERR_FAILURE; + } - /* set the input and output baudrate*/ - if (0 != cfsetispeed(&t_opt, baud)) { - return QCLOUD_ERR_FAILURE; - } + /* set the input and output baudrate*/ + if (0 != cfsetispeed(&t_opt, baud)) { + return QCLOUD_ERR_FAILURE; + } - if (0 != cfsetospeed(&t_opt, baud)) { - return QCLOUD_ERR_FAILURE; - } + if (0 != cfsetospeed(&t_opt, baud)) { + return QCLOUD_ERR_FAILURE; + } - /* 8N1, flow control, etc. */ - t_opt.c_cflag |= (CLOCAL | CREAD); - if (sg_at_uart.config.parity == NO_PARITY) { - t_opt.c_cflag &= ~PARENB; - } - if (sg_at_uart.config.stop_bits == STOP_BITS_1) { - t_opt.c_cflag &= ~CSTOPB; - } - else { - t_opt.c_cflag |= CSTOPB; - } - t_opt.c_cflag &= ~CSIZE; - switch (sg_at_uart.config.data_width) { - case DATA_WIDTH_5BIT: - t_opt.c_cflag |= CS5; - break; - case DATA_WIDTH_6BIT: - t_opt.c_cflag |= CS6; - break; - case DATA_WIDTH_7BIT: - t_opt.c_cflag |= CS7; - break; - case DATA_WIDTH_8BIT: - t_opt.c_cflag |= CS8; - break; - default: - t_opt.c_cflag |= CS8; - break; - } - t_opt.c_lflag &= ~(ECHO | ECHOE | ISIG | ICANON); + /* 8N1, flow control, etc. */ + t_opt.c_cflag |= (CLOCAL | CREAD); + if (sg_at_uart.config.parity == NO_PARITY) { + t_opt.c_cflag &= ~PARENB; + } + if (sg_at_uart.config.stop_bits == STOP_BITS_1) { + t_opt.c_cflag &= ~CSTOPB; + } else { + t_opt.c_cflag |= CSTOPB; + } + t_opt.c_cflag &= ~CSIZE; + switch (sg_at_uart.config.data_width) { + case DATA_WIDTH_5BIT: + t_opt.c_cflag |= CS5; + break; + case DATA_WIDTH_6BIT: + t_opt.c_cflag |= CS6; + break; + case DATA_WIDTH_7BIT: + t_opt.c_cflag |= CS7; + break; + case DATA_WIDTH_8BIT: + t_opt.c_cflag |= CS8; + break; + default: + t_opt.c_cflag |= CS8; + break; + } + t_opt.c_lflag &= ~(ECHO | ECHOE | ISIG | ICANON); - /** - * AT is going to use a binary protocol, so make sure to - * turn off any CR/LF translation and the like. - */ - t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); + /** + * AT is going to use a binary protocol, so make sure to + * turn off any CR/LF translation and the like. + */ + t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); - t_opt.c_oflag &= ~OPOST; - t_opt.c_cc[VMIN] = 0; - t_opt.c_cc[VTIME] = 5; - if (0 != tcsetattr(sg_at_uart.fd, TCSANOW, &t_opt)) { - return QCLOUD_ERR_FAILURE; - } + t_opt.c_oflag &= ~OPOST; + t_opt.c_cc[VMIN] = 0; + t_opt.c_cc[VTIME] = 5; + if (0 != tcsetattr(sg_at_uart.fd, TCSANOW, &t_opt)) { + return QCLOUD_ERR_FAILURE; + } - sg_at_uart.state = eOPENED; + sg_at_uart.state = eOPENED; - /* clear uart buffer */ - //Log_e("open at uart 1\r\n"); - //read_and_discard_all_data(sg_at_uart.fd); - //Log_e("open at uart 2\r\n"); + /* clear uart buffer */ + //Log_e("open at uart 1\r\n"); + //read_and_discard_all_data(sg_at_uart.fd); + //Log_e("open at uart 2\r\n"); #ifdef AT_UART_RECV_IRQ - //START THERAD - //int result; - volatile void *recv_thread; - recv_thread = HAL_ThreadCreate(6144, 0, "at_uart_isr_thread", at_uart_irq_recv, NULL); - if(!recv_thread) Log_e("Init uart_irq_recv failed\r\n"); + //START THERAD + //int result; + volatile void *recv_thread; + recv_thread = HAL_ThreadCreate(6144, 0, "at_uart_isr_thread", at_uart_irq_recv, NULL); + if (!recv_thread) Log_e("Init uart_irq_recv failed\r\n"); #endif - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - if (sg_at_uart.state == eOPENED) { - close(sg_at_uart.fd); - sg_at_uart.state = eCLOSED; - } + if (sg_at_uart.state == eOPENED) { + close(sg_at_uart.fd); + sg_at_uart.state = eCLOSED; + } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Send(void *data, uint32_t size) { - uint32_t leftlen = size; - int ret = QCLOUD_RET_SUCCESS; + uint32_t leftlen = size; + int ret = QCLOUD_RET_SUCCESS; - if (sg_at_uart.state == eOPENED) { - while (leftlen > 0) { - ret = write(sg_at_uart.fd, data + size - leftlen, leftlen); - if (ret == -1) { - Log_e("write uart fd failed on error: %d.\r\n", errno); - ret = QCLOUD_ERR_FAILURE; - break; - } - leftlen -= ret; - } - } - else { - Log_e("AT Uart uninitialized"); - ret = QCLOUD_ERR_FAILURE; - } + if (sg_at_uart.state == eOPENED) { + while (leftlen > 0) { + ret = write(sg_at_uart.fd, data + size - leftlen, leftlen); + if (ret == -1) { + Log_e("write uart fd failed on error: %d.\r\n", errno); + ret = QCLOUD_ERR_FAILURE; + break; + } + leftlen -= ret; + } + } else { + Log_e("AT Uart uninitialized"); + ret = QCLOUD_ERR_FAILURE; + } - return (ret == QCLOUD_ERR_FAILURE) ? QCLOUD_ERR_FAILURE : size; + return (ret == QCLOUD_ERR_FAILURE) ? QCLOUD_ERR_FAILURE : size; } int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) { - int readlen; - int ret; + int readlen; + int ret; - if (sg_at_uart.state == eOPENED) { + if (sg_at_uart.state == eOPENED) { - if ((readlen = read(sg_at_uart.fd, data, expect_size)) == -1) { - ret = QCLOUD_ERR_FAILURE; - } + if ((readlen = read(sg_at_uart.fd, data, expect_size)) == -1) { + ret = QCLOUD_ERR_FAILURE; + } - if (recv_size) { - *recv_size = readlen; - } + if (recv_size) { + *recv_size = readlen; + } - } - else { - Log_e("AT Uart uninitialized"); - ret = QCLOUD_ERR_FAILURE; - } + } else { + Log_e("AT Uart uninitialized"); + ret = QCLOUD_ERR_FAILURE; + } - return ret; + return ret; } //simulate IRQ @@ -222,16 +219,15 @@ int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); static void *at_uart_irq_recv(void *userContex) { - uint8_t data[64]; - int readlen; - while (1) - { - if ((readlen = read(sg_at_uart.fd, data, sizeof(data))) == -1) { - continue; - } - at_client_uart_rx_isr_cb(data, readlen); //push - } - return NULL; + uint8_t data[64]; + int readlen; + while (1) { + if ((readlen = read(sg_at_uart.fd, data, sizeof(data))) == -1) { + continue; + } + at_client_uart_rx_isr_cb(data, readlen); //push + } + return NULL; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c index facc7f00..36639465 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c @@ -29,7 +29,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -51,56 +51,77 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +//static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +//static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; + +#ifdef DEBUG_DEV_INFO_USED +static const DeviceInfo sg_subdevList[] = { + {.product_id = "WPDA0S6S08", .device_name = "dev001"}, + {.product_id = "WPDA0S6S08", .device_name = "dev002"}, + {.product_id = "WPDA0S6S08", .device_name = "dev003"}, + + {.product_id = "Y8T6NB8DM0", .device_name = "test001"}, + {.product_id = "Y8T6NB8DM0", .device_name = "test002"}, + {.product_id = "Y8T6NB8DM0", .device_name = "test003"} +}; +#endif + #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -int HAL_SetDevInfoFile(const char *file_name) -{ - Log_w("device info is not stored in file!!"); - + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); return QCLOUD_RET_SUCCESS; } -#else +int HAL_SetDevInfoFile(const char *file_name) +{ + Log_w("device info is not stored in file!!"); + + return QCLOUD_RET_SUCCESS; +} + +#else /*device info manage example method*/ #include "lite-utils.h" -#define MAX_DEV_INFO_FILE_LEN 1024 -#define MAX_CONFIG_FILE_NAME 256 +#ifdef GATEWAY_ENABLED +#define MAX_DEV_INFO_FILE_LEN 10*1024 +#else +#define MAX_DEV_INFO_FILE_LEN 1024 +#endif +#define MAX_CONFIG_FILE_NAME 256 - -#define KEY_AUTH_MODE "auth_mode" -#define KEY_PRODUCT_ID "productId" -#define KEY_PRODUCT_SECRET "productSecret" -#define KEY_DEV_NAME "deviceName" -#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" -#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" -#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" -#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" -#define KEY_SUBDEV_NAME "subDev.sub_devName" -#define STR_DEV_INFO "key_deviceinfo" -#define STR_DEV_SECRET "deviceSecret" -#define STR_DEV_CERT "cert_deviceinfo" -#define STR_DEV_CERT_FILE "devCertFile" -#define STR_DEV_KEY_FILE "devPrivateKeyFile" +#define KEY_AUTH_MODE "auth_mode" +#define KEY_PRODUCT_ID "productId" +#define KEY_PRODUCT_SECRET "productSecret" +#define KEY_DEV_NAME "deviceName" +#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" +#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" +#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" + +#define KEY_SUBDEV_PRODUCT_ID "sub_productId" +#define KEY_SUBDEV_NAME "sub_devName" +#define KEY_SUBDEV_NUM "subDev.subdev_num" +#define KEY_SUBDEV_LIST "subDev.subdev_list" + + +#define STR_DEV_INFO "key_deviceinfo" +#define STR_DEV_SECRET "deviceSecret" +#define STR_DEV_CERT "cert_deviceinfo" +#define STR_DEV_CERT_FILE "devCertFile" +#define STR_DEV_KEY_FILE "devPrivateKeyFile" #define MAX_SIZE_OF_DEVICE_INFO_FILE 128 -static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE+1] = {"./device_info.json"}; +static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE + 1] = {"./device_info.json"}; int HAL_SetDevInfoFile(const char *file_name) { @@ -114,7 +135,7 @@ int HAL_SetDevInfoFile(const char *file_name) Log_e("device info file \"%s\" not existed", file_name); return QCLOUD_ERR_FAILURE; } - + memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); return QCLOUD_RET_SUCCESS; @@ -122,433 +143,497 @@ int HAL_SetDevInfoFile(const char *file_name) static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; + FILE *fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + char *JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - /*Get device info*/ - char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); - if(NULL == authMode) { - HAL_Free(JsonDoc); - Log_e("read authcode from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); - char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + /*Get device info*/ + char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); + if (NULL == authMode) { + HAL_Free(JsonDoc); + Log_e("read authcode from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); + if (NULL == productId) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + Log_e("read product id from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } -#ifdef DEV_DYN_REG_ENABLED - char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); - if(NULL == productSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - Log_e("read product secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); -#endif - -#ifdef AUTH_MODE_CERT - char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); - if(NULL == devCrtFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); -#endif - Log_e("read device crt file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); - if(NULL == devKeyFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - HAL_Free(productSecret); - HAL_Free(devCrtFileName); - Log_e("read device private key file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); + char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); + if (NULL == devName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + Log_e("read device name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + +#ifdef DEV_DYN_REG_ENABLED + char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); + if (NULL == productSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + Log_e("read product secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); +#endif + +#ifdef AUTH_MODE_CERT + char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); + if (NULL == devCrtFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif + Log_e("read device crt file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); + if (NULL == devKeyFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + HAL_Free(devCrtFileName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif + Log_e("read device private key file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); #else - char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); - if(NULL == devSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); + char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); + if (NULL == devSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); #endif - Log_e("read device secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); - //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); + Log_e("read device secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); + //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); #endif - if(authMode){ - HAL_Free(authMode); - } - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -#ifdef DEV_DYN_REG_ENABLED - if(productSecret){ - HAL_Free(productSecret); - } + if (authMode) { + HAL_Free(authMode); + } + + if (productId) { + HAL_Free(productId); + } + + if (devName) { + HAL_Free(devName); + } + +#ifdef DEV_DYN_REG_ENABLED + if (productSecret) { + HAL_Free(productSecret); + } #endif -#ifdef AUTH_MODE_CERT - if(devCrtFileName){ - HAL_Free(devCrtFileName); - } +#ifdef AUTH_MODE_CERT + if (devCrtFileName) { + HAL_Free(devCrtFileName); + } - if(devKeyFileName){ - HAL_Free(devKeyFileName); - } + if (devKeyFileName) { + HAL_Free(devKeyFileName); + } #else - if(devSecret){ - HAL_Free(devSecret); - } + if (devSecret) { + HAL_Free(devSecret); + } #endif - if(NULL != JsonDoc){ - HAL_Free(JsonDoc); - } + if (NULL != JsonDoc) { + HAL_Free(JsonDoc); + } -exit: - if(NULL != fp){ - fclose(fp); - } - return ret; +exit: + if (NULL != fp) { + fclose(fp); + } + return ret; } #ifdef GATEWAY_ENABLED -static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) -{ - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { +static int iot_get_subdev_from_list(char* devList, DeviceInfo *pDevInfo, int *pDevNum) +{ +#define MAX_LEN_DEV_INFO (MAX_SIZE_OF_PRODUCT_ID + MAX_SIZE_OF_DEVICE_NAME + 128) + int devNum = *pDevNum; + int count = 0; + int ret = QCLOUD_RET_SUCCESS; + char *pNext; + char TempBuff[MAX_LEN_DEV_INFO]; + + if (devList == NULL || pDevInfo == NULL || devNum == 0) { + return QCLOUD_ERR_INVAL; + } + + pNext = (char *)strtok(devList, "}"); + while (pNext != NULL) { + memset(TempBuff, '\0', MAX_LEN_DEV_INFO); + HAL_Snprintf(TempBuff, MAX_LEN_DEV_INFO, "%s}", pNext); + char *pos = strchr(TempBuff, '{'); + if(NULL == pos){ + *pDevNum = count; + break; + } + + char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, pos); + if (productId) { + strncpy(pDevInfo[count].product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + HAL_Free(productId); + productId = NULL; + } else { + ret = QCLOUD_ERR_INVAL; + break; + } + + char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, pos); + if (devName) { + strncpy(pDevInfo[count].device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + HAL_Free(devName); + devName = NULL; + } else { + ret = QCLOUD_ERR_INVAL; + break; + } + + count++; + pNext = (char *)strtok(NULL, "}"); + + if (count > (devNum - 1)) { + break; + } + } + + return ret; +#undef MAX_LEN_DEV_INFO +} + +static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo, int *subDevNum) +{ + FILE *fp; + uint32_t len; + uint32_t rlen; + char *JsonDoc = NULL; + int ret = QCLOUD_RET_SUCCESS; + + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } + JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - /*Get sub device info*/ - char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); - char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - //Log_d("pid:%s, devName:%s", productId, devName); - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } + /*Get sub device num*/ + char* devNum = LITE_json_value_of(KEY_SUBDEV_NUM, JsonDoc); + if (devNum) { + *subDevNum = atoi(devNum); + *subDevNum = (*subDevNum > MAX_NUM_SUB_DEV) ? MAX_NUM_SUB_DEV : (*subDevNum); + HAL_Free(devNum); + } else { + Log_e("fail to parse dev num"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*Get sub info*/ + char* devList = LITE_json_value_of(KEY_SUBDEV_LIST, JsonDoc); + if (devList) { //json utils not support array parse currently, we will update json utils + ret = iot_get_subdev_from_list(devList, pDevInfo, subDevNum); + HAL_Free(devList); + } else { + Log_e("fail to parse devList"); + ret = QCLOUD_ERR_FAILURE; + } - if(JsonDoc){ - HAL_Free(JsonDoc); - } - exit: - - if(NULL != fp){ - fclose(fp); - } - return ret; + if (JsonDoc) { + HAL_Free(JsonDoc); + } + + if (NULL != fp) { + fclose(fp); + } + + return ret; } #endif static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) { - char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; - int32_t remain_size = MAX_DEV_INFO_FILE_LEN; + char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; + int32_t remain_size = MAX_DEV_INFO_FILE_LEN; int32_t rc_of_snprintf = 0; - int32_t wlen; - FILE *fp; + int32_t wlen; + FILE *fp; - rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); + remain_size -= rc_of_snprintf; - //auth_mode -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "CERT" - ); - remain_size -= rc_of_snprintf; + //auth_mode +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "CERT" + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "KEY" - ); - remain_size -= rc_of_snprintf; -#endif - - //product id, device name - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ - KEY_PRODUCT_ID, pDevInfo->product_id, \ - KEY_DEV_NAME, pDevInfo->device_name); - remain_size -= rc_of_snprintf; - - //product secret -#ifdef DEV_DYN_REG_ENABLED - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n", - KEY_PRODUCT_SECRET, pDevInfo->product_secret); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "KEY" + ); + remain_size -= rc_of_snprintf; #endif - - // key device info or cert device info -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ - STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name,\ - STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ - ); - remain_size -= rc_of_snprintf; + + //product id, device name + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ + KEY_PRODUCT_ID, pDevInfo->product_id, \ + KEY_DEV_NAME, pDevInfo->device_name); + remain_size -= rc_of_snprintf; + + //product secret +#ifdef DEV_DYN_REG_ENABLED + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n", + KEY_PRODUCT_SECRET, pDevInfo->product_secret); + remain_size -= rc_of_snprintf; +#endif + + // key device info or cert device info +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ + STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name, \ + STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\"\n}",\ - STR_DEV_SECRET, pDevInfo->device_secret); - remain_size -= rc_of_snprintf; -#endif + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\"\n}", \ + STR_DEV_SECRET, pDevInfo->device_secret); + remain_size -= rc_of_snprintf; +#endif - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); + remain_size -= rc_of_snprintf; - Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); + Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); - fp = fopen(sg_device_info_file, "w"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "w"); + if (NULL == fp) { Log_e("open file %s failed", sg_device_info_file); return QCLOUD_ERR_FAILURE; } - wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); - if(wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { - Log_e("write len less than needed"); - } - fclose(fp); - return QCLOUD_RET_SUCCESS; + wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); + if (wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { + Log_e("write len less than needed"); + } + fclose(fp); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - ret = iot_save_devinfo_to_json_file(devInfo); + ret = iot_save_devinfo_to_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - ret = iot_parse_devinfo_from_json_file(devInfo); + ret = iot_parse_devinfo_from_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + int i; + + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + if (sizeof(sg_subdevList[]) / sizeof(sg_subdevList[0]) > MAX_NUM_SUB_DEV) { + gwDevInfo->sub_dev_num = MAX_NUM_SUB_DEV; + } else { + gwDevInfo->sub_dev_num = sizeof(sg_subdevList[]) / sizeof(sg_subdevList[0]); + } + + for (i = 0; i < gwDevInfo->sub_dev_num; i++) { + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[i].product_id, sg_subdevList[i].product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[i].device_name, sg_subdevList[i].device_name, MAX_SIZE_OF_DEVICE_NAME); + } #else - ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); - if(ret != QCLOUD_RET_SUCCESS) { - return QCLOUD_ERR_FAILURE; - } - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); + ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); + if (ret != QCLOUD_RET_SUCCESS) { + return QCLOUD_ERR_FAILURE; + } + + //copy sub dev info + memset((char *)gwDevInfo->sub_dev_info, '\0', MAX_NUM_SUB_DEV * sizeof(DeviceInfo)); + ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info, &(gwDevInfo->sub_dev_num)); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } else { + Log_d("sub device num:%d", gwDevInfo->sub_dev_num); + for (i = 0; i < gwDevInfo->sub_dev_num; i++) { + Log_d("%dth subDevPid:%s subDevName:%s", i, gwDevInfo->sub_dev_info[i].product_id, gwDevInfo->sub_dev_info[i].device_name); + } + } + return ret; } -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c index ef9a0d06..5a57f9bd 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c @@ -27,16 +27,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + len = fwrite((void *)log, 1, wLen, fp); Log_d("write %d of %d to log file", len, wLen); - + fclose(fp); return len; @@ -46,16 +46,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) size_t HAL_Log_Read (char *buff, size_t rLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; } len = fread((void *)buff, 1, rLen, fp); Log_d("read %d of %d from log file", len, rLen); - + fclose(fp); return len; @@ -76,12 +76,12 @@ size_t HAL_Log_Get_Size(void) /* check if file exists */ if (access(LOG_SAVE_FILE_PATH, 0)) return 0; - - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + fseek(fp, 0L, SEEK_END); length = ftell(fp); fclose(fp); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c index abe8293f..c5060ca6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c @@ -39,7 +39,7 @@ void *HAL_MutexCreate(void) } if (0 != (err_num = pthread_mutex_init(mutex, NULL))) { - HAL_Printf("%s: create mutex failed\n", __FUNCTION__); + HAL_Printf("%s: create mutex failed\n", __FUNCTION__); HAL_Free(mutex); return NULL; } @@ -51,7 +51,7 @@ void HAL_MutexDestroy(_IN_ void *mutex) { int err_num; if (0 != (err_num = pthread_mutex_destroy((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: destroy mutex failed\n", __FUNCTION__); + HAL_Printf("%s: destroy mutex failed\n", __FUNCTION__); } HAL_Free(mutex); @@ -60,8 +60,8 @@ void HAL_MutexDestroy(_IN_ void *mutex) void HAL_MutexLock(_IN_ void *mutex) { int err_num; - if (0 != (err_num = pthread_mutex_lock((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: lock mutex failed\n", __FUNCTION__); + if (0 != (err_num = pthread_mutex_lock((pthread_mutex_t *)mutex))) { + HAL_Printf("%s: lock mutex failed\n", __FUNCTION__); } } @@ -74,8 +74,8 @@ int HAL_MutexTryLock(_IN_ void *mutex) void HAL_MutexUnlock(_IN_ void *mutex) { int err_num; - if (0 != (err_num = pthread_mutex_unlock((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: unlock mutex failed\n", __FUNCTION__); + if (0 != (err_num = pthread_mutex_unlock((pthread_mutex_t *)mutex))) { + HAL_Printf("%s: unlock mutex failed\n", __FUNCTION__); } } @@ -118,7 +118,7 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v } uint32_t HAL_GetTimeMs(void) -{ +{ struct timeval time_val = {0}; uint32_t time_ms; @@ -133,90 +133,91 @@ void HAL_SleepMs(_IN_ uint32_t ms) usleep(1000 * ms); } -#ifdef AT_TCP_ENABLED - -void HAL_DelayMs(_IN_ uint32_t ms) +#if ((defined(MULTITHREAD_ENABLED)) || (defined AT_TCP_ENABLED)) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - usleep(1000 * ms); -} - -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) -{ - pthread_t *thread_t = (pthread_t *)HAL_Malloc(sizeof(unsigned long int)); - return pthread_create(thread_t, NULL, fn, arg) ? NULL : (void*)thread_t; + pthread_t *thread_t = (pthread_t *)HAL_Malloc(sizeof(unsigned long int)); + return pthread_create(thread_t, NULL, fn, arg) ? NULL : (void*)thread_t; } int HAL_ThreadDestroy(void* threadId) { - int ret; + int ret; - if(0 == pthread_cancel(*((pthread_t*)threadId))){ - ret = QCLOUD_RET_SUCCESS; - }else{ - ret = QCLOUD_ERR_FAILURE; - } + if (0 == pthread_cancel(*((pthread_t*)threadId))) { + ret = QCLOUD_RET_SUCCESS; + } else { + ret = QCLOUD_ERR_FAILURE; + } - HAL_Free(threadId); - return ret; + HAL_Free(threadId); + return ret; +} +#endif + +#ifdef AT_TCP_ENABLED + +void HAL_DelayMs(_IN_ uint32_t ms) +{ + usleep(1000 * ms); } void *HAL_SemaphoreCreate(void) { - sem_t *sem = (sem_t *)malloc(sizeof(sem_t)); - if (NULL == sem) { - return NULL; - } + sem_t *sem = (sem_t *)malloc(sizeof(sem_t)); + if (NULL == sem) { + return NULL; + } - if (0 != sem_init(sem, 0, 0)) { - free(sem); - return NULL; - } + if (0 != sem_init(sem, 0, 0)) { + free(sem); + return NULL; + } - return sem; + return sem; } void HAL_SemaphoreDestroy(void *sem) { - sem_destroy((sem_t *)sem); - free(sem); + sem_destroy((sem_t *)sem); + free(sem); } void HAL_SemaphorePost(void *sem) { - sem_post((sem_t *)sem); + sem_post((sem_t *)sem); } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { #define PLATFORM_WAIT_INFINITE (~0) - if (PLATFORM_WAIT_INFINITE == timeout_ms) { - sem_wait(sem); - return QCLOUD_RET_SUCCESS; - } - else { - struct timespec ts; - int s; - /* Restart if interrupted by handler */ - do { - if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { - return QCLOUD_ERR_FAILURE; - } + if (PLATFORM_WAIT_INFINITE == timeout_ms) { + sem_wait(sem); + return QCLOUD_RET_SUCCESS; + } else { + struct timespec ts; + int s; + /* Restart if interrupted by handler */ + do { + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { + return QCLOUD_ERR_FAILURE; + } - s = 0; - ts.tv_nsec += (timeout_ms % 1000) * 1000000; - if (ts.tv_nsec >= 1000000000) { - ts.tv_nsec -= 1000000000; - s = 1; - } + s = 0; + ts.tv_nsec += (timeout_ms % 1000) * 1000000; + if (ts.tv_nsec >= 1000000000) { + ts.tv_nsec -= 1000000000; + s = 1; + } - ts.tv_sec += timeout_ms / 1000 + s; + ts.tv_sec += timeout_ms / 1000 + s; - } while (((s = sem_timedwait(sem, &ts)) != 0) && errno == EINTR); + } while (((s = sem_timedwait(sem, &ts)) != 0) && errno == EINTR); - return s ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; - } -#undef PLATFORM_WAIT_INFINITE + return s ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; + } +#undef PLATFORM_WAIT_INFINITE } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c index 74528f73..f159e798 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c @@ -58,8 +58,8 @@ static uint64_t _linux_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; + int ret; + struct addrinfo hints, *addr_list, *cur; int fd = 0; char port_str[6]; @@ -68,10 +68,10 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) memset(&hints, 0x00, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + hints.ai_protocol = IPPROTO_TCP; ret = getaddrinfo(host, port_str, &hints, &addr_list); - if (ret) { + if (ret) { if (ret == EAI_SYSTEM) Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); else @@ -80,21 +80,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } + fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); + if ( fd < 0 ) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } - close( fd ); - ret = 0; + close( fd ); + ret = 0; } if (0 == ret) { @@ -118,14 +116,14 @@ int HAL_TCP_Disconnect(uintptr_t fd) /* Shutdown both send and receive operations. */ rc = shutdown((int) fd, 2); - if (0 != rc) { - Log_e("shutdown error: %s", strerror(errno)); + if (0 != rc) { + Log_e("shutdown error: %s", strerror(errno)); return -1; } rc = close((int) fd); if (0 != rc) { - Log_e("closesocket error: %s", strerror(errno)); + Log_e("closesocket error: %s", strerror(errno)); return -1; } @@ -173,13 +171,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -194,8 +191,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -248,14 +245,14 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } + } Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c index b07481e1..9c2343db 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c @@ -16,64 +16,73 @@ #ifdef __cplusplus extern "C" { #endif - + #include #include - + #include "qcloud_iot_import.h" static char now_time_str[20] = {0}; - -bool HAL_Timer_expired(Timer *timer) { + +bool HAL_Timer_expired(Timer *timer) +{ struct timeval now, res; gettimeofday(&now, NULL); timersub(&timer->end_time, &now, &res); return res.tv_sec < 0 || (res.tv_sec == 0 && res.tv_usec <= 0); } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ struct timeval now; gettimeofday(&now, NULL); struct timeval interval = {timeout_ms / 1000, (timeout_ms % 1000) * 1000}; timeradd(&now, &interval, &timer->end_time); } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ struct timeval now; gettimeofday(&now, NULL); struct timeval interval = {timeout, 0}; timeradd(&now, &interval, &timer->end_time); } -int HAL_Timer_remain(Timer *timer) { +int HAL_Timer_remain(Timer *timer) +{ struct timeval now, res; gettimeofday(&now, NULL); timersub(&timer->end_time, &now, &res); return (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000; } -void HAL_Timer_init(Timer *timer) { - timer->end_time = (struct timeval) {0, 0}; +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = (struct timeval) { + 0, 0 + }; } -char* HAL_Timer_current(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - time_t now_time = tv.tv_sec; +char* HAL_Timer_current(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + time_t now_time = tv.tv_sec; - struct tm tm_tmp = *localtime(&now_time); - strftime(now_time_str, 20, "%F %T", &tm_tmp); + struct tm tm_tmp = *localtime(&now_time); + strftime(now_time_str, 20, "%F %T", &tm_tmp); - return now_time_str; + return now_time_str; } -long HAL_Timer_current_sec(void) { - struct timeval tv; - gettimeofday(&tv, NULL); +long HAL_Timer_current_sec(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); - return tv.tv_sec; + return tv.tv_sec; } - + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c index 82a6b5a1..c8f66b38 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c @@ -49,25 +49,25 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd; - break; - } + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd; + break; + } - close(fd); - ret = 0; + close(fd); + ret = 0; } if (0 == ret) { diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c index 9176f4df..afc52b3b 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c @@ -30,7 +30,7 @@ #include "stm32l4xx_hal.h" #define HAL_AT_UART_IRQHandler USART1_IRQHandler -extern UART_HandleTypeDef huart1; +extern UART_HandleTypeDef huart1; static UART_HandleTypeDef *pAtUart = &huart1; extern void AT_Uart_Init(void); @@ -42,16 +42,15 @@ extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); * @brief This function handles AT UART global interrupt,push recv char to ringbuff. */ void HAL_AT_UART_IRQHandler(void) -{ - uint8_t ch; - if(__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) - { - ch = (uint8_t) READ_REG(pAtUart->Instance->RDR)&0xFF; - /*this callback for at_client*/ - at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); - } - __HAL_UART_CLEAR_PEFLAG(pAtUart); +{ + uint8_t ch; + if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { + ch = (uint8_t) READ_REG(pAtUart->Instance->RDR) & 0xFF; + /*this callback for at_client*/ + at_client_uart_rx_isr_cb(&ch, 1); + HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + } + __HAL_UART_CLEAR_PEFLAG(pAtUart); } @@ -63,23 +62,20 @@ void HAL_AT_UART_IRQHandler(void) */ int HAL_AT_Uart_Send(void *data, uint32_t size) { - if(HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) - { - return size; - } - else - { - return 0; - } + if (HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) { + return size; + } else { + return 0; + } } int HAL_AT_Uart_Init(void) { - AT_Uart_Init(); - return QCLOUD_RET_SUCCESS; + AT_Uart_Init(); + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c index 6c2f247b..5236b957 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c @@ -29,7 +29,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -51,111 +51,111 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + #else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo from json not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c index e8c37095..2e28601b 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c @@ -19,7 +19,7 @@ #include "qcloud_iot_import.h" #include "stm32l4xx_hal.h" - + void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; @@ -50,12 +50,12 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void HAL_SleepMs(_IN_ uint32_t ms) { - (void)HAL_Delay(ms); + (void)HAL_Delay(ms); } void HAL_DelayMs(_IN_ uint32_t ms) { - (void)HAL_Delay(ms); + (void)HAL_Delay(ms); } void HAL_Free(void *ptr) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c index 47fe2ed9..1795cae6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c @@ -20,7 +20,7 @@ extern "C" { #include #include #include -#include +#include #include "qcloud_iot_import.h" #include "stm32l4xx_hal.h" @@ -29,64 +29,64 @@ static char now_time_str[20] = {0}; uint32_t HAL_GetTimeMs(void) -{ +{ return HAL_GetTick(); } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - //return GetTimeStampByAt(NULL); - - return HAL_GetTimeMs()/1000; + //return GetTimeStampByAt(NULL); + + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) +char* HAL_Timer_current(void) { - long time_sec; - - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%d",time_sec); - - return now_time_str; + long time_sec; + + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%d", time_sec); + + return now_time_str; } - -bool HAL_Timer_expired(Timer *timer) + +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout_ms; } -int HAL_Timer_remain(Timer *timer) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - return (int)(timer->end_time - HAL_GetTimeMs()); + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout * 1000; } -void HAL_Timer_init(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - timer->end_time = 0; + return (int)(timer->end_time - HAL_GetTimeMs()); } - +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; +} + + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c index 0b42a647..23a0541c 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c @@ -28,7 +28,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -50,111 +50,111 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); #else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo from json not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c index 4333f30f..c72cff67 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c @@ -28,8 +28,8 @@ static uint16_t g_mutex_count = 0; void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; - char log_buf[HAL_OS_LOG_MAXLEN]; - + char log_buf[HAL_OS_LOG_MAXLEN]; + va_start(args, fmt); rt_vsnprintf(log_buf, HAL_OS_LOG_MAXLEN, fmt, args); va_end(args); @@ -58,14 +58,14 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void *HAL_MutexCreate(void) { - rt_mutex_t mutex; - char mutexName[RT_NAME_MAX]; + rt_mutex_t mutex; + char mutexName[RT_NAME_MAX]; - memset(mutexName, 0, RT_NAME_MAX); - HAL_Snprintf(mutexName, RT_NAME_MAX, "tmutex_%d", g_mutex_count++); - mutex = rt_mutex_create(mutexName, RT_IPC_FLAG_FIFO); + memset(mutexName, 0, RT_NAME_MAX); + HAL_Snprintf(mutexName, RT_NAME_MAX, "tmutex_%d", g_mutex_count++); + mutex = rt_mutex_create(mutexName, RT_IPC_FLAG_FIFO); if (NULL == mutex) { - HAL_Printf("create mutex failed"); + HAL_Printf("create mutex failed"); } @@ -76,24 +76,22 @@ void *HAL_MutexCreate(void) void HAL_MutexDestroy(_IN_ void *mutex) { - int err_num; + int err_num; - err_num = rt_mutex_delete((rt_mutex_t)mutex); + err_num = rt_mutex_delete((rt_mutex_t)mutex); - if (0 != err_num) - { + if (0 != err_num) { HAL_Printf("destroy mutex failed"); } } void HAL_MutexLock(_IN_ void *mutex) { - int err_num; - - err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_FOREVER); + int err_num; - if (0 != err_num) - { + err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_FOREVER); + + if (0 != err_num) { HAL_Printf("lock mutex failed"); } } @@ -102,10 +100,9 @@ void HAL_MutexUnlock(_IN_ void *mutex) { int err_num; - err_num = rt_mutex_release((rt_mutex_t)mutex); - - if (0 != err_num) - { + err_num = rt_mutex_release((rt_mutex_t)mutex); + + if (0 != err_num) { HAL_Printf("unlock mutex failed"); } @@ -113,12 +110,11 @@ void HAL_MutexUnlock(_IN_ void *mutex) int HAL_MutexTryLock(_IN_ void *mutex) { - int err_num; - - err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_NO); + int err_num; - if (0 != err_num) - { + err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_NO); + + if (0 != err_num) { HAL_Printf("trylock mutex failed"); } return err_num; @@ -127,7 +123,7 @@ int HAL_MutexTryLock(_IN_ void *mutex) void *HAL_Malloc(_IN_ uint32_t size) { - return rt_malloc(size); + return rt_malloc(size); } void HAL_Free(_IN_ void *ptr) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c index 2b5d2f10..250af64a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c @@ -53,8 +53,8 @@ static uint64_t rtthread_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; + int ret; + struct addrinfo hints, *addr_list, *cur; int fd = 0; char port_str[6]; @@ -78,21 +78,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) ret = -1; continue; } - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } + fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); + if ( fd < 0 ) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } - close( fd ); - ret = 0; + close( fd ); + ret = 0; } if (0 == ret) { @@ -104,7 +102,7 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) freeaddrinfo(addr_list); return (uintptr_t)ret; -} +} int HAL_TCP_Disconnect(uintptr_t fd) @@ -133,59 +131,58 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t ret = 1; /* send one time if timeout_ms is value 0 */ do { - t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); - if (0 != t_left) { - struct timeval timeout; + t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); + if (0 != t_left) { + struct timeval timeout; - FD_ZERO(&sets); - FD_SET(fd, &sets); + FD_ZERO(&sets); + FD_SET(fd, &sets); - timeout.tv_sec = t_left / 1000; - timeout.tv_usec = (t_left % 1000) * 1000; + timeout.tv_sec = t_left / 1000; + timeout.tv_usec = (t_left % 1000) * 1000; - ret = select(fd + 1, NULL, &sets, NULL, &timeout); - if (ret > 0) { - if (0 == FD_ISSET(fd, &sets)) { - Log_e("Should NOT arrive"); - /* If timeout in next loop, it will not sent any data */ - ret = 0; - continue; - } - } else if (0 == ret) { - Log_e("select-write timeout %d", (int)fd); - break; - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } + ret = select(fd + 1, NULL, &sets, NULL, &timeout); + if (ret > 0) { + if (0 == FD_ISSET(fd, &sets)) { + Log_e("Should NOT arrive"); + /* If timeout in next loop, it will not sent any data */ + ret = 0; + continue; + } + } else if (0 == ret) { + Log_e("select-write timeout %d", (int)fd); + break; + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } perror("select-write fail"); break; } - } - else { - ret = QCLOUD_ERR_SSL_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_SSL_WRITE_TIMEOUT; } - if (ret > 0) { - ret = send(fd, buf + len_sent, len - len_sent, 0); - if (ret > 0) { - len_sent += ret; - } else if (0 == ret) { - Log_e("No data be sent"); - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } + if (ret > 0) { + ret = send(fd, buf + len_sent, len - len_sent, 0); + if (ret > 0) { + len_sent += ret; + } else if (0 == ret) { + Log_e("No data be sent"); + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - perror("send fail"); - break; - } - } - } while ((len_sent < len) && (rtthread_time_left(t_end, rtthread_get_time_ms()) > 0)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + perror("send fail"); + break; + } + } + } while ((len_sent < len) && (rtthread_time_left(t_end, rtthread_get_time_ms()) > 0)); *written_len = (size_t)len_sent; @@ -202,8 +199,8 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou struct timeval timeout; - //Log_d("readTimeout %dms,readlen %d", timeout_ms, *read_len); - HAL_SleepMs(1); //wihout delay,read seems to be blocked + //Log_d("readTimeout %dms,readlen %d", timeout_ms, *read_len); + HAL_SleepMs(1); //wihout delay,read seems to be blocked t_end = rtthread_get_time_ms() + timeout_ms; len_recv = 0; @@ -211,44 +208,44 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou do { - t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); - if (0 == t_left) { - err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; - break; - } - FD_ZERO(&sets); - FD_SET(fd, &sets); + t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); + if (0 == t_left) { + err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; + break; + } + FD_ZERO(&sets); + FD_SET(fd, &sets); - timeout.tv_sec = t_left / 1000; - timeout.tv_usec = (t_left % 1000) * 1000; + timeout.tv_sec = t_left / 1000; + timeout.tv_usec = (t_left % 1000) * 1000; - ret = select(fd + 1, &sets, NULL, NULL, &timeout); - if (ret > 0) { - ret = recv(fd, buf + len_recv, len - len_recv, 0); - if (ret > 0) { - len_recv += ret; - } else if (0 == ret) { - perror("connection is closed"); - err_code = -1; - break; - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } - perror("recv fail"); - err_code = -2; - break; - } - } else if (0 == ret) { - err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; - break; - } else { - perror("select-recv fail"); - err_code = -2; - break; - } - }while ((len_recv < len)); + ret = select(fd + 1, &sets, NULL, NULL, &timeout); + if (ret > 0) { + ret = recv(fd, buf + len_recv, len - len_recv, 0); + if (ret > 0) { + len_recv += ret; + } else if (0 == ret) { + perror("connection is closed"); + err_code = -1; + break; + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } + perror("recv fail"); + err_code = -2; + break; + } + } else if (0 == ret) { + err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; + break; + } else { + perror("select-recv fail"); + err_code = -2; + break; + } + } while ((len_recv < len)); *read_len = (size_t)len_recv; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c index 60dc46ef..8d8f59b1 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c @@ -19,7 +19,7 @@ extern "C" { #include "qcloud_iot_import.h" -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS #include #include @@ -40,7 +40,7 @@ extern "C" { #ifndef AUTH_MODE_CERT static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; #endif - + /** * @brief data structure for mbedtls SSL connection */ @@ -56,7 +56,7 @@ typedef struct { #endif mbedtls_pk_context private_key; } TLSDataParams; - + /** * @brief free memory/resources allocated by mbedtls */ @@ -67,12 +67,12 @@ static void _free_mebedtls(TLSDataParams *pParams) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif +#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free(pParams); } @@ -87,65 +87,65 @@ static void _free_mebedtls(TLSDataParams *pParams) * @param pConnectParams device info for TLS connection * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) { +static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) +{ int ret = QCLOUD_RET_SUCCESS; mbedtls_net_init(&(pDataParams->socket_fd)); mbedtls_ssl_init(&(pDataParams->ssl)); mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); mbedtls_ctr_drbg_init(&(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_init(&(pDataParams->ca_cert)); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif +#endif mbedtls_entropy_init(&(pDataParams->entropy)); // custom parameter is NULL for now if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, 0)) != 0) { - Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_INIT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { +#if defined(MBEDTLS_X509_CRT_PARSE_C) + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { - Log_e("parse ca crt failed returned 0x%04x", ret<0?-ret:ret); + (pConnectParams->ca_crt_len + 1)))) { + Log_e("parse ca crt failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } -#endif +#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { - Log_e("load client cert file failed returned 0x%x", ret<0?-ret:ret); + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + Log_e("load client cert file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { - Log_e("load client key file failed returned 0x%x", ret<0?-ret:ret); + Log_e("load client key file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } else { Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + (const unsigned char *) psk_id, strlen( psk_id )); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret<0?-ret:ret); - return ret; - } + + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret < 0 ? -ret : ret); + return ret; + } #endif return QCLOUD_RET_SUCCESS; @@ -159,13 +159,14 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { +int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_TCP)) != 0) { - Log_e("tcp connect failed returned 0x%04x errno: %d", ret<0?-ret:ret, errno); + Log_e("tcp connect failed returned 0x%04x errno: %d", ret < 0 ? -ret : ret, errno); switch (ret) { case MBEDTLS_ERR_NET_SOCKET_FAILED: @@ -179,7 +180,7 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p } #if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { - Log_e("set block faliled returned 0x%04x", ret<0?-ret:ret); + Log_e("set block faliled returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_TCP_CONNECT; } #endif @@ -196,7 +197,8 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p #if defined(MBEDTLS_X509_CRT_PARSE_C) -int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { +int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +{ return *flags; } #endif @@ -207,17 +209,17 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in int ret = 0; TLSDataParams * pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); - + if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { goto error; } - + Log_d("Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&(pDataParams->ssl_conf), MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -234,20 +236,20 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { - Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #endif mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), pConnectParams->timeout_ms); if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #ifndef AUTH_MODE_CERT // ciphersuites selection for PSK device - if(pConnectParams->psk != NULL) { + if (pConnectParams->psk != NULL) { mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); } #endif @@ -257,10 +259,10 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in // Set the hostname to check against the received server certificate and sni if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } - + #endif mbedtls_ssl_set_bio(&(pDataParams->ssl), &(pDataParams->socket_fd), mbedtls_net_send, mbedtls_net_recv, @@ -271,29 +273,29 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in if ((ret = _mbedtls_tcp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { goto error; } - + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { Log_e("mbedtls_ssl_handshake failed returned 0x%04x", -ret); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) + +#if defined(MBEDTLS_X509_CRT_PARSE_C) if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { Log_e("Unable to verify the server's certificate"); } -#endif +#endif goto error; } } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { - Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), 100); Log_i("connected with /%s/%d...", host, port); - + return (uintptr_t)pDataParams; error: @@ -301,7 +303,8 @@ error: return 0; } -void HAL_TLS_Disconnect(uintptr_t handle) { +void HAL_TLS_Disconnect(uintptr_t handle) +{ if ((uintptr_t)NULL == handle) { Log_d("handle is NULL"); return; @@ -322,12 +325,12 @@ void HAL_TLS_Disconnect(uintptr_t handle) { mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free((void *)handle); } int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, - size_t *written_len) + size_t *written_len) { Timer timer; @@ -336,15 +339,14 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ size_t written_so_far; bool errorFlag = false; int write_rc = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; for (written_so_far = 0; written_so_far < totalLen && !expired(&timer); written_so_far += write_rc) { - while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) - { + while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) { if (write_rc != MBEDTLS_ERR_SSL_WANT_READ && write_rc != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("HAL_TLS_write failed 0x%04x", write_rc<0?-write_rc:write_rc); + Log_e("HAL_TLS_write failed 0x%04x", write_rc < 0 ? -write_rc : write_rc); errorFlag = true; break; } @@ -366,7 +368,7 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ return QCLOUD_RET_SUCCESS; } -int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) +int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) { //mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even timeout @@ -375,7 +377,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t InitTimer(&timer); countdown_ms(&timer, (unsigned int) timeout_ms); *read_len = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; do { @@ -386,7 +388,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t *read_len += read_rc; } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE && read_rc != MBEDTLS_ERR_SSL_WANT_READ && read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { - Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc<0?-read_rc:read_rc); + Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc < 0 ? -read_rc : read_rc); return QCLOUD_ERR_SSL_READ; } @@ -411,4 +413,4 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t } #endif -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c index 8ba8b8dd..3f8ce046 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c @@ -16,9 +16,9 @@ #ifdef __cplusplus extern "C" { #endif - -#include + +#include #include #include "qcloud_iot_import.h" @@ -27,68 +27,68 @@ static char now_time_str[20] = {0}; uint32_t HAL_GetTimeMs(void) { #if (RT_TICK_PER_SECOND == 1000) - /* #define RT_TICK_PER_SECOND 1000 */ - return (unsigned long)rt_tick_get(); + /* #define RT_TICK_PER_SECOND 1000 */ + return (unsigned long)rt_tick_get(); #else - unsigned long tick = 0; - - tick = rt_tick_get(); - tick = tick * 1000; - return (unsigned long)((tick + RT_TICK_PER_SECOND - 1)/RT_TICK_PER_SECOND); + unsigned long tick = 0; + + tick = rt_tick_get(); + tick = tick * 1000; + return (unsigned long)((tick + RT_TICK_PER_SECOND - 1) / RT_TICK_PER_SECOND); #endif } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - return HAL_GetTimeMs()/1000; + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) +char* HAL_Timer_current(void) { - long time_sec; - - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%ld",time_sec); - - return now_time_str; + long time_sec; + + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%ld", time_sec); + + return now_time_str; } - -bool HAL_Timer_expired(Timer *timer) + +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout_ms; } -int HAL_Timer_remain(Timer *timer) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - return (int)(timer->end_time - HAL_GetTimeMs()); + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout * 1000; } -void HAL_Timer_init(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - timer->end_time = 0; + return (int)(timer->end_time - HAL_GetTimeMs()); +} + +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; } #ifdef __cplusplus diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c index fc45aed6..c0abf250 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c @@ -35,7 +35,7 @@ * @brief This function handles AT UART global interrupt,push recv char to ringbuff. */ void HAL_AT_UART_IRQHandler(void) -{ +{ } @@ -48,17 +48,17 @@ void HAL_AT_UART_IRQHandler(void) */ int HAL_AT_Uart_Send(void *data, uint32_t size) { - return 0; + return 0; } int HAL_AT_Uart_Init(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Device_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Device_win.c index 235c619e..305ded20 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Device_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Device_win.c @@ -29,7 +29,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -51,7 +51,7 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif @@ -59,48 +59,48 @@ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAM static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -int HAL_SetDevInfoFile(const char *file_name) -{ - Log_w("device info is not stored in file!!"); - + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); return QCLOUD_RET_SUCCESS; } -#else +int HAL_SetDevInfoFile(const char *file_name) +{ + Log_w("device info is not stored in file!!"); + + return QCLOUD_RET_SUCCESS; +} + +#else /*device info manage example method*/ #include "lite-utils.h" -#define MAX_DEV_INFO_FILE_LEN 1024 -#define MAX_CONFIG_FILE_NAME 256 +#define MAX_DEV_INFO_FILE_LEN 1024 +#define MAX_CONFIG_FILE_NAME 256 - -#define KEY_AUTH_MODE "auth_mode" -#define KEY_PRODUCT_ID "productId" -#define KEY_PRODUCT_SECRET "productSecret" -#define KEY_DEV_NAME "deviceName" -#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" -#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" -#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" -#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" -#define KEY_SUBDEV_NAME "subDev.sub_devName" -#define STR_DEV_INFO "key_deviceinfo" -#define STR_DEV_SECRET "deviceSecret" -#define STR_DEV_CERT "cert_deviceinfo" -#define STR_DEV_CERT_FILE "devCertFile" -#define STR_DEV_KEY_FILE "devPrivateKeyFile" +#define KEY_AUTH_MODE "auth_mode" +#define KEY_PRODUCT_ID "productId" +#define KEY_PRODUCT_SECRET "productSecret" +#define KEY_DEV_NAME "deviceName" +#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" +#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" +#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" +#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" +#define KEY_SUBDEV_NAME "subDev.sub_devName" + +#define STR_DEV_INFO "key_deviceinfo" +#define STR_DEV_SECRET "deviceSecret" +#define STR_DEV_CERT "cert_deviceinfo" +#define STR_DEV_CERT_FILE "devCertFile" +#define STR_DEV_KEY_FILE "devPrivateKeyFile" #define MAX_SIZE_OF_DEVICE_INFO_FILE 128 -static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE+1] = {".\\device_info.json"}; +static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE + 1] = {".\\device_info.json"}; int HAL_SetDevInfoFile(const char *file_name) { @@ -114,7 +114,7 @@ int HAL_SetDevInfoFile(const char *file_name) Log_e("device info file \"%s\" not existed", file_name); return QCLOUD_ERR_FAILURE; } - + memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); return QCLOUD_RET_SUCCESS; @@ -122,433 +122,433 @@ int HAL_SetDevInfoFile(const char *file_name) static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; + FILE *fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + char *JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - /*Get device info*/ - char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); - if(NULL == authMode) { - HAL_Free(JsonDoc); - Log_e("read authcode from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); - char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + /*Get device info*/ + char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); + if (NULL == authMode) { + HAL_Free(JsonDoc); + Log_e("read authcode from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); + if (NULL == productId) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + Log_e("read product id from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } -#ifdef DEV_DYN_REG_ENABLED - char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); - if(NULL == productSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - Log_e("read product secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); -#endif - -#ifdef AUTH_MODE_CERT - char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); - if(NULL == devCrtFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); -#endif - Log_e("read device crt file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); - if(NULL == devKeyFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - HAL_Free(productSecret); - HAL_Free(devCrtFileName); - Log_e("read device private key file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); + char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); + if (NULL == devName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + Log_e("read device name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + +#ifdef DEV_DYN_REG_ENABLED + char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); + if (NULL == productSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + Log_e("read product secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); +#endif + +#ifdef AUTH_MODE_CERT + char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); + if (NULL == devCrtFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif + Log_e("read device crt file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); + if (NULL == devKeyFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + HAL_Free(productSecret); + HAL_Free(devCrtFileName); + Log_e("read device private key file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); #else - char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); - if(NULL == devSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); + char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); + if (NULL == devSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); #endif - Log_e("read device secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); - //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); + Log_e("read device secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); + //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); #endif - if(authMode){ - HAL_Free(authMode); - } - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -#ifdef DEV_DYN_REG_ENABLED - if(productSecret){ - HAL_Free(productSecret); - } + if (authMode) { + HAL_Free(authMode); + } + + if (productId) { + HAL_Free(productId); + } + + if (devName) { + HAL_Free(devName); + } + +#ifdef DEV_DYN_REG_ENABLED + if (productSecret) { + HAL_Free(productSecret); + } #endif -#ifdef AUTH_MODE_CERT - if(devCrtFileName){ - HAL_Free(devCrtFileName); - } +#ifdef AUTH_MODE_CERT + if (devCrtFileName) { + HAL_Free(devCrtFileName); + } - if(devKeyFileName){ - HAL_Free(devKeyFileName); - } + if (devKeyFileName) { + HAL_Free(devKeyFileName); + } #else - if(devSecret){ - HAL_Free(devSecret); - } + if (devSecret) { + HAL_Free(devSecret); + } #endif - if(NULL != JsonDoc){ - HAL_Free(JsonDoc); - } + if (NULL != JsonDoc) { + HAL_Free(JsonDoc); + } -exit: - if(NULL != fp){ - fclose(fp); - } - return ret; +exit: + if (NULL != fp) { + fclose(fp); + } + return ret; } #ifdef GATEWAY_ENABLED static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; + FILE *fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } + char *JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } - /*Get sub device info*/ - char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); - char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - //Log_d("pid:%s, devName:%s", productId, devName); - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } + /*Get sub device info*/ + char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); + if (NULL == productId) { + HAL_Free(JsonDoc); + Log_e("read product id from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); + if (NULL == devName) { + HAL_Free(JsonDoc); + HAL_Free(productId); + Log_e("read device name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + //Log_d("pid:%s, devName:%s", productId, devName); + + if (productId) { + HAL_Free(productId); + } + + if (devName) { + HAL_Free(devName); + } + + if (JsonDoc) { + HAL_Free(JsonDoc); + } - if(JsonDoc){ - HAL_Free(JsonDoc); - } - exit: - - if(NULL != fp){ - fclose(fp); - } - return ret; + if (NULL != fp) { + fclose(fp); + } + + return ret; } #endif static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) { - char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; - int32_t remain_size = MAX_DEV_INFO_FILE_LEN; + char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; + int32_t remain_size = MAX_DEV_INFO_FILE_LEN; int32_t rc_of_snprintf = 0; - int32_t wlen; - FILE *fp; + int32_t wlen; + FILE *fp; - rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); + remain_size -= rc_of_snprintf; - //auth_mode -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "CERT" - ); - remain_size -= rc_of_snprintf; + //auth_mode +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "CERT" + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "KEY" - ); - remain_size -= rc_of_snprintf; -#endif - - //product id, device name - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ - KEY_PRODUCT_ID, pDevInfo->product_id, \ - KEY_DEV_NAME, pDevInfo->device_name); - remain_size -= rc_of_snprintf; - - //product secret -#ifdef DEV_DYN_REG_ENABLED - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n", - KEY_PRODUCT_SECRET, pDevInfo->product_secret); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "KEY" + ); + remain_size -= rc_of_snprintf; #endif - - // key device info or cert device info -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ - STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name,\ - STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ - ); - remain_size -= rc_of_snprintf; + + //product id, device name + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ + KEY_PRODUCT_ID, pDevInfo->product_id, \ + KEY_DEV_NAME, pDevInfo->device_name); + remain_size -= rc_of_snprintf; + + //product secret +#ifdef DEV_DYN_REG_ENABLED + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n", + KEY_PRODUCT_SECRET, pDevInfo->product_secret); + remain_size -= rc_of_snprintf; +#endif + + // key device info or cert device info +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ + STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name, \ + STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\"\n}",\ - STR_DEV_SECRET, pDevInfo->device_secret); - remain_size -= rc_of_snprintf; -#endif + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\"\n}", \ + STR_DEV_SECRET, pDevInfo->device_secret); + remain_size -= rc_of_snprintf; +#endif - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); + remain_size -= rc_of_snprintf; - Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); + Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); - fp = fopen(sg_device_info_file, "w"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "w"); + if (NULL == fp) { Log_e("open file %s failed", sg_device_info_file); return QCLOUD_ERR_FAILURE; } - wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); - if(wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { - Log_e("write len less than needed"); - } - fclose(fp); - return QCLOUD_RET_SUCCESS; + wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); + if (wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { + Log_e("write len less than needed"); + } + fclose(fp); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - ret = iot_save_devinfo_to_json_file(devInfo); + ret = iot_save_devinfo_to_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - ret = iot_parse_devinfo_from_json_file(devInfo); + ret = iot_parse_devinfo_from_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0]->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0]->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0]->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0]->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); #else - ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); - if(ret != QCLOUD_RET_SUCCESS) { - return QCLOUD_ERR_FAILURE; - } - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); + ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); + if (ret != QCLOUD_RET_SUCCESS) { + return QCLOUD_ERR_FAILURE; + } + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Log_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Log_win.c index ef9a0d06..5a57f9bd 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Log_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Log_win.c @@ -27,16 +27,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + len = fwrite((void *)log, 1, wLen, fp); Log_d("write %d of %d to log file", len, wLen); - + fclose(fp); return len; @@ -46,16 +46,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) size_t HAL_Log_Read (char *buff, size_t rLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; } len = fread((void *)buff, 1, rLen, fp); Log_d("read %d of %d from log file", len, rLen); - + fclose(fp); return len; @@ -76,12 +76,12 @@ size_t HAL_Log_Get_Size(void) /* check if file exists */ if (access(LOG_SAVE_FILE_PATH, 0)) return 0; - - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + fseek(fp, 0L, SEEK_END); length = ftell(fp); fclose(fp); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_OS_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_OS_win.c index f2456b5c..e13bada0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_OS_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_OS_win.c @@ -24,117 +24,117 @@ void *HAL_MutexCreate(void) { - HANDLE mutex = CreateMutex( - NULL, - FALSE, - NULL - ); + HANDLE mutex = CreateMutex( + NULL, + FALSE, + NULL + ); - if (mutex == NULL) { - HAL_Printf("%s: create mutex failed\n", __FUNCTION__); - } + if (mutex == NULL) { + HAL_Printf("%s: create mutex failed\n", __FUNCTION__); + } - return (void *)mutex; + return (void *)mutex; } void HAL_MutexDestroy(_IN_ void *mutex) { - CloseHandle((HANDLE)mutex); + CloseHandle((HANDLE)mutex); } void HAL_MutexLock(_IN_ void *mutex) { - WaitForSingleObject((HANDLE)mutex, INFINITE); + WaitForSingleObject((HANDLE)mutex, INFINITE); } int HAL_MutexTryLock(_IN_ void *mutex) { - return WaitForSingleObject((HANDLE)mutex, 0) == WAIT_OBJECT_0 ? 0 : -1; + return WaitForSingleObject((HANDLE)mutex, 0) == WAIT_OBJECT_0 ? 0 : -1; } void HAL_MutexUnlock(_IN_ void *mutex) { - ReleaseMutex((HANDLE)mutex); + ReleaseMutex((HANDLE)mutex); } void *HAL_Malloc(_IN_ uint32_t size) { - return malloc(size); + return malloc(size); } void HAL_Free(_IN_ void *ptr) { - free(ptr); + free(ptr); } void HAL_Printf(_IN_ const char *fmt, ...) { - va_list args; + va_list args; - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); - fflush(stdout); + fflush(stdout); } int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) { - va_list args; - int rc; + va_list args; + int rc; - va_start(args, fmt); - rc = vsnprintf(str, len, fmt, args); - va_end(args); + va_start(args, fmt); + rc = vsnprintf(str, len, fmt, args); + va_end(args); - return rc; + return rc; } int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap) { - return vsnprintf(str, len, format, ap); + return vsnprintf(str, len, format, ap); } uint32_t HAL_GetTimeMs(void) -{ +{ return (uint32_t)GetTickCount64(); } void HAL_SleepMs(_IN_ uint32_t ms) { - Sleep(ms); + Sleep(ms); } #ifdef AT_TCP_ENABLED -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - return NULL; + return NULL; } int HAL_ThreadDestroy(void *thread_t) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } void *HAL_SemaphoreCreate(void) { - return NULL; + return NULL; } void HAL_SemaphoreDestroy(void *sem) { - return; + return; } void HAL_SemaphorePost(void *sem) { - return; + return; } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c index 2f9fa9ec..1dd58cf1 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c @@ -47,71 +47,67 @@ static uint64_t _win_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char* host, uint16_t port) { - WORD sockVersion = MAKEWORD(2, 2); - WSADATA data; + WORD sockVersion = MAKEWORD(2, 2); + WSADATA data; - if (WSAStartup(sockVersion, &data) != 0) - { - return 0; - } - int ret; - struct addrinfo hints, * addr_list, * cur; - SOCKET fd; + if (WSAStartup(sockVersion, &data) != 0) { + return 0; + } + int ret; + struct addrinfo hints, * addr_list, * cur; + SOCKET fd; - char port_str[6]; - HAL_Snprintf(port_str, 6, "%d", port); + char port_str[6]; + HAL_Snprintf(port_str, 6, "%d", port); - memset(&hints, 0x00, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + memset(&hints, 0x00, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; - ret = getaddrinfo(host, port_str, &hints, &addr_list); - if (ret) { - Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); + ret = getaddrinfo(host, port_str, &hints, &addr_list); + if (ret) { + Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); - return 0; - } + return 0; + } - for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd == INVALID_SOCKET) - { - ret = 0; - continue; - } + for (cur = addr_list; cur != NULL; cur = cur->ai_next) { + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd == INVALID_SOCKET) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } - closesocket(fd); - ret = 0; - } + closesocket(fd); + ret = 0; + } - if (0 == ret) { - Log_e("fail to connect with TCP server: %s:%s", host, port_str); - } - else { - /* reduce log print due to frequent log server connect/disconnect */ - if (0 == strncmp(host, LOG_UPLOAD_SERVER_DOMAIN, HOST_STR_LENGTH)) - UPLOAD_DBG("connected with TCP server: %s:%s", host, port_str); - else - Log_i("connected with TCP server: %s:%s", host, port_str); - } + if (0 == ret) { + Log_e("fail to connect with TCP server: %s:%s", host, port_str); + } else { + /* reduce log print due to frequent log server connect/disconnect */ + if (0 == strncmp(host, LOG_UPLOAD_SERVER_DOMAIN, HOST_STR_LENGTH)) + UPLOAD_DBG("connected with TCP server: %s:%s", host, port_str); + else + Log_i("connected with TCP server: %s:%s", host, port_str); + } - freeaddrinfo(addr_list); + freeaddrinfo(addr_list); - return (uintptr_t)ret; + return (uintptr_t)ret; } int HAL_TCP_Disconnect(uintptr_t fd) { - closesocket(fd); - WSACleanup(); + closesocket(fd); + WSACleanup(); return 0; } @@ -158,13 +154,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -179,8 +174,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -207,7 +202,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou do { t_left = _win_time_left(t_end, _win_get_time_ms()); if (0 == t_left) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } @@ -231,18 +226,18 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou /* reduce log print due to frequent log server connect/disconnect */ if (peer_port == LOG_UPLOAD_SERVER_PORT) - UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); + UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } - Log_e("recv error: %s", strerror(errno)); + } + Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } @@ -250,7 +245,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } else { - Log_e("select-recv error: %s", strerror(errno)); + Log_e("select-recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c index 046817d8..524bd7a6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c @@ -16,60 +16,67 @@ #ifdef __cplusplus extern "C" { #endif - -#include + +#include #include #include "qcloud_iot_import.h" static char now_time_str[20] = {0}; - -bool HAL_Timer_expired(Timer *timer) { - if (GetTickCount64() >= timer->end_time) { - return true; - } - return false; +bool HAL_Timer_expired(Timer *timer) +{ + if (GetTickCount64() >= timer->end_time) { + return true; + } + + return false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { - timer->end_time = GetTickCount64() + timeout_ms; +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ + timer->end_time = GetTickCount64() + timeout_ms; } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - timer->end_time = GetTickCount64() + (UINT64)timeout * 1000; +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ + timer->end_time = GetTickCount64() + (UINT64)timeout * 1000; } -int HAL_Timer_remain(Timer* timer) { - UINT64 now = GetTickCount64(); +int HAL_Timer_remain(Timer* timer) +{ + UINT64 now = GetTickCount64(); - if (now >= timer->end_time) { - return 0; - } + if (now >= timer->end_time) { + return 0; + } - return (int)(timer->end_time - now); + return (int)(timer->end_time - now); } -void HAL_Timer_init(Timer *timer) { - timer->end_time = 0; +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; } -char* HAL_Timer_current(void) { - static char time_str[64] = { '\0' }; - time_t now; - struct tm tm_val; +char* HAL_Timer_current(void) +{ + static char time_str[64] = { '\0' }; + time_t now; + struct tm tm_val; - time(&now); - localtime_s(&tm_val, &now); + time(&now); + localtime_s(&tm_val, &now); - snprintf(time_str, sizeof(time_str), "%04d/%02d/%02d %02d:%02d:%02d", tm_val.tm_year + 1900, tm_val.tm_mon + 1, tm_val.tm_mday, tm_val.tm_hour, tm_val.tm_min, tm_val.tm_sec); + snprintf(time_str, sizeof(time_str), "%04d/%02d/%02d %02d:%02d:%02d", tm_val.tm_year + 1900, tm_val.tm_mon + 1, tm_val.tm_mday, tm_val.tm_hour, tm_val.tm_min, tm_val.tm_sec); - return time_str; + return time_str; } -long HAL_Timer_current_sec(void) { - return (long)(GetTickCount64() / 1000); +long HAL_Timer_current_sec(void) +{ + return (long)(GetTickCount64() / 1000); } - + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c index 9bc308d4..89e41e22 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c @@ -48,25 +48,25 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd; - break; - } + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd; + break; + } - closesocket(fd); - ret = 0; + closesocket(fd); + ret = 0; } if (0 == ret) { @@ -87,7 +87,7 @@ void HAL_UDP_Disconnect(uintptr_t fd) long socket_id = -1; socket_id = (int)fd; - closesocket(socket_id); + closesocket(socket_id); } int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datalen) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c index cb7aebc2..86b6f3da 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c @@ -50,23 +50,18 @@ static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTL /** * @brief data structure for mbedtls SSL connection */ -typedef struct -{ +typedef struct { mbedtls_net_context socket_fd; mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ssl_context ssl; mbedtls_ssl_config ssl_conf; -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt ca_cert; mbedtls_x509_crt client_cert; -#endif mbedtls_pk_context private_key; mbedtls_timing_delay_context timer; -#if 0 mbedtls_ssl_cookie_ctx cookie_ctx; -#endif } DTLSDataParams; /** @@ -75,32 +70,28 @@ typedef struct static void _free_mebeddtls(DTLSDataParams *pParams) { mbedtls_net_free(&(pParams->socket_fd)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); -#if 0 mbedtls_ssl_cookie_free(&(pParams->cookie_ctx)); -#endif HAL_Free(pParams); } static void _dtls_debug( void *ctx, int level, - const char *file, int line, - const char *str ) + const char *file, int line, + const char *str ) { Log_i("[mbedTLS]:[%s]:[%d]: %s\r\n", file, line, str); } static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams *pConnectParams) { - int ret = QCLOUD_RET_SUCCESS; + int ret = QCLOUD_RET_SUCCESS; #if defined(MBEDTLS_DEBUG_C) mbedtls_debug_set_threshold( DEBUG_LEVEL ); @@ -109,49 +100,40 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * mbedtls_net_init( &(pDataParams->socket_fd) ); mbedtls_ssl_init( &(pDataParams->ssl) ); mbedtls_ssl_config_init( &(pDataParams->ssl_conf) ); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_init( &(pDataParams->ca_cert) ); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif mbedtls_ctr_drbg_init( &(pDataParams->ctr_drbg) ); mbedtls_entropy_init( &(pDataParams->entropy) ); - if((ret = mbedtls_ctr_drbg_seed(&pDataParams->ctr_drbg, mbedtls_entropy_func, - &pDataParams->entropy, NULL,0)) != 0) - { + if ((ret = mbedtls_ctr_drbg_seed(&pDataParams->ctr_drbg, mbedtls_entropy_func, + &pDataParams->entropy, NULL, 0)) != 0) { Log_e("mbedtls_ctr_drbg_seed failed returned -0x%x", -ret); return QCLOUD_ERR_SSL_INIT; } - mbedtls_ssl_conf_authmode(&pDataParams->ssl_conf, MBEDTLS_SSL_VERIFY_NONE ); + mbedtls_ssl_conf_authmode(&pDataParams->ssl_conf, MBEDTLS_SSL_VERIFY_NONE ); -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { + (pConnectParams->ca_crt_len + 1)))) { Log_e("parse ca crt failed returned -0x%04x", -ret); return QCLOUD_ERR_SSL_CERT; } } -#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { Log_e("load client cert file failed returned -0x%x", ret); return QCLOUD_ERR_SSL_CERT; } -#endif if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { Log_e("load client key file failed returned -0x%x", ret); return QCLOUD_ERR_SSL_CERT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) if (0 == ret) { mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { @@ -159,24 +141,23 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * return QCLOUD_ERR_SSL_CERT; } } -#endif } else { Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + (const unsigned char *) psk_id, strlen( psk_id )); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: -0x%x", -ret); - return ret; - } + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: -0x%x", -ret); + return ret; + } #endif return ret; @@ -190,7 +171,8 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { +int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); @@ -206,34 +188,32 @@ int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int p } } -#if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { Log_e("set block faliled returned -0x%04x", -ret); return QCLOUD_ERR_TCP_CONNECT; } -#endif return QCLOUD_RET_SUCCESS; } uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, int port) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; int ret = QCLOUD_RET_SUCCESS; DTLSDataParams * pDataParams = (DTLSDataParams *)HAL_Malloc(sizeof(DTLSDataParams)); if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { - goto error; - } + goto error; + } if ((ret = _mbedtls_udp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { - goto error; - } + goto error; + } if ((ret = mbedtls_ssl_config_defaults(&pDataParams->ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_DATAGRAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { + MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { Log_e("mbedtls_ssl_config_defaults result 0x%04x", ret); goto error; } @@ -243,62 +223,55 @@ uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, mbedtls_ssl_conf_rng(&pDataParams->ssl_conf, mbedtls_ctr_drbg_random, &pDataParams->ctr_drbg); mbedtls_ssl_conf_dbg(&pDataParams->ssl_conf, _dtls_debug, NULL); -#if 0 if ((ret = mbedtls_ssl_cookie_setup(&pDataParams->cookie_ctx, mbedtls_ctr_drbg_random, &pDataParams->ctr_drbg)) != 0) { Log_e("mbedtls_ssl_cookie_setup result 0x%04x", ret); goto error; } mbedtls_ssl_conf_dtls_cookies(&pDataParams->ssl_conf, mbedtls_ssl_cookie_write, mbedtls_ssl_cookie_check, &pDataParams->cookie_ctx); -#endif #ifndef AUTH_MODE_CERT - mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); + mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); #endif #ifdef MBEDTLS_SSL_PROTO_DTLS - if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) - { + if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) { mbedtls_ssl_conf_min_version(&pDataParams->ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); mbedtls_ssl_conf_max_version(&pDataParams->ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); mbedtls_ssl_conf_handshake_timeout(&pDataParams->ssl_conf, (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2), - (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2 * 4)); + (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2 * 4)); } #endif if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned -0x%x", -ret); - goto error; - } + Log_e("mbedtls_ssl_setup failed returned -0x%x", -ret); + goto error; + } if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) { - mbedtls_ssl_set_timer_cb(&(pDataParams->ssl), (void *)&pDataParams->timer, mbedtls_timing_set_delay, - mbedtls_timing_get_delay); - } + mbedtls_ssl_set_timer_cb(&(pDataParams->ssl), (void *)&pDataParams->timer, mbedtls_timing_set_delay, + mbedtls_timing_get_delay); + } -#if defined(MBEDTLS_X509_CRT_PARSE_C) if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned -0x%x", -ret); - goto error; - } -#endif + Log_e("mbedtls_ssl_set_hostname failed returned -0x%x", -ret); + goto error; + } - mbedtls_ssl_set_bio(&(pDataParams->ssl), (void *)&pDataParams->socket_fd, mbedtls_net_send, mbedtls_net_recv, - mbedtls_net_recv_timeout); + mbedtls_ssl_set_bio(&(pDataParams->ssl), (void *)&pDataParams->socket_fd, mbedtls_net_send, mbedtls_net_recv, + mbedtls_net_recv_timeout); - while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("mbedtls_ssl_handshake failed returned -0x%x", -ret); -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { - Log_e("Unable to verify the server's certificate"); - } -#endif - goto error; - } - } + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { + Log_e("mbedtls_ssl_handshake failed returned -0x%x", -ret); + if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { + Log_e("Unable to verify the server's certificate"); + } + goto error; + } + } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { Log_e("mbedtls_ssl_get_verify_result failed returned -0x%x", -ret); @@ -308,7 +281,7 @@ uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, return (uintptr_t)pDataParams; error: - _free_mebeddtls(pDataParams); + _free_mebeddtls(pDataParams); return 0; } @@ -326,79 +299,74 @@ void HAL_DTLS_Disconnect(uintptr_t handle) } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); mbedtls_net_free(&(pParams->socket_fd)); -#ifdef MBEDTLS_X509_CRT_PARSE_C mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); -#if 0 mbedtls_ssl_cookie_free(&(pParams->cookie_ctx)); -#endif HAL_Free((void *)handle); } int HAL_DTLS_Write(uintptr_t handle, const unsigned char *data, size_t datalen, size_t *written_len) { - DTLSDataParams *data_params = (DTLSDataParams *)handle; - POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(written_len, QCLOUD_ERR_INVAL); + DTLSDataParams *data_params = (DTLSDataParams *)handle; + POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(written_len, QCLOUD_ERR_INVAL); int rc = mbedtls_ssl_write(&data_params->ssl, data, datalen); - if( rc < 0 ) { - Log_e("failed! mbedtls_ssl_write returned %d", rc); - rc = QCLOUD_ERR_SSL_WRITE; - } + if ( rc < 0 ) { + Log_e("failed! mbedtls_ssl_write returned %d", rc); + rc = QCLOUD_ERR_SSL_WRITE; + } - *written_len = rc; + *written_len = rc; rc = QCLOUD_RET_SUCCESS; IOT_FUNC_EXIT_RC(rc); } int HAL_DTLS_Read(uintptr_t handle, unsigned char *data, size_t datalen, unsigned int timeout_ms, - size_t *read_len) + size_t *read_len) { DTLSDataParams *data_params = (DTLSDataParams *)handle; POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(read_len, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(read_len, QCLOUD_ERR_INVAL); int rc = QCLOUD_ERR_SSL_READ; - mbedtls_ssl_conf_read_timeout(&(data_params->ssl_conf), timeout_ms); + mbedtls_ssl_conf_read_timeout(&(data_params->ssl_conf), timeout_ms); - do { - rc = mbedtls_ssl_read(&(data_params->ssl), data, datalen); - } while (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE); + do { + rc = mbedtls_ssl_read(&(data_params->ssl), data, datalen); + } while (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE); - if( rc <= 0 ) { - *read_len = 0; - switch( rc ) - { - case MBEDTLS_ERR_SSL_TIMEOUT: - rc = QCLOUD_ERR_SSL_READ_TIMEOUT; - break; + if ( rc <= 0 ) { + *read_len = 0; + switch ( rc ) { + case MBEDTLS_ERR_SSL_TIMEOUT: + rc = QCLOUD_ERR_SSL_READ_TIMEOUT; + break; - case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: - Log_e("connection was closed gracefully"); - rc = QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY; - break; + case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: + Log_e("connection was closed gracefully"); + rc = QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY; + break; - default: - Log_e( " mbedtls_ssl_read returned -0x%x", -rc ); - break; - } - } else { - *read_len = rc; - rc = QCLOUD_RET_SUCCESS; - } + default: + Log_e( " mbedtls_ssl_read returned -0x%x", -rc ); + break; + } + } else { + *read_len = rc; + rc = QCLOUD_RET_SUCCESS; + } return rc; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c index ae35d294..f6edd1c6 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c @@ -50,10 +50,8 @@ typedef struct { mbedtls_ctr_drbg_context ctr_drbg; mbedtls_ssl_context ssl; mbedtls_ssl_config ssl_conf; -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt ca_cert; mbedtls_x509_crt client_cert; -#endif mbedtls_pk_context private_key; } TLSDataParams; @@ -63,11 +61,9 @@ typedef struct { static void _free_mebedtls(TLSDataParams *pParams) { mbedtls_net_free(&(pParams->socket_fd)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); @@ -87,67 +83,61 @@ static void _free_mebedtls(TLSDataParams *pParams) * @param pConnectParams device info for TLS connection * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) { +static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) +{ int ret = QCLOUD_RET_SUCCESS; mbedtls_net_init(&(pDataParams->socket_fd)); mbedtls_ssl_init(&(pDataParams->ssl)); mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); mbedtls_ctr_drbg_init(&(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_init(&(pDataParams->ca_cert)); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif mbedtls_entropy_init(&(pDataParams->entropy)); // custom parameter is NULL for now if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, 0)) != 0) { - Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_INIT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { - Log_e("parse ca crt failed returned 0x%04x", ret<0?-ret:ret); + (pConnectParams->ca_crt_len + 1)))) { + Log_e("parse ca crt failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } -#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { - Log_e("load client cert file failed returned 0x%x", ret<0?-ret:ret); + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + Log_e("load client cert file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } -#endif if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { - Log_e("load client key file failed returned 0x%x", ret<0?-ret:ret); + Log_e("load client key file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } else { Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + (const unsigned char *) psk_id, strlen( psk_id )); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret<0?-ret:ret); - return ret; - } + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret < 0 ? -ret : ret); + return ret; + } #endif return QCLOUD_RET_SUCCESS; @@ -161,13 +151,14 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { +int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_TCP)) != 0) { - Log_e("tcp connect failed returned 0x%04x errno: %d", ret<0?-ret:ret, errno); + Log_e("tcp connect failed returned 0x%04x errno: %d", ret < 0 ? -ret : ret, errno); switch (ret) { case MBEDTLS_ERR_NET_SOCKET_FAILED: @@ -180,12 +171,10 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p } -#if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { - Log_e("set block faliled returned 0x%04x", ret<0?-ret:ret); + Log_e("set block faliled returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_TCP_CONNECT; } -#endif return QCLOUD_RET_SUCCESS; } @@ -197,11 +186,10 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p * * @return */ - #if defined(MBEDTLS_X509_CRT_PARSE_C) -int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { +int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +{ return *flags; } -#endif uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, int port) { @@ -218,47 +206,41 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in Log_d("Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&(pDataParams->ssl_conf), MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_ssl_conf_verify(&(pDataParams->ssl_conf), _qcloud_server_certificate_verify, (void *)host); mbedtls_ssl_conf_authmode(&(pDataParams->ssl_conf), MBEDTLS_SSL_VERIFY_REQUIRED); -#endif mbedtls_ssl_conf_rng(&(pDataParams->ssl_conf), mbedtls_ctr_drbg_random, &(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { - Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } -#endif mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), pConnectParams->timeout_ms); if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #ifndef AUTH_MODE_CERT // ciphersuites selection for PSK device - if(pConnectParams->psk != NULL) { + if (pConnectParams->psk != NULL) { mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); } #endif -#if defined(MBEDTLS_X509_CRT_PARSE_C) // Set the hostname to check against the received server certificate and sni if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } -#endif mbedtls_ssl_set_bio(&(pDataParams->ssl), &(pDataParams->socket_fd), mbedtls_net_send, mbedtls_net_recv, mbedtls_net_recv_timeout); @@ -271,19 +253,16 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("mbedtls_ssl_handshake failed returned 0x%04x", ret<0?-ret:ret); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) + Log_e("mbedtls_ssl_handshake failed returned 0x%04x", ret < 0 ? -ret : ret); if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { Log_e("Unable to verify the server's certificate"); } -#endif goto error; } } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { - Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -298,7 +277,8 @@ error: return 0; } -void HAL_TLS_Disconnect(uintptr_t handle) { +void HAL_TLS_Disconnect(uintptr_t handle) +{ if ((uintptr_t)NULL == handle) { Log_d("handle is NULL"); return; @@ -310,11 +290,9 @@ void HAL_TLS_Disconnect(uintptr_t handle) { } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); mbedtls_net_free(&(pParams->socket_fd)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); @@ -324,7 +302,7 @@ void HAL_TLS_Disconnect(uintptr_t handle) { } int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, - size_t *written_len) + size_t *written_len) { Timer timer; @@ -338,10 +316,9 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ for (written_so_far = 0; written_so_far < totalLen && !expired(&timer); written_so_far += write_rc) { - while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) - { + while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) { if (write_rc != MBEDTLS_ERR_SSL_WANT_READ && write_rc != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("HAL_TLS_write failed 0x%04x", write_rc<0?-write_rc:write_rc); + Log_e("HAL_TLS_write failed 0x%04x", write_rc < 0 ? -write_rc : write_rc); errorFlag = true; break; } @@ -383,7 +360,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t *read_len += read_rc; } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE && read_rc != MBEDTLS_ERR_SSL_WANT_READ && read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { - Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc<0?-read_rc:read_rc); + Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc < 0 ? -read_rc : read_rc); return QCLOUD_ERR_SSL_READ; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/CMakeLists.txt b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/CMakeLists.txt index c5706352..1d322e35 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/CMakeLists.txt +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/CMakeLists.txt @@ -19,14 +19,12 @@ set(link_lib ) endif() -if (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "gcc") +if(CMAKE_COMPILER_IS_GNUCC) set(lib -Wl,--start-group ${link_lib} -Wl,--end-group) -elseif (PLATFORM STREQUAL "windows" AND COMPILE_TOOLS STREQUAL "MSVC") +else() set(lib ${link_lib}) endif() - - set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/output/${BUILD_TYPE}/bin) @@ -39,6 +37,22 @@ file(GLOB src_light_data_template_sample ${PROJECT_SOURCE_DIR}/samples/scenarize add_executable(light_data_template_sample ${src_light_data_template_sample}) target_link_libraries(light_data_template_sample ${lib}) +# MQTT +file(GLOB src_mqtt_sample ${PROJECT_SOURCE_DIR}/samples/mqtt/mqtt_sample.c) +add_executable(mqtt_sample ${src_mqtt_sample}) +target_link_libraries(mqtt_sample ${lib}) + +# Raw data +file(GLOB src_raw_data ${PROJECT_SOURCE_DIR}/samples/raw_data/raw_data_sample.c) +add_executable(raw_data_mqtt_sample ${src_raw_data}) +target_link_libraries(raw_data_mqtt_sample ${lib}) + +# GATEWAY +if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON") + file(GLOB src_gateway_sample ${PROJECT_SOURCE_DIR}/samples/gateway/*.c) + add_executable(gateway_sample ${src_gateway_sample}) + target_link_libraries(gateway_sample ${lib}) +endif() # OTA MQTT if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/Makefile b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/Makefile index 1ad98289..e0c6f4f9 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/Makefile +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/Makefile @@ -39,9 +39,9 @@ ifeq ($(FEATURE_AUTH_MODE),CERT) CFLAGS += -DAUTH_MODE_CERT endif -.PHONY: ota_mqtt_sample data_template_sample +.PHONY: ota_mqtt_sample data_template_sample gateway_sample mqtt_sample -all: ota_mqtt_sample data_template_sample +all: ota_mqtt_sample data_template_sample gateway_sample mqtt_sample ifneq (,$(filter -DOTA_COMM_ENABLED,$(CFLAGS))) @@ -66,6 +66,28 @@ data_template_sample: mv light_$@ $(FINAL_DIR)/bin endif +ifneq (,$(filter -DMQTT_COMM_ENABLED,$(CFLAGS))) +mqtt_sample: + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/mqtt/$@.c $(LDFLAGS) -o $@ + + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/raw_data/*.c $(LDFLAGS) -o raw_data_$@ + + $(TOP_Q) \ + mv raw_data_$@ $(FINAL_DIR)/bin && \ + mv $@ $(FINAL_DIR)/bin +endif + +ifneq (,$(filter -DGATEWAY_ENABLED,$(CFLAGS))) +gateway_sample: + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/gateway/*.c $(LDFLAGS) -o $@ + + $(TOP_Q) \ + mv $@ $(FINAL_DIR)/bin +endif + clean: rm -rf $(FINAL_DIR)/bin/* diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/action_config.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/action_config.c index c62fcd33..71b60efa 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/action_config.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/action_config.c @@ -7,26 +7,26 @@ static TYPE_DEF_TEMPLATE_BOOL sg_light_blink_in_color = 0; static TYPE_DEF_TEMPLATE_INT sg_light_blink_in_total_time = 0; static DeviceProperty g_actionInput_light_blink[] = { - {.key = "time", .data = &sg_light_blink_in_time, .type = TYPE_TEMPLATE_INT}, - {.key = "color", .data = &sg_light_blink_in_color, .type = TYPE_TEMPLATE_BOOL}, - {.key = "total_time", .data = &sg_light_blink_in_total_time, .type = TYPE_TEMPLATE_INT}, + {.key = "time", .data = &sg_light_blink_in_time, .type = TYPE_TEMPLATE_INT}, + {.key = "color", .data = &sg_light_blink_in_color, .type = TYPE_TEMPLATE_BOOL}, + {.key = "total_time", .data = &sg_light_blink_in_total_time, .type = TYPE_TEMPLATE_INT}, }; static TYPE_DEF_TEMPLATE_BOOL sg_light_blink_out_err_code = 0; static DeviceProperty g_actionOutput_light_blink[] = { - {.key = "err_code", .data = &sg_light_blink_out_err_code, .type = TYPE_TEMPLATE_BOOL}, + {.key = "err_code", .data = &sg_light_blink_out_err_code, .type = TYPE_TEMPLATE_BOOL}, }; -static DeviceAction g_actions[]={ +static DeviceAction g_actions[] = { { - .pActionId = "light_blink", - .timestamp = 0, - .input_num = sizeof(g_actionInput_light_blink)/sizeof(g_actionInput_light_blink[0]), - .output_num = sizeof(g_actionOutput_light_blink)/sizeof(g_actionOutput_light_blink[0]), - .pInput = g_actionInput_light_blink, - .pOutput = g_actionOutput_light_blink, + .pActionId = "light_blink", + .timestamp = 0, + .input_num = sizeof(g_actionInput_light_blink) / sizeof(g_actionInput_light_blink[0]), + .output_num = sizeof(g_actionOutput_light_blink) / sizeof(g_actionOutput_light_blink[0]), + .pInput = g_actionInput_light_blink, + .pOutput = g_actionOutput_light_blink, }, }; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_config.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_config.c index e962652f..83e8be55 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_config.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_config.c @@ -1,4 +1,4 @@ -/*-----------------data config start -------------------*/ +/*-----------------data config start -------------------*/ #define TOTAL_PROPERTY_COUNT 4 @@ -8,7 +8,7 @@ typedef struct _ProductDataDefine { TYPE_DEF_TEMPLATE_BOOL m_power_switch; TYPE_DEF_TEMPLATE_ENUM m_color; TYPE_DEF_TEMPLATE_INT m_brightness; - TYPE_DEF_TEMPLATE_STRING m_name[64+1]; + TYPE_DEF_TEMPLATE_STRING m_name[64 + 1]; } ProductDataDefine; static ProductDataDefine sg_ProductData; @@ -32,7 +32,7 @@ static void _init_data_template(void) sg_ProductData.m_name[0] = '\0'; sg_DataTemplate[3].data_property.data = sg_ProductData.m_name; - sg_DataTemplate[3].data_property.data_buff_len = sizeof(sg_ProductData.m_name)/sizeof(sg_ProductData.m_name[3]); + sg_DataTemplate[3].data_property.data_buff_len = sizeof(sg_ProductData.m_name) / sizeof(sg_ProductData.m_name[3]); sg_DataTemplate[3].data_property.key = "name"; sg_DataTemplate[3].data_property.type = TYPE_TEMPLATE_STRING; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_template_sample.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_template_sample.c index ecfc668d..ff682d64 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_template_sample.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/data_template_sample.c @@ -12,15 +12,15 @@ * limitations under the License. * */ - + #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" #include "lite-utils.h" #include "data_config.c" #ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file #endif static DeviceInfo sg_devInfo; @@ -34,54 +34,53 @@ size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_dat #include "events_config.c" static void update_events_timestamp(sEvent *pEvents, int count) { - int i; - - for(i = 0; i < count; i++){ - if (NULL == (&pEvents[i])) { - Log_e("null event pointer"); - return; + int i; + + for (i = 0; i < count; i++) { + if (NULL == (&pEvents[i])) { + Log_e("null event pointer"); + return; } -#ifdef EVENT_TIMESTAMP_USED - pEvents[i].timestamp = time(NULL); //should be UTC and accurate +#ifdef EVENT_TIMESTAMP_USED + pEvents[i].timestamp = time(NULL); //should be UTC and accurate #else - pEvents[i].timestamp = 0; + pEvents[i].timestamp = 0; #endif - } + } } static void event_post_cb(void *pClient, MQTTMessage *msg) { - Log_d("Reply:%.*s", msg->payload_len, msg->payload); - IOT_Event_clearFlag(pClient, FLAG_EVENT0|FLAG_EVENT1|FLAG_EVENT2); + Log_d("Reply:%.*s", msg->payload_len, msg->payload); +// IOT_Event_clearFlag(pClient, FLAG_EVENT0 | FLAG_EVENT1 | FLAG_EVENT2); } //event check and post static void eventPostCheck(void *client) { - int i; - int rc; - uint32_t eflag; - uint8_t event_count; - sEvent *pEventList[EVENT_COUNTS]; - - IOT_Event_setFlag(client, FLAG_EVENT0|FLAG_EVENT1|FLAG_EVENT2); - eflag = IOT_Event_getFlag(client); - if((EVENT_COUNTS > 0 )&& (eflag > 0)){ - event_count = 0; - for(i = 0; i < EVENT_COUNTS; i++){ - if((eflag&(1< 0 ) && (eflag > 0)) { + event_count = 0; + for (i = 0; i < EVENT_COUNTS; i++) { + if ((eflag & (1 << i))&ALL_EVENTS_MASK) { + pEventList[event_count++] = &(g_events[i]); + update_events_timestamp(&g_events[i], 1); + IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); + } + } + + rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \ + event_count, pEventList, event_post_cb); + if (rc < 0) { + Log_e("events post failed: %d", rc); + } + } } @@ -91,158 +90,163 @@ static void eventPostCheck(void *client) #include "action_config.c" // action : regist action and set the action handle callback, add your aciton logic here -static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) -{ - int i; - sReplyPara replyPara; +static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) +{ + int i; + sReplyPara replyPara; - //do something base on input, just print as an sample - DeviceProperty *pActionInput = pAction->pInput; - for (i = 0; i < pAction->input_num; i++) { - if (JSTRING == pActionInput[i].type) { - Log_d("Input:[%s], data:[%s]", pActionInput[i].key, pActionInput[i].data); - HAL_Free(pActionInput[i].data); - } else { - if(JINT32 == pActionInput[i].type) { - Log_d("Input:[%s], data:[%d]", pActionInput[i].key, *((int*)pActionInput[i].data)); - } else if( JFLOAT == pActionInput[i].type) { - Log_d("Input:[%s], data:[%f]", pActionInput[i].key, *((float*)pActionInput[i].data)); - } else if( JUINT32 == pActionInput[i].type) { - Log_d("Input:[%s], data:[%u]", pActionInput[i].key, *((uint32_t*)pActionInput[i].data)); - } - } - } + //do something base on input, just print as an sample + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (JSTRING == pActionInput[i].type) { + Log_d("Input:[%s], data:[%s]", pActionInput[i].key, pActionInput[i].data); + HAL_Free(pActionInput[i].data); + } else { + if (JINT32 == pActionInput[i].type) { + Log_d("Input:[%s], data:[%d]", pActionInput[i].key, *((int*)pActionInput[i].data)); + } else if ( JFLOAT == pActionInput[i].type) { + Log_d("Input:[%s], data:[%f]", pActionInput[i].key, *((float*)pActionInput[i].data)); + } else if ( JUINT32 == pActionInput[i].type) { + Log_d("Input:[%s], data:[%u]", pActionInput[i].key, *((uint32_t*)pActionInput[i].data)); + } + } + } - // construct output - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault - - - DeviceProperty *pActionOutnput = pAction->pOutput; - (void)pActionOutnput; //elimate warning - //TO DO: add your aciont logic here and set output properties which will be reported by action_reply - - - IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + + + DeviceProperty *pActionOutnput = pAction->pOutput; + (void)pActionOutnput; //elimate warning + //TO DO: add your aciont logic here and set output properties which will be reported by action_reply + + + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); } static int _register_data_template_action(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { - rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template action failed, err: %d", rc); - return rc; - } else { - Log_i("data template action=%s registered.", g_actions[i].pActionId); - } + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_SUBCRIBE_SUCCESS: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", packet_id); - break; + Log_i("subscribe success, packet-id=%u", packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_TIMEOUT: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", packet_id); - break; + Log_i("subscribe wait ack timeout, packet-id=%u", packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_SUBCRIBE_NACK: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", packet_id); - break; + Log_i("subscribe nack, packet-id=%u", packet_id); + break; - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +/*add user init code, like sensor init*/ +static void _usr_init(void) +{ + Log_d("add your init code here"); } // Setup MQTT construct parameters static int _setup_connect_init_params(TemplateInitParams* initParams) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - /* TLS with certs*/ - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + /* TLS with certs*/ + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } -static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) { int i = 0; for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { sg_DataTemplate[i].state = eCHANGED; Log_i("Property=%s changed", pProperty->key); @@ -254,83 +258,132 @@ static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, ui Log_e("Property=%s changed no match", pProperty->key); } -static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) { - Log_i("recv report reply response, reply ack: %d", replyAck); +static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) +{ + Log_i("recv report reply response, reply ack: %d", replyAck); } // register data template properties static int _register_data_template_property(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template property failed, err: %d", rc); - return rc; - } else { - Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); - } + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } // when control msg received, data_template's properties has been parsed in pData // you should add your logic how to use pData void deal_down_stream_user_logic(void *client, ProductDataDefine * pData) { - Log_d("someting about your own product logic wait to be done"); + Log_d("someting about your own product logic wait to be done"); + + +#ifdef EVENT_POST_ENABLED + //IOT_Event_setFlag(client, FLAG_EVENT0); //set the events flag when the evnts your defined occured, see events_config.c +#endif + } -// demo for up-stream +/*get local property data, like sensor data*/ +static void _refresh_local_property(void) +{ + //add your local property refresh logic +} + +/*find propery need report*/ +static int find_wait_report_property(DeviceProperty *pReportDataList[]) +{ + int i, j; + + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (eCHANGED == sg_DataTemplate[i].state) { + pReportDataList[j++] = &(sg_DataTemplate[i].data_property); + sg_DataTemplate[i].state = eNOCHANGE; + } + } + + return j; +} + +// demo for up-stream // add changed properties to pReportDataList, then the changed properties would be reported // you should add your own logic for how to get the changed properties int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) { - int i, j; - - for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { - if(eCHANGED == sg_DataTemplate[i].state) { - pReportDataList[j++] = &(sg_DataTemplate[i].data_property); - sg_DataTemplate[i].state = eNOCHANGE; - } - } - *pCount = j; + //refresh local property + _refresh_local_property(); - return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; + /*find propery need report*/ + *pCount = find_wait_report_property(pReportDataList); + + return (*pCount > 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } /*You should get the real info for your device, here just for example*/ static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) { - /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ DeviceProperty plat_info[] = { - {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, - {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, - {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, - {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, - {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, - {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, + {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, + {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, + {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, + {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, + {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, + {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, {NULL, NULL, 0} //end - }; - - /*self define info*/ - DeviceProperty self_info[] = { + }; + + /*self define info*/ + DeviceProperty self_info[] = { {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, {NULL, NULL, 0} //end - }; + }; - return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); } -int main(int argc, char **argv) { +#ifdef MULTITHREAD_ENABLED +static void *template_yield_thread(void *ptr) +{ +#define THREAD_SLEEP_INTERVAL_MS 1 + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; + + Log_d("template yield thread start ..."); + while (true) { + rc = IOT_Template_Yield(pClient, 200); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("Something goes error: %d", rc); + } + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + } + return NULL; +#undef THREAD_SLEEP_INTERVAL_MS +} +#endif + + +int main(int argc, char **argv) +{ int rc; - sReplyPara replyPara; - DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; - int ReportCont; - + sReplyPara replyPara; + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + int ReportCont; + //init log level IOT_Log_Set_Level(eLOG_DEBUG); @@ -338,11 +391,11 @@ int main(int argc, char **argv) { TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS; rc = _setup_connect_init_params(&init_params); if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + Log_e("init params err,rc=%d", rc); + return rc; + } - void *client = IOT_Template_Construct(&init_params); + void *client = IOT_Template_Construct(&init_params, NULL); if (client != NULL) { Log_i("Cloud Device Construct Success"); } else { @@ -350,114 +403,132 @@ int main(int argc, char **argv) { return QCLOUD_ERR_FAILURE; } +#ifdef MULTITHREAD_ENABLED + pthread_t *yield_thread_t = NULL; + yield_thread_t = HAL_ThreadCreate(0, 0, "template_yield_thread", template_yield_thread, client); + if (yield_thread_t == NULL) { + Log_e("create yield thread fail"); + goto exit; + } +#endif + + //user init + _usr_init(); + //init data template _init_data_template(); - //register data template propertys here + //register data template propertys here rc = _register_data_template_property(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template propertys Success"); } else { Log_e("Register data template propertys Failed: %d", rc); - return rc; + goto exit; } - //register data template actions here + //register data template actions here #ifdef ACTION_ENABLED rc = _register_data_template_action(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template actions Success"); } else { Log_e("Register data template actions Failed: %d", rc); - return rc; + goto exit; } #endif - //report device info, then you can manager your product by these info, like position - rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); - if(QCLOUD_RET_SUCCESS == rc){ - rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Report system info fail, err: %d", rc); - goto exit; - } - }else{ - Log_e("Get system info fail, err: %d", rc); - } + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if (QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + } + } else { + Log_e("Get system info fail, err: %d", rc); + } - //get the property changed during offline - rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Get data status fail, err: %d", rc); - //goto exit; - }else{ - Log_d("Get data status success"); - } + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + } else { + Log_d("Get data status success"); + } - while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT - || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { + while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT + || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { +#ifndef MULTITHREAD_ENABLED rc = IOT_Template_Yield(client, 200); - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { HAL_SleepMs(1000); continue; + } else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } +#endif - /* handle control msg from server */ - if (sg_control_msg_arrived) { - - deal_down_stream_user_logic(client, &sg_ProductData); - - /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - - rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); + /* handle control msg from server */ + if (sg_control_msg_arrived) { + + deal_down_stream_user_logic(client, &sg_ProductData); + + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured + + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); if (rc == QCLOUD_RET_SUCCESS) { - Log_d("Contol msg reply success"); - sg_control_msg_arrived = false; + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; } else { Log_e("Contol msg reply failed, err: %d", rc); } - } else{ - Log_d("No control msg received..."); - } + } else { + Log_d("No control msg received..."); + } - /*report msg to server*/ - /*report the lastest properties's status*/ - if(QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)){ - rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); - if (rc == QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, - OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc == QCLOUD_RET_SUCCESS) { - Log_i("data template reporte success"); - } else { - Log_e("data template reporte failed, err: %d", rc); - } - } else { - Log_e("construct reporte data failed, err: %d", rc); - } + /*report msg to server*/ + /*report the lastest properties's status*/ + if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)) { + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + Log_i("data template reporte success"); + } else { + Log_e("data template reporte failed, err: %d", rc); + } + } else { + Log_e("construct reporte data failed, err: %d", rc); + } - }else{ - //Log_d("no data need to be reported or someting goes wrong"); - } + } else { + //Log_d("no data need to be reported or someting goes wrong"); + } - -#ifdef EVENT_POST_ENABLED - eventPostCheck(client); + +#ifdef EVENT_POST_ENABLED + eventPostCheck(client); #endif - - HAL_SleepMs(3000); + + HAL_SleepMs(3000); } + exit: + rc = IOT_Template_Destroy(client); + +#ifdef MULTITHREAD_ENABLED + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } +#endif return rc; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/events_config.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/events_config.c index ad8af0eb..484ea447 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/events_config.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/data_template/events_config.c @@ -3,50 +3,50 @@ #define EVENT_COUNTS (3) static TYPE_DEF_TEMPLATE_BOOL sg_status_report_status = 0; -static TYPE_DEF_TEMPLATE_STRING sg_status_report_message[64+1]={0}; +static TYPE_DEF_TEMPLATE_STRING sg_status_report_message[64 + 1] = {0}; static DeviceProperty g_propertyEvent_status_report[] = { - {.key = "status", .data = &sg_status_report_status, .type = TYPE_TEMPLATE_BOOL}, - {.key = "message", .data = sg_status_report_message, .type = TYPE_TEMPLATE_STRING}, + {.key = "status", .data = &sg_status_report_status, .type = TYPE_TEMPLATE_BOOL}, + {.key = "message", .data = sg_status_report_message, .type = TYPE_TEMPLATE_STRING}, }; static TYPE_DEF_TEMPLATE_FLOAT sg_low_voltage_voltage = 1; static DeviceProperty g_propertyEvent_low_voltage[] = { - {.key = "voltage", .data = &sg_low_voltage_voltage, .type = TYPE_TEMPLATE_FLOAT}, + {.key = "voltage", .data = &sg_low_voltage_voltage, .type = TYPE_TEMPLATE_FLOAT}, }; -static TYPE_DEF_TEMPLATE_STRING sg_hardware_fault_name[64+1]={0}; +static TYPE_DEF_TEMPLATE_STRING sg_hardware_fault_name[64 + 1] = {0}; static TYPE_DEF_TEMPLATE_INT sg_hardware_fault_error_code = 1; static DeviceProperty g_propertyEvent_hardware_fault[] = { - {.key = "name", .data = sg_hardware_fault_name, .type = TYPE_TEMPLATE_STRING}, - {.key = "error_code", .data = &sg_hardware_fault_error_code, .type = TYPE_TEMPLATE_INT}, + {.key = "name", .data = sg_hardware_fault_name, .type = TYPE_TEMPLATE_STRING}, + {.key = "error_code", .data = &sg_hardware_fault_error_code, .type = TYPE_TEMPLATE_INT}, }; -static sEvent g_events[]={ +static sEvent g_events[] = { { - .event_name = "status_report", - .type = "info", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_status_report)/sizeof(g_propertyEvent_status_report[0]), - .pEventData = g_propertyEvent_status_report, + .event_name = "status_report", + .type = "info", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_status_report) / sizeof(g_propertyEvent_status_report[0]), + .pEventData = g_propertyEvent_status_report, }, { - .event_name = "low_voltage", - .type = "alert", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_low_voltage)/sizeof(g_propertyEvent_low_voltage[0]), - .pEventData = g_propertyEvent_low_voltage, + .event_name = "low_voltage", + .type = "alert", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_low_voltage) / sizeof(g_propertyEvent_low_voltage[0]), + .pEventData = g_propertyEvent_low_voltage, }, { - .event_name = "hardware_fault", - .type = "fault", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_hardware_fault)/sizeof(g_propertyEvent_hardware_fault[0]), - .pEventData = g_propertyEvent_hardware_fault, + .event_name = "hardware_fault", + .type = "fault", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_hardware_fault) / sizeof(g_propertyEvent_hardware_fault[0]), + .pEventData = g_propertyEvent_hardware_fault, }, }; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/gateway_sample.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/gateway_sample.c new file mode 100644 index 00000000..3af675b9 --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/gateway_sample.c @@ -0,0 +1,412 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "utils_getopt.h" +#include "qcloud_iot_export.h" + +#define MAX_SIZE_OF_TOPIC (128) +#define MAX_SIZE_OF_DATA (128) + +#define SUB_DEV_USE_DATA_TEMPLATE_LIGHT +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT +#define LIGHT_SUB_DEV_PRODUCT_ID "WPDA0S6S08" +#define LIGHT_SUB_DEV_NAME "dev001" +extern void* sub_dev1_thread(void *ptr, char *product_id, char *device_name); +#endif + + +static int sg_sub_packet_id = -1; +static int sg_loop_count = 1; +static bool sg_thread_running = true; + +static GatewayDeviceInfo sg_GWdevInfo; + +#ifdef AUTH_MODE_CERT +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file +#endif + + +void _event_handler(void *client, void *context, MQTTEventMsg *msg) +{ + MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, + mqtt_messge->ptopic, + mqtt_messge->payload_len, + mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +static void _message_handler(void *client, MQTTMessage *message, void *user_data) +{ + if (message == NULL) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", + (int) message->topic_len, message->ptopic, (int) message->payload_len, (char *) message->payload); +} + +static int _setup_connect_init_params(GatewayInitParam* init_params) +{ + int rc; + + rc = HAL_GetGwDevInfo((void *)&sg_GWdevInfo); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("Get gateway dev info err,rc:%d", rc); + return rc; + } + + init_params->init_param.product_id = sg_GWdevInfo.gw_info.product_id; + init_params->init_param.device_name = sg_GWdevInfo.gw_info.device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_GWdevInfo.gw_info.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_GWdevInfo.gw_info.dev_key_file_name); + + init_params->init_param.cert_file = sg_cert_file; + init_params->init_param.key_file = sg_key_file; +#else + init_params->init_param.device_secret = sg_GWdevInfo.gw_info.device_secret; +#endif + + init_params->init_param.command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + init_params->init_param.auto_connect_enable = 1; + init_params->init_param.event_handle.h_fp = _event_handler; + init_params->init_param.keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + return QCLOUD_RET_SUCCESS; +} + +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l:")) != EOF) + switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_count = atoi(utils_optarg); + if (sg_loop_count > 10000) + sg_loop_count = 10000; + else if (sg_loop_count < 0) + sg_loop_count = 1; + break; + + default: + HAL_Printf("usage: %s [options]\n" + " [-c ] \n" + " [-l ] \n" + , argv[0]); + return -1; + } + return 0; +} + +/** + * yield thread runner + */ +static void *gateway_yield_thread(void *ptr) +{ + + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; + + Log_d("gateway yield thread start ..."); + while (sg_thread_running) { + rc = IOT_Gateway_Yield(pClient, 200); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("Something goes error: %d", rc); + //break; + } + } + return NULL; +} + +/** + * sub dev thread runner + */ + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT //show subdev with data template. +static void *sub_dev_thread(void *ptr) +{ + return sub_dev1_thread(ptr, LIGHT_SUB_DEV_PRODUCT_ID, LIGHT_SUB_DEV_NAME); +} +#endif + + +/*Gateway should enable multithread*/ +int main(int argc, char **argv) +{ + int rc = QCLOUD_ERR_FAILURE; + int errCount = 0; + int i; + int size; + void* client = NULL; + GatewayDeviceInfo *gw = &sg_GWdevInfo; + GatewayParam param = DEFAULT_GATEWAY_PARAMS; + DeviceInfo *subDevInfo; + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + pthread_t *light_thread_t = NULL; +#endif + + IOT_Log_Set_Level(eLOG_DEBUG); + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + GatewayInitParam init_params = DEFAULT_GATEWAY_INIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + client = IOT_Gateway_Construct(&init_params); + if (client == NULL) { + Log_e("client constructed failed."); + return QCLOUD_ERR_FAILURE; + } + + //mqtt_yeild can be called by only one thread when multi-thread run, so do not use sync operation below + pthread_t *yield_thread_t = NULL; + yield_thread_t = HAL_ThreadCreate(0, 0, "yield_thread", gateway_yield_thread, client); + if (yield_thread_t == NULL) { + Log_e("create yield thread fail"); + goto exit; + } + + HAL_SleepMs(1000); /*wait yield_thread start running*/ + + //set GateWay device info + param.product_id = gw->gw_info.product_id; + param.device_name = gw->gw_info.device_name; + + // make sub-device online + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + param.subdev_product_id = subDevInfo->product_id; + param.subdev_device_name = subDevInfo->device_name; + + rc = IOT_Gateway_Subdev_Online(client, ¶m); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("subDev Pid:%s devName:%s online fail.", subDevInfo->product_id, subDevInfo->device_name); + errCount++; + } else { + Log_d("subDev Pid:%s devName:%s online success.", subDevInfo->product_id, subDevInfo->device_name); + } + } + + if (errCount > 0) { + Log_e("%d of %d sub devices online fail", errCount, gw->sub_dev_num); + } + + //subscribe sub-device data_template down stream topic for example + char topic_filter[MAX_SIZE_OF_TOPIC + 1]; + SubscribeParams sub_param = DEFAULT_SUB_PARAMS; + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT //subdev with data template example. + if ((0 == strcmp(subDevInfo->product_id, LIGHT_SUB_DEV_PRODUCT_ID)) + && (0 == strcmp(subDevInfo->device_name, LIGHT_SUB_DEV_NAME))) { + light_thread_t = HAL_ThreadCreate(0, 0, "sub_dev1_thread", sub_dev_thread, client); + if (light_thread_t == NULL) { + Log_e("create sub_dev light thread fail"); + goto exit; + } else { + Log_e("create sub_dev light thread success"); + } + continue; + } +#endif + + memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/down/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); + + if (size < 0 || size > MAX_SIZE_OF_TOPIC) { + Log_e("buf size < topic length!"); + rc = QCLOUD_ERR_FAILURE; + goto exit; + } + + sub_param.on_message_handler = _message_handler; + rc = IOT_Gateway_Subscribe(client, topic_filter, &sub_param); + if (rc < 0) { + Log_e("IOT_Gateway_Subscribe fail."); + return rc; + } + } + + HAL_SleepMs(2000); /*wait subcribe ack*/ + +// publish to sub-device data_template up stream topic for example + PublishParams pub_param = DEFAULT_PUB_PARAMS; + pub_param.qos = QOS0; + +//pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"data\":\"err reply wil received\"}}"; + pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{}}"; + pub_param.payload_len = strlen(pub_param.payload); + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + if ((0 == strcmp(subDevInfo->product_id, LIGHT_SUB_DEV_PRODUCT_ID)) + && (0 == strcmp(subDevInfo->device_name, LIGHT_SUB_DEV_NAME))) { + continue; + } +#endif + memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/up/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); + if (size < 0 || size > MAX_SIZE_OF_TOPIC) { + Log_e("buf size < topic length!"); + return QCLOUD_ERR_FAILURE; + } + + rc = IOT_Gateway_Publish(client, topic_filter, &pub_param); + if (rc < 0) { + Log_e("IOT_Gateway_Publish fail."); + } + } + +exit: + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + if(NULL != light_thread_t){ + pthread_join(*light_thread_t, NULL); + } +#endif + + //set GateWay device info + param.product_id = gw->gw_info.product_id; + param.device_name = gw->gw_info.device_name; + // make sub-device offline + errCount = 0; + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + param.subdev_product_id = subDevInfo->product_id; + param.subdev_device_name = subDevInfo->device_name; + + rc = IOT_Gateway_Subdev_Offline(client, ¶m); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("subDev Pid:%s devName:%s offline fail.", subDevInfo->product_id, subDevInfo->device_name); + errCount++; + } else { + Log_d("subDev Pid:%s devName:%s offline success.", subDevInfo->product_id, subDevInfo->device_name); + } + } + + if (errCount > 0) { + Log_e("%d of %d sub devices offline fail", errCount, gw->sub_dev_num); + } + + //stop running thread + sg_thread_running = false; + HAL_SleepMs(1000); /*make sure no thread use client before destroy*/ + + rc = IOT_Gateway_Destroy(client); + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT //show subdev with data template. + if (NULL != light_thread_t) { + HAL_ThreadDestroy((void *)light_thread_t); + } +#endif + + return rc; +} diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/sub_dev001.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/sub_dev001.c new file mode 100644 index 00000000..e9bbba71 --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/gateway/sub_dev001.c @@ -0,0 +1,685 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "lite-utils.h" +#include "utils_timer.h" + +/* anis color control codes */ +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_YELLOW "\x1b[33m" +#define ANSI_COLOR_BLUE "\x1b[34m" +#define ANSI_COLOR_RESET "\x1b[0m" + + +static DeviceInfo sg_devInfo; +static Timer sg_reportTimer; + +static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; +static bool sg_control_msg_arrived = false; +static char sg_data_report_buffer[2048]; +size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_data_report_buffer[0]); + + +/*data_config.c can be generated by tools/codegen.py -c xx/product.json*/ +/*-----------------data config start -------------------*/ + +#define TOTAL_PROPERTY_COUNT 4 +#define MAX_STR_NAME_LEN (64) + +static sDataPoint sg_DataTemplate[TOTAL_PROPERTY_COUNT]; + +typedef enum { + eCOLOR_RED = 0, + eCOLOR_GREEN = 1, + eCOLOR_BLUE = 2, +} eColor; + +typedef struct _ProductDataDefine { + TYPE_DEF_TEMPLATE_BOOL m_light_switch; + TYPE_DEF_TEMPLATE_ENUM m_color; + TYPE_DEF_TEMPLATE_INT m_brightness; + TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN + 1]; +} ProductDataDefine; + +static ProductDataDefine sg_ProductData; + +static void _init_data_template(void) +{ + memset((void *) & sg_ProductData, 0, sizeof(ProductDataDefine)); + + sg_ProductData.m_light_switch = 0; + sg_DataTemplate[0].data_property.key = "power_switch"; + sg_DataTemplate[0].data_property.data = &sg_ProductData.m_light_switch; + sg_DataTemplate[0].data_property.type = TYPE_TEMPLATE_BOOL; + + sg_ProductData.m_color = eCOLOR_RED; + sg_DataTemplate[1].data_property.key = "color"; + sg_DataTemplate[1].data_property.data = &sg_ProductData.m_color; + sg_DataTemplate[1].data_property.type = TYPE_TEMPLATE_ENUM; + + sg_ProductData.m_brightness = 0; + sg_DataTemplate[2].data_property.key = "brightness"; + sg_DataTemplate[2].data_property.data = &sg_ProductData.m_brightness; + sg_DataTemplate[2].data_property.type = TYPE_TEMPLATE_INT; + + strncpy(sg_ProductData.m_name, sg_devInfo.device_name, MAX_STR_NAME_LEN); + sg_ProductData.m_name[strlen(sg_devInfo.device_name)] = '\0'; + sg_DataTemplate[3].data_property.key = "name"; + sg_DataTemplate[3].data_property.data = sg_ProductData.m_name; + sg_DataTemplate[3].data_property.data_buff_len = MAX_STR_NAME_LEN; + sg_DataTemplate[3].data_property.type = TYPE_TEMPLATE_STRING; + +}; +/*-----------------data config end -------------------*/ + + +/*event_config.c can be generated by tools/codegen.py -c xx/product.json*/ +/*-----------------event config start -------------------*/ +#ifdef EVENT_POST_ENABLED +#define EVENT_COUNTS (3) +#define MAX_EVENT_STR_MESSAGE_LEN (64) +#define MAX_EVENT_STR_NAME_LEN (64) + + +static TYPE_DEF_TEMPLATE_BOOL sg_status; +static TYPE_DEF_TEMPLATE_STRING sg_message[MAX_EVENT_STR_MESSAGE_LEN + 1]; +static DeviceProperty g_propertyEvent_status_report[] = { + + {.key = "status", .data = &sg_status, .type = TYPE_TEMPLATE_BOOL}, + {.key = "message", .data = sg_message, .type = TYPE_TEMPLATE_STRING}, +}; + +static TYPE_DEF_TEMPLATE_FLOAT sg_voltage; +static DeviceProperty g_propertyEvent_low_voltage[] = { + + {.key = "voltage", .data = &sg_voltage, .type = TYPE_TEMPLATE_FLOAT}, +}; + +static TYPE_DEF_TEMPLATE_STRING sg_name[MAX_EVENT_STR_NAME_LEN + 1]; +static TYPE_DEF_TEMPLATE_INT sg_error_code; +static DeviceProperty g_propertyEvent_hardware_fault[] = { + + {.key = "name", .data = sg_name, .type = TYPE_TEMPLATE_STRING}, + {.key = "error_code", .data = &sg_error_code, .type = TYPE_TEMPLATE_INT}, +}; + + +static sEvent g_events[] = { + + { + .event_name = "status_report", + .type = "info", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_status_report) / sizeof(g_propertyEvent_status_report[0]), + .pEventData = g_propertyEvent_status_report, + }, + { + .event_name = "low_voltage", + .type = "alert", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_low_voltage) / sizeof(g_propertyEvent_low_voltage[0]), + .pEventData = g_propertyEvent_low_voltage, + }, + { + .event_name = "hardware_fault", + .type = "fault", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_hardware_fault) / sizeof(g_propertyEvent_hardware_fault[0]), + .pEventData = g_propertyEvent_hardware_fault, + }, +}; + +/*-----------------event config end -------------------*/ + + +static void update_events_timestamp(sEvent *pEvents, int count) +{ + int i; + + for (i = 0; i < count; i++) { + if (NULL == (&pEvents[i])) { + Log_e("null event pointer"); + return; + } +#ifdef EVENT_TIMESTAMP_USED + pEvents[i].timestamp = HAL_Timer_current_sec(); //should be UTC and accurate +#else + pEvents[i].timestamp = 0; +#endif + } +} + +static void event_post_cb(void *pClient, MQTTMessage *msg) +{ + Log_d("recv event reply, clear event"); + IOT_Event_clearFlag(pClient, FLAG_EVENT0); +} + +//event check and post +static void eventPostCheck(void *client) +{ + int i; + int rc; + uint32_t eflag; + uint8_t EventCont; + sEvent *pEventList[EVENT_COUNTS]; + + + eflag = IOT_Event_getFlag(client); + if ((EVENT_COUNTS > 0 ) && (eflag > 0)) { + EventCont = 0; + for (i = 0; i < EVENT_COUNTS; i++) { + if ((eflag & (1 << i))&ALL_EVENTS_MASK) { + pEventList[EventCont++] = &(g_events[i]); + update_events_timestamp(&g_events[i], 1); + } + } + + rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \ + EventCont, pEventList, event_post_cb); + if (rc < 0) { + Log_e("event post failed: %d", rc); + } + } +} + +#endif + +/*action_config.c can be generated by tools/codegen.py -c xx/product.json*/ +/*-----------------action config start -------------------*/ +#ifdef ACTION_ENABLED + +#define TOTAL_ACTION_COUNTS (1) + +static TYPE_DEF_TEMPLATE_INT sg_blink_in_period = 5; +static DeviceProperty g_actionInput_blink[] = { + {.key = "period", .data = &sg_blink_in_period, .type = TYPE_TEMPLATE_INT} +}; +static TYPE_DEF_TEMPLATE_BOOL sg_blink_out_result = 0; +static DeviceProperty g_actionOutput_blink[] = { + + {.key = "result", .data = &sg_blink_out_result, .type = TYPE_TEMPLATE_BOOL}, +}; + +static DeviceAction g_actions[] = { + + { + .pActionId = "blink", + .timestamp = 0, + .input_num = sizeof(g_actionInput_blink) / sizeof(g_actionInput_blink[0]), + .output_num = sizeof(g_actionOutput_blink) / sizeof(g_actionOutput_blink[0]), + .pInput = g_actionInput_blink, + .pOutput = g_actionOutput_blink, + }, +}; +/*-----------------action config end -------------------*/ +static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) +{ + int i; + sReplyPara replyPara; + + //control light blink + int period = 0; + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (!strcmp(pActionInput[i].key, "period")) { + period = *((int*)pActionInput[i].data); + } else { + Log_e("no such input[%s]!", pActionInput[i].key); + } + } + + //do blink + HAL_Printf( "%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_RED); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_GREEN); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]\n" ANSI_COLOR_RESET, ANSI_COLOR_RED); + + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + + DeviceProperty *pActionOutnput = pAction->pOutput; + *(int*)(pActionOutnput[0].data) = 0; //set result + + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); +} + +static int _register_data_template_action(void *pTemplate_client) +{ + int i, rc; + + for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } + } + + return QCLOUD_RET_SUCCESS; +} +#endif + +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_SUBCRIBE_SUCCESS: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +/*add user init code, like sensor init*/ +static void _usr_init(void) +{ + Log_d("add your init code here"); +} + +/*control msg from server will trigger this callback*/ +static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +{ + int i = 0; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { + sg_DataTemplate[i].state = eCHANGED; + Log_i("Property=%s changed", pProperty->key); + sg_control_msg_arrived = true; + return; + } + } + + Log_e("Property=%s changed no match", pProperty->key); +} + +static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) +{ + Log_i("recv report_reply(ack=%d): %s", replyAck, pJsonDocument); +} + + +// register data template properties +static int _register_data_template_property(void *pTemplate_client) +{ + int i, rc; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } + } + + return QCLOUD_RET_SUCCESS; +} + +/*get property state, changed or not*/ +static eDataState get_property_state(void *pProperyData) +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + return sg_DataTemplate[i].state; + } + } + + Log_e("no property matched"); + return eNOCHANGE; +} + + +/*set property state, changed or no change*/ +static void set_propery_state(void *pProperyData, eDataState state) +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + sg_DataTemplate[i].state = state; + break; + } + } +} + +/* demo for light logic deal */ +static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) +{ + int i; + const char * ansi_color = NULL; + const char * ansi_color_name = NULL; + char brightness_bar[] = "||||||||||||||||||||"; + int brightness_bar_len = strlen(brightness_bar); + + /* light color */ + switch (light->m_color) { + case eCOLOR_RED: + ansi_color = ANSI_COLOR_RED; + ansi_color_name = " RED "; + break; + case eCOLOR_GREEN: + ansi_color = ANSI_COLOR_GREEN; + ansi_color_name = "GREEN"; + break; + case eCOLOR_BLUE: + ansi_color = ANSI_COLOR_BLUE; + ansi_color_name = " BLUE"; + break; + default: + ansi_color = ANSI_COLOR_YELLOW; + ansi_color_name = "UNKNOWN"; + break; + } + + + /* light brightness bar */ + brightness_bar_len = (light->m_brightness >= 100) ? brightness_bar_len : (int)((light->m_brightness * brightness_bar_len) / 100); + for (i = brightness_bar_len; i < strlen(brightness_bar); i++) { + brightness_bar[i] = '-'; + } + + if (light->m_light_switch) { + /* light is on , show with the properties*/ + HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color, ansi_color_name, brightness_bar, light->m_name); + } else { + /* light is off */ + HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color_name, brightness_bar, light->m_name); + } + + if (eCHANGED == get_property_state(&light->m_light_switch)) { +#ifdef EVENT_POST_ENABLED + if (light->m_light_switch) { + //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + //strcpy(sg_message,"light on"); + //sg_status = 1; + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light on"); + } else { + //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + //strcpy(sg_message,"light off"); + //sg_status = 0; + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); + } + + //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck + IOT_Event_setFlag(client, FLAG_EVENT0); +#else + Log_d("light switch state changed"); +#endif + } +} + +/*example for cycle report, you can delete this for your needs*/ +static void cycle_report(Timer *reportTimer) +{ + int i; + + if (expired(reportTimer)) { + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + set_propery_state(sg_DataTemplate[i].data_property.data, eCHANGED); + countdown_ms(reportTimer, 5000); + } + } +} + +/*get local property data, like sensor data*/ +static void _refresh_local_property(void) +{ + //add your local property refresh logic, cycle report for example + cycle_report(&sg_reportTimer); +} + +static int find_wait_report_property(DeviceProperty *pReportDataList[]) +{ + int i, j; + + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (eCHANGED == sg_DataTemplate[i].state) { + pReportDataList[j++] = &(sg_DataTemplate[i].data_property); + sg_DataTemplate[i].state = eNOCHANGE; + } + } + + return j; +} + +/* demo for up-stream code */ +static int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) +{ + //refresh local property + _refresh_local_property(); + + /*find propery need report*/ + *pCount = find_wait_report_property(pReportDataList); + + return (*pCount > 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +/*You should get the real info for your device, here just for example*/ +static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) +{ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + DeviceProperty plat_info[] = { + {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, + {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, + {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, + {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, + {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, + {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, + {NULL, NULL, 0} //end + }; + + /*self define info*/ + DeviceProperty self_info[] = { + {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, + {NULL, NULL, 0} //end + }; + + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); +} + + +void* sub_dev1_thread(void *ptr, char *product_id, char *device_name) +{ + + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + sReplyPara replyPara; + int ReportCont; + int rc; + void *pGateWayClient = ptr; + + Log_d("sub_dev1_thread ..."); + + //init connection + TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS; + init_params.product_id = product_id; + init_params.device_name = device_name; + init_params.event_handle.h_fp = event_handler; + + + void *client = IOT_Template_Construct(&init_params, IOT_Gateway_Get_MQTT_Client(pGateWayClient)); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("Cloud Device Construct Failed"); + return NULL; + } + + //usr init + _usr_init(); + + //init data template + _init_data_template(); + + //register data template propertys here + rc = _register_data_template_property(client); + if (rc == QCLOUD_RET_SUCCESS) { + Log_i("Register data template propertys Success"); + } else { + Log_e("Register data template propertys Failed: %d", rc); + return NULL; + } + + //register data template actions here +#ifdef ACTION_ENABLED + rc = _register_data_template_action(client); + if (rc == QCLOUD_RET_SUCCESS) { + Log_i("Register data template actions Success"); + } else { + Log_e("Register data template actions Failed: %d", rc); + return NULL; + } +#endif + + HAL_SleepMs(1000); //wait subcrible ack + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if (QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + return NULL; + } + } else { + Log_e("Get system info fail, err: %d", rc); + } + + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + return NULL; + } else { + Log_d("Get data status success"); + } + + //init a timer for cycle report, you could delete it or not for your needs + InitTimer(&sg_reportTimer); + + while (IOT_Template_IsConnected(client) || QCLOUD_RET_SUCCESS == rc) { + + rc = IOT_Template_Yield_Without_MQTT_Yield(client, 200); + if(QCLOUD_RET_SUCCESS != rc){ + Log_d("Template Yield without mqtt err, rc:%d", rc); + } + + /* handle control msg from server */ + if (sg_control_msg_arrived) { + deal_down_stream_user_logic(client, &sg_ProductData); + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured + + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); + if (rc == QCLOUD_RET_SUCCESS) { + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; + } else { + Log_e("Contol msg reply failed, err: %d", rc); + } + } + + /*report msg to server*/ + /*report the lastest properties's status*/ + if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)) { + + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + + Log_i("data template reporte success"); + } else { + Log_e("data template reporte failed, err: %d", rc); + } + } else { + Log_e("construct reporte data failed, err: %d", rc); + } + + } + +#ifdef EVENT_POST_ENABLED + eventPostCheck(client); +#endif + + HAL_SleepMs(1000); + } + + rc = IOT_Template_Destroy_Except_MQTT(client); + return NULL; +} diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/mqtt/mqtt_sample.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/mqtt/mqtt_sample.c new file mode 100644 index 00000000..ed62bfdb --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/mqtt/mqtt_sample.c @@ -0,0 +1,318 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "utils_getopt.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + + +#ifdef AUTH_MODE_CERT +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file +#endif + + +static DeviceInfo sg_devInfo; +static int sg_count = 0; +static int sg_sub_packet_id = -1; + + +// user's log print callback +static bool log_handler(const char* message) +{ + // return true if print success + return false; +} + +// MQTT event callback +static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, + mqtt_messge->ptopic, + mqtt_messge->payload_len, + mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams* initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + sprintf(sg_cert_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#else + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#endif + + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _mqtt_event_handler; + initParams->event_handle.context = NULL; + + return QCLOUD_RET_SUCCESS; +} + +#define MAX_SIZE_OF_TOPIC_CONTENT 100 +// publish MQTT msg +static int _publish_test_msg(void *client, char *topic_keyword, QoS qos) +{ + char topicName[128] = {0}; + sprintf(topicName, "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, topic_keyword); + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + + char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + + int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"publish_test\", \"count\": \"%d\"}", sg_count++); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + pub_params.payload = topic_content; + pub_params.payload_len = strlen(topic_content); + + return IOT_MQTT_Publish(client, topicName, &pub_params); +} + +// callback when MQTT msg arrives +static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", + (int) message->topic_len, message->ptopic, (int) message->payload_len, (char *) message->payload); +} + +// subscrib MQTT topic +static int _subscribe_topic(void *client, char *topic_keyword, QoS qos) +{ + static char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, topic_keyword); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = on_message_callback; + return IOT_MQTT_Subscribe(client, topic_name, &sub_params); +} + +static bool sg_loop_test = false; +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l")) != EOF) + switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_test = true; + break; + + default: + HAL_Printf("usage: %s [options]\n" + " [-c ] \n" + " [-l ] loop test or not\n" + , argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + int rc; + //init log level + IOT_Log_Set_Level(eLOG_DEBUG); + IOT_Log_Set_MessageHandler(log_handler); + + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + //init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params error, rc = %d", rc); + return rc; + } + + // create MQTT client and connect with server + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + rc = IOT_MQTT_GetErrCode(); + Log_e("MQTT Construct failed, rc = %d", rc); + return QCLOUD_ERR_FAILURE; + } + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + + //subscribe normal topics here + rc = _subscribe_topic(client, "data", QOS0); + if (rc < 0) { + Log_e("Client Subscribe Topic Failed: %d", rc); + return rc; + } + + // wait for subscription result + IOT_MQTT_Yield(client, 500); + + do { + + if (sg_sub_packet_id > 0) { + rc = _publish_test_msg(client, "data", QOS1); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } + } + + rc = IOT_MQTT_Yield(client, 500); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (sg_loop_test) + HAL_SleepMs(1000); + + } while (sg_loop_test); + + rc = IOT_MQTT_Destroy(&client); + + return rc; +} diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/ota/ota_mqtt_sample.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/ota/ota_mqtt_sample.c index 86792ae8..729faf2f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/ota/ota_mqtt_sample.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/ota/ota_mqtt_sample.c @@ -23,8 +23,8 @@ #ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file #endif @@ -36,265 +36,264 @@ static DeviceInfo sg_devInfo; static bool sg_pub_ack = false; static int sg_packet_id = 0; -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); if (sg_packet_id == packet_id) sg_pub_ack = true; - break; + break; - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } /* demo of firmware info management in device side for resuming download from break point */ -#define VERSION_FILE_PATH "./local_fw_info.json" -#define KEY_VER "version" -#define KEY_MD5 "md5" -#define KEY_SIZE "downloadSize" -#define KEY_STATE "state" -#define KEY_PREVER "running_version" +#define VERSION_FILE_PATH "./local_fw_info.json" +#define KEY_VER "version" +#define KEY_MD5 "md5" +#define KEY_SIZE "downloadSize" +#define KEY_STATE "state" +#define KEY_PREVER "running_version" static char * get_local_fw_version(char **ver, char **md5, char **size) { -#define INFO_FILE_MAX_LEN 256 +#define INFO_FILE_MAX_LEN 256 - FILE *fp; - int len; - int rlen; - char *preVer; - char *reportVer = NULL; - - fp = fopen(VERSION_FILE_PATH, "r"); - if(NULL == fp) { + FILE *fp; + int len; + int rlen; + char *preVer; + char *reportVer = NULL; + + fp = fopen(VERSION_FILE_PATH, "r"); + if (NULL == fp) { Log_e("open file %s failed", VERSION_FILE_PATH); - goto exit; + goto exit; } - fseek(fp, 0L, SEEK_END); + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > INFO_FILE_MAX_LEN){ - Log_e("%s is too big, pls check", VERSION_FILE_PATH); - goto exit; - } + if (len > INFO_FILE_MAX_LEN) { + Log_e("%s is too big, pls check", VERSION_FILE_PATH); + goto exit; + } - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } + char *JsonDoc = (char *)HAL_Malloc(len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } + + *ver = LITE_json_value_of(KEY_VER, JsonDoc); + *md5 = LITE_json_value_of(KEY_MD5, JsonDoc); + *size = LITE_json_value_of(KEY_SIZE, JsonDoc); + preVer = LITE_json_value_of(KEY_PREVER, JsonDoc); + + if ((NULL != *ver) && (NULL != preVer) && (0 == strcmp(*ver, preVer))) { + reportVer = *ver; + HAL_Free(preVer); + } else { + reportVer = preVer; + } - *ver = LITE_json_value_of(KEY_VER, JsonDoc); - *md5 = LITE_json_value_of(KEY_MD5, JsonDoc); - *size = LITE_json_value_of(KEY_SIZE, JsonDoc); - preVer = LITE_json_value_of(KEY_PREVER, JsonDoc); - - if((NULL != *ver) && (NULL != preVer) && (0 == strcmp(*ver, preVer))){ - reportVer = *ver; - HAL_Free(preVer); - }else{ - reportVer = preVer; - } - exit: - - if(NULL != fp){ - fclose(fp); - } - return reportVer; -#undef INFO_FILE_MAX_LEN + if (NULL != fp) { + fclose(fp); + } + + return reportVer; +#undef INFO_FILE_MAX_LEN } /* update local firmware info for resuming download from break point */ static int update_local_fw_info(const char *version, const char *preVer, const char *md5, uint32_t downloadedSize) { -#define INFO_FILE_MAX_LEN 256 +#define INFO_FILE_MAX_LEN 256 - FILE *fp; - int wlen; - int ret = QCLOUD_RET_SUCCESS; - char dataBuff[INFO_FILE_MAX_LEN]; + FILE *fp; + int wlen; + int ret = QCLOUD_RET_SUCCESS; + char dataBuff[INFO_FILE_MAX_LEN]; - memset(dataBuff, 0, INFO_FILE_MAX_LEN); - HAL_Snprintf(dataBuff, INFO_FILE_MAX_LEN, "{\"%s\":\"%s\", \"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\"}",\ - KEY_VER, version, KEY_MD5, md5, KEY_SIZE, downloadedSize, \ - KEY_PREVER, (NULL == preVer)?"1.0.0": preVer); + memset(dataBuff, 0, INFO_FILE_MAX_LEN); + HAL_Snprintf(dataBuff, INFO_FILE_MAX_LEN, "{\"%s\":\"%s\", \"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\"}", \ + KEY_VER, version, KEY_MD5, md5, KEY_SIZE, downloadedSize, \ + KEY_PREVER, (NULL == preVer) ? "1.0.0" : preVer); - fp = fopen(VERSION_FILE_PATH, "w"); - if(NULL == fp) { + fp = fopen(VERSION_FILE_PATH, "w"); + if (NULL == fp) { Log_e("open file %s failed", VERSION_FILE_PATH); - ret = QCLOUD_ERR_FAILURE; - goto exit; + ret = QCLOUD_ERR_FAILURE; + goto exit; } - wlen = fwrite(dataBuff, 1, strlen(dataBuff), fp); - if(wlen != strlen(dataBuff)){ - Log_e("save version to file err"); - ret = QCLOUD_ERR_FAILURE; - } - -exit: - - if(NULL != fp){ - fclose(fp); - } + wlen = fwrite(dataBuff, 1, strlen(dataBuff), fp); + if (wlen != strlen(dataBuff)) { + Log_e("save version to file err"); + ret = QCLOUD_ERR_FAILURE; + } - return ret; -#undef INFO_FILE_MAX_LEN +exit: + + if (NULL != fp) { + fclose(fp); + } + + return ret; +#undef INFO_FILE_MAX_LEN } /* get local firmware offset for resuming download from break point */ static int getFwOffset(void *h_ota, char *local_ver, char *local_md5, char *local_size, uint32_t *offset, uint32_t *size_file) { - char version[128], md5sum[33]; - uint32_t local_len; - int Ret; + char version[128], md5sum[33]; + uint32_t local_len; + int Ret; - Ret = IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); - Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, size_file, 4); + Ret = IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); + Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); + Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, size_file, 4); - local_len = (NULL == local_size)?0:atoi(local_size); + local_len = (NULL == local_size) ? 0 : atoi(local_size); - - if((NULL == local_ver)||(NULL == local_md5)||(NULL == local_size)){ - *offset = 0; - } - else if((0 != strcmp(local_ver, version))||(0 != strcmp(local_md5, md5sum))||(local_len > *size_file)){ - *offset = 0; - }else { - *offset = local_len; - } - - return Ret; + + if ((NULL == local_ver) || (NULL == local_md5) || (NULL == local_size)) { + *offset = 0; + } else if ((0 != strcmp(local_ver, version)) || (0 != strcmp(local_md5, md5sum)) || (local_len > *size_file)) { + *offset = 0; + } else { + *offset = local_len; + } + + return Ret; } /* calculate left MD5 for resuming download from break point */ -static int cal_exist_fw_md5(void *h_ota, FILE *fp, size_t size){ +static int cal_exist_fw_md5(void *h_ota, FILE *fp, size_t size) +{ #define BUFF_LEN 1024 - char buff[BUFF_LEN]; - size_t rlen; - int Ret = QCLOUD_RET_SUCCESS; - - while((size > 0) && (!feof(fp))){ - rlen = (size > BUFF_LEN)?BUFF_LEN:size; - if(rlen != fread(buff, 1, rlen, fp)){ - Log_e("read data len not expected"); - Ret = QCLOUD_ERR_FAILURE; - break; - } - IOT_OTA_UpdateClientMd5(h_ota, buff, rlen); - size -= rlen; - } - return Ret; -#undef BUFF_LEN + char buff[BUFF_LEN]; + size_t rlen; + int Ret = QCLOUD_RET_SUCCESS; + + while ((size > 0) && (!feof(fp))) { + rlen = (size > BUFF_LEN) ? BUFF_LEN : size; + if (rlen != fread(buff, 1, rlen, fp)) { + Log_e("read data len not expected"); + Ret = QCLOUD_ERR_FAILURE; + break; + } + IOT_OTA_UpdateClientMd5(h_ota, buff, rlen); + size -= rlen; + } + return Ret; +#undef BUFF_LEN } static int _setup_connect_init_params(MQTTInitParams* initParams) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } -int main(int argc, char **argv) +int main(int argc, char **argv) { IOT_Log_Set_Level(eLOG_DEBUG); int rc; - uint32_t firmware_valid; + uint32_t firmware_valid; char version[128], md5sum[33]; uint32_t len, size_downloaded, size_file; - - int ota_over = 0; + + int ota_over = 0; bool upgrade_fetch_success = true; char buf_ota[OTA_BUF_LEN]; - FILE *fp = NULL; - uint32_t offset = 0; + FILE *fp = NULL; + uint32_t offset = 0; MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } void *client = IOT_MQTT_Construct(&init_params); if (client != NULL) { @@ -310,14 +309,14 @@ int main(int argc, char **argv) return QCLOUD_ERR_FAILURE; } - IOT_MQTT_Yield(client, 1000); //make sure subscribe success - - char *local_ver = NULL, *local_md5 = NULL, *local_size = NULL, *reportVer = NULL; - reportVer = get_local_fw_version(&local_ver, &local_md5, &local_size); - Log_d("local_ver:%s local_md5:%s, local_size:%s", local_ver, local_md5, local_size); - + IOT_MQTT_Yield(client, 1000); //make sure subscribe success + + char *local_ver = NULL, *local_md5 = NULL, *local_size = NULL, *reportVer = NULL; + reportVer = get_local_fw_version(&local_ver, &local_md5, &local_size); + Log_d("local_ver:%s local_md5:%s, local_size:%s", local_ver, local_md5, local_size); + /* Must report version first */ - if (0 > IOT_OTA_ReportVersion(h_ota, (NULL == reportVer)?"1.0.0": reportVer)) { + if (0 > IOT_OTA_ReportVersion(h_ota, (NULL == reportVer) ? "1.0.0" : reportVer)) { Log_e("report OTA version failed"); goto exit; } @@ -326,49 +325,64 @@ int main(int argc, char **argv) Log_i("wait for ota upgrade command..."); IOT_MQTT_Yield(client, 200); - + if (IOT_OTA_IsFetching(h_ota)) { - - /*check pre-download finished or not*/ - /*if version & MD5 is the same,then pre-download not finished,get breakpoint continue download.otherwise the version is new*/ - rc = getFwOffset(h_ota, local_ver, local_md5, local_size, &offset, &size_file); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("get fw offset err,rc:%d",rc); - upgrade_fetch_success = false; + + /*check pre-download finished or not*/ + /*if version & MD5 is the same,then pre-download not finished,get breakpoint continue download.otherwise the version is new*/ + rc = getFwOffset(h_ota, local_ver, local_md5, local_size, &offset, &size_file); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get fw offset err,rc:%d", rc); + upgrade_fetch_success = false; + break; + } + + //finish download but not report state + if(offset == size_file) { + Log_d("download success last time without report!"); + upgrade_fetch_success = true; + + /* get fw information */ + IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); + IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); + size_downloaded = size_file; break; } - + + /*start http connect*/ + rc = IOT_OTA_StartDownload(h_ota, offset, size_file); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("OTA download start err,rc:%d", rc); + upgrade_fetch_success = false; + break; + } + /*cal file md5*/ - //Log_d("Get offset:%d(%x)", offset, offset); - if(offset > 0){ - if (NULL == (fp = fopen("ota.bin", "ab+"))) { - Log_e("open file failed"); - upgrade_fetch_success = false; - break; - } - - if(QCLOUD_RET_SUCCESS != cal_exist_fw_md5(h_ota, fp, offset)){ - Log_e("cal exist fw md5 failed"); - upgrade_fetch_success = false; - break; - } - }else{ - if (NULL == (fp = fopen("ota.bin", "wb+"))) { - Log_e("open file failed"); - upgrade_fetch_success = false; - break; - } - } - - /*set offset and start http connect*/ - fseek(fp, offset, SEEK_SET); - rc = IOT_OTA_StartDownload(h_ota, offset, size_file); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("OTA download start err,rc:%d",rc); - upgrade_fetch_success = false; - break; - } + //Log_d("Get offset:%d(%x)", offset, offset); + if (offset > 0) { + if (NULL == (fp = fopen("ota.bin", "ab+"))) { + Log_e("open file failed"); + upgrade_fetch_success = false; + break; + } + + if (QCLOUD_RET_SUCCESS != cal_exist_fw_md5(h_ota, fp, offset)) { + Log_e("cal exist fw md5 failed"); + upgrade_fetch_success = false; + break; + } + + /*set offset*/ + fseek(fp, offset, SEEK_SET); + } else { + if (NULL == (fp = fopen("ota.bin", "wb+"))) { + Log_e("open file failed"); + upgrade_fetch_success = false; + break; + } + } + do { len = IOT_OTA_FetchYield(h_ota, buf_ota, OTA_BUF_LEN, 1); if (len > 0) { @@ -381,36 +395,36 @@ int main(int argc, char **argv) Log_e("download fail rc=%d", len); upgrade_fetch_success = false; break; - } - fflush(fp); - + } + fflush(fp); + /* get OTA information and update local info */ IOT_OTA_Ioctl(h_ota, IOT_OTAG_FETCHED_SIZE, &size_downloaded, 4); IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, &size_file, 4); IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); - IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - rc = update_local_fw_info(version, reportVer, md5sum, size_downloaded); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("update local fw info err,rc:%d", rc); - } + IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); + rc = update_local_fw_info(version, reportVer, md5sum, size_downloaded); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("update local fw info err,rc:%d", rc); + } IOT_MQTT_Yield(client, 100); - + } while (!IOT_OTA_IsFetchFinish(h_ota)); - - fclose(fp); - fp = NULL; - - /* Must check MD5 match or not */ + + fclose(fp); + fp = NULL; + + /* Must check MD5 match or not */ if (upgrade_fetch_success) { IOT_OTA_Ioctl(h_ota, IOT_OTAG_CHECK_FIRMWARE, &firmware_valid, 4); if (0 == firmware_valid) { Log_e("The firmware is invalid"); upgrade_fetch_success = false; - rc = update_local_fw_info(NULL, reportVer, NULL, 0); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("update local fw info err,rc:%d", rc); - } + rc = update_local_fw_info(NULL, reportVer, NULL, 0); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("update local fw info err,rc:%d", rc); + } } else { Log_i("The firmware is valid"); upgrade_fetch_success = true; @@ -421,89 +435,88 @@ int main(int argc, char **argv) } HAL_SleepMs(2000); - } while(!ota_over); + } while (!ota_over); - if (upgrade_fetch_success) - { - /* begin execute OTA files, should report upgrade begin */ - sg_packet_id = IOT_OTA_ReportUpgradeBegin(h_ota); - if (0 > sg_packet_id) { - Log_e("report OTA begin failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - sg_pub_ack = false; - - //* add your own upgrade logic here*// - //* fw_upgrade..... + if (upgrade_fetch_success) { + /* begin execute OTA files, should report upgrade begin */ + sg_packet_id = IOT_OTA_ReportUpgradeBegin(h_ota); + if (0 > sg_packet_id) { + Log_e("report OTA begin failed error:%d", sg_packet_id); + return QCLOUD_ERR_FAILURE; + } + while (!sg_pub_ack) { + HAL_SleepMs(1000); + IOT_MQTT_Yield(client, 200); + } + sg_pub_ack = false; - if(QCLOUD_RET_SUCCESS == rc){ - /* if upgrade success */ - /* after execute OTA files, should report upgrade result */ - sg_packet_id = IOT_OTA_ReportUpgradeSuccess(h_ota, NULL); - if (0 > sg_packet_id) { - Log_e("report OTA result failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - rc = update_local_fw_info(version, version, md5sum, size_downloaded); // just for example, add your own logic - sg_pub_ack = false; + //* add your own upgrade logic here*// + //* fw_upgrade..... - }else{ - /* if upgrade fail */ - sg_packet_id = IOT_OTA_ReportUpgradeFail(h_ota, NULL); - if (0 > sg_packet_id) { - Log_e("report OTA result failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - rc = update_local_fw_info(NULL, reportVer, NULL, 0); // just for example, add your own logic - sg_pub_ack = false; + if (QCLOUD_RET_SUCCESS == rc) { + /* if upgrade success */ + /* after execute OTA files, should report upgrade result */ + sg_packet_id = IOT_OTA_ReportUpgradeSuccess(h_ota, NULL); + if (0 > sg_packet_id) { + Log_e("report OTA result failed error:%d", sg_packet_id); + return QCLOUD_ERR_FAILURE; + } + while (!sg_pub_ack) { + HAL_SleepMs(1000); + IOT_MQTT_Yield(client, 200); + } + rc = update_local_fw_info(version, version, md5sum, size_downloaded); // just for example, add your own logic + sg_pub_ack = false; - } + } else { + /* if upgrade fail */ + sg_packet_id = IOT_OTA_ReportUpgradeFail(h_ota, NULL); + if (0 > sg_packet_id) { + Log_e("report OTA result failed error:%d", sg_packet_id); + return QCLOUD_ERR_FAILURE; + } + while (!sg_pub_ack) { + HAL_SleepMs(1000); + IOT_MQTT_Yield(client, 200); + } + rc = update_local_fw_info(NULL, reportVer, NULL, 0); // just for example, add your own logic + sg_pub_ack = false; + + } } exit: - if(NULL != fp){ - fclose(fp); - fp = NULL; - } + if (NULL != fp) { + fclose(fp); + fp = NULL; + } - if(NULL != local_ver){ - reportVer = (reportVer == local_ver)?NULL: reportVer; - HAL_Free(local_ver); - local_ver = NULL; - } - - if(NULL != local_md5){ - HAL_Free(local_md5); - local_md5 = NULL; - } + if (NULL != local_ver) { + reportVer = (reportVer == local_ver) ? NULL : reportVer; + HAL_Free(local_ver); + local_ver = NULL; + } - if(NULL != local_size){ - HAL_Free(local_size); - local_size = NULL; - } + if (NULL != local_md5) { + HAL_Free(local_md5); + local_md5 = NULL; + } - if(NULL != reportVer){ - HAL_Free(reportVer); - reportVer = NULL; - } + if (NULL != local_size) { + HAL_Free(local_size); + local_size = NULL; + } + + if (NULL != reportVer) { + HAL_Free(reportVer); + reportVer = NULL; + } IOT_OTA_Destroy(h_ota); IOT_MQTT_Destroy(&client); - + return 0; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/raw_data/raw_data_sample.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/raw_data/raw_data_sample.c new file mode 100644 index 00000000..3dbfc6fe --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/raw_data/raw_data_sample.c @@ -0,0 +1,360 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "utils_getopt.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#define MAGIC_HEAD_NUM 0x55aa +typedef struct _sTestData_ { + uint8_t m_power_switch; + uint8_t m_color; + uint8_t m_brightness; +} sTestData; + +typedef struct _sRawDataFrame_ { + uint16_t magic_head; + uint8_t msg_type; + uint8_t res_byte; + uint32_t clientId; + sTestData data; +} sRawDataFrame; + +typedef enum { + eMSG_REPORT = 0x01, + eMSG_CONTROL = 0x20, + eMSG_DEFAULT = 0xFF, +} eMsgType; + +static uint32_t sg_client_id = 0; +static bool sg_loop_test = false; + + +#ifdef AUTH_MODE_CERT +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file +#endif + + +static DeviceInfo sg_devInfo; +static int sg_sub_packet_id = -1; + + +// user's log print callback +static bool log_handler(const char* message) +{ + // return true if print success + return false; +} + +// MQTT event callback +static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, + mqtt_messge->ptopic, + mqtt_messge->payload_len, + mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams* initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + sprintf(sg_cert_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#else + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#endif + + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _mqtt_event_handler; + initParams->event_handle.context = NULL; + + return QCLOUD_RET_SUCCESS; +} + +static void HexDump(uint8_t *pData, uint16_t len) +{ + int i; + + for (i = 0; i < len; i++) { + if (i % 32 == 0) { + HAL_Printf("\n"); + } + HAL_Printf(" %02X", pData[i]); + } + HAL_Printf("\n"); +} + +// publish raw data msg +static int _publish_raw_data_msg(void *client, QoS qos) +{ + sRawDataFrame raw_data; + + + memset((char *)&raw_data, 0, sizeof(sRawDataFrame)); + raw_data.magic_head = MAGIC_HEAD_NUM; + raw_data.msg_type = eMSG_REPORT; + raw_data.clientId = sg_client_id++; + + srand((unsigned)HAL_GetTimeMs()); + raw_data.data.m_power_switch = 1; + raw_data.data.m_color = rand()%3; + raw_data.data.m_brightness = rand() % 100; + + char topicName[128] = {0}; + sprintf(topicName, "$thing/up/raw/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name); + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + pub_params.payload = &raw_data; + pub_params.payload_len = sizeof(raw_data); + + Log_d("raw_data published dump:"); + HexDump((uint8_t *)&raw_data, sizeof(raw_data)); + + return IOT_MQTT_Publish(client, topicName, &pub_params); +} + +// callback when MQTT msg arrives +static void on_raw_data_message_callback(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) { + return; + } + Log_i("Receive Message With topicName:%.*s, payloadlen:%d", (int) message->topic_len, message->ptopic, (int) message->payload_len); + + Log_d("raw_data reveived dump:"); + HexDump((uint8_t *)message->payload, (int)message->payload_len); +} + +// subscrib MQTT topic +static int _subscribe_raw_data_topic(void *client, QoS qos) +{ + static char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$thing/down/raw/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = on_raw_data_message_callback; + return IOT_MQTT_Subscribe(client, topic_name, &sub_params); +} + +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l")) != EOF) + switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_test = true; + break; + + default: + HAL_Printf("usage: %s [options]\n" + " [-c ] \n" + " [-l ] loop test or not\n" + , argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + int rc; + //init log level + IOT_Log_Set_Level(eLOG_DEBUG); + IOT_Log_Set_MessageHandler(log_handler); + + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + //init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params error, rc = %d", rc); + return rc; + } + + // create MQTT client and connect with server + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + rc = IOT_MQTT_GetErrCode(); + Log_e("MQTT Construct failed, rc = %d", rc); + return QCLOUD_ERR_FAILURE; + } + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + + //subscribe normal topics here + rc = _subscribe_raw_data_topic(client, QOS1); + if (rc < 0) { + Log_e("Client Subscribe raw data topic Failed: %d", rc); + return rc; + } + + // wait for subscription result + IOT_MQTT_Yield(client, 500); + + do { + + if (sg_sub_packet_id > 0) { + rc = _publish_raw_data_msg(client, QOS0); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } + } + + rc = IOT_MQTT_Yield(client, 500); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (sg_loop_test) + HAL_SleepMs(5000); + + } while (sg_loop_test); + + rc = IOT_MQTT_Destroy(&client); + + return rc; +} diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/scenarized/light_data_template_sample.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/scenarized/light_data_template_sample.c index c9cc4c9f..d49160e0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/scenarized/light_data_template_sample.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/samples/scenarized/light_data_template_sample.c @@ -22,11 +22,12 @@ #ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file #endif static DeviceInfo sg_devInfo; +static Timer sg_reportTimer; /* anis color control codes */ @@ -44,24 +45,24 @@ size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_dat /*data_config.c can be generated by tools/codegen.py -c xx/product.json*/ -/*-----------------data config start -------------------*/ +/*-----------------data config start -------------------*/ #define TOTAL_PROPERTY_COUNT 4 -#define MAX_STR_NAME_LEN (64) +#define MAX_STR_NAME_LEN (64) static sDataPoint sg_DataTemplate[TOTAL_PROPERTY_COUNT]; -typedef enum{ - eCOLOR_RED = 0, - eCOLOR_GREEN = 1, - eCOLOR_BLUE = 2, -}eColor; +typedef enum { + eCOLOR_RED = 0, + eCOLOR_GREEN = 1, + eCOLOR_BLUE = 2, +} eColor; typedef struct _ProductDataDefine { - TYPE_DEF_TEMPLATE_BOOL m_light_switch; + TYPE_DEF_TEMPLATE_BOOL m_light_switch; TYPE_DEF_TEMPLATE_ENUM m_color; TYPE_DEF_TEMPLATE_INT m_brightness; - TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN+1]; + TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN + 1]; } ProductDataDefine; static ProductDataDefine sg_ProductData; @@ -69,35 +70,35 @@ static ProductDataDefine sg_ProductData; static void _init_data_template(void) { memset((void *) & sg_ProductData, 0, sizeof(ProductDataDefine)); - - sg_ProductData.m_light_switch = 0; + + sg_ProductData.m_light_switch = 0; sg_DataTemplate[0].data_property.key = "power_switch"; sg_DataTemplate[0].data_property.data = &sg_ProductData.m_light_switch; sg_DataTemplate[0].data_property.type = TYPE_TEMPLATE_BOOL; - sg_ProductData.m_color = eCOLOR_RED; + sg_ProductData.m_color = eCOLOR_RED; sg_DataTemplate[1].data_property.key = "color"; sg_DataTemplate[1].data_property.data = &sg_ProductData.m_color; sg_DataTemplate[1].data_property.type = TYPE_TEMPLATE_ENUM; - sg_ProductData.m_brightness = 0; + sg_ProductData.m_brightness = 0; sg_DataTemplate[2].data_property.key = "brightness"; sg_DataTemplate[2].data_property.data = &sg_ProductData.m_brightness; sg_DataTemplate[2].data_property.type = TYPE_TEMPLATE_INT; - strncpy(sg_ProductData.m_name, sg_devInfo.device_name, MAX_STR_NAME_LEN); - sg_ProductData.m_name[strlen(sg_devInfo.device_name)] = '\0'; + strncpy(sg_ProductData.m_name, sg_devInfo.device_name, MAX_STR_NAME_LEN); + sg_ProductData.m_name[strlen(sg_devInfo.device_name)] = '\0'; sg_DataTemplate[3].data_property.key = "name"; sg_DataTemplate[3].data_property.data = sg_ProductData.m_name; - sg_DataTemplate[3].data_property.data_buff_len = MAX_STR_NAME_LEN; + sg_DataTemplate[3].data_property.data_buff_len = MAX_STR_NAME_LEN; sg_DataTemplate[3].data_property.type = TYPE_TEMPLATE_STRING; }; -/*-----------------data config end -------------------*/ +/*-----------------data config end -------------------*/ /*event_config.c can be generated by tools/codegen.py -c xx/product.json*/ -/*-----------------event config start -------------------*/ +/*-----------------event config start -------------------*/ #ifdef EVENT_POST_ENABLED #define EVENT_COUNTS (3) #define MAX_EVENT_STR_MESSAGE_LEN (64) @@ -105,291 +106,296 @@ static void _init_data_template(void) static TYPE_DEF_TEMPLATE_BOOL sg_status; -static TYPE_DEF_TEMPLATE_STRING sg_message[MAX_EVENT_STR_MESSAGE_LEN+1]; +static TYPE_DEF_TEMPLATE_STRING sg_message[MAX_EVENT_STR_MESSAGE_LEN + 1]; static DeviceProperty g_propertyEvent_status_report[] = { - {.key = "status", .data = &sg_status, .type = TYPE_TEMPLATE_BOOL}, - {.key = "message", .data = sg_message, .type = TYPE_TEMPLATE_STRING}, + {.key = "status", .data = &sg_status, .type = TYPE_TEMPLATE_BOOL}, + {.key = "message", .data = sg_message, .type = TYPE_TEMPLATE_STRING}, }; static TYPE_DEF_TEMPLATE_FLOAT sg_voltage; static DeviceProperty g_propertyEvent_low_voltage[] = { - {.key = "voltage", .data = &sg_voltage, .type = TYPE_TEMPLATE_FLOAT}, + {.key = "voltage", .data = &sg_voltage, .type = TYPE_TEMPLATE_FLOAT}, }; -static TYPE_DEF_TEMPLATE_STRING sg_name[MAX_EVENT_STR_NAME_LEN+1]; +static TYPE_DEF_TEMPLATE_STRING sg_name[MAX_EVENT_STR_NAME_LEN + 1]; static TYPE_DEF_TEMPLATE_INT sg_error_code; static DeviceProperty g_propertyEvent_hardware_fault[] = { - {.key = "name", .data = sg_name, .type = TYPE_TEMPLATE_STRING}, - {.key = "error_code", .data = &sg_error_code, .type = TYPE_TEMPLATE_INT}, + {.key = "name", .data = sg_name, .type = TYPE_TEMPLATE_STRING}, + {.key = "error_code", .data = &sg_error_code, .type = TYPE_TEMPLATE_INT}, }; -static sEvent g_events[]={ +static sEvent g_events[] = { { - .event_name = "status_report", - .type = "info", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_status_report)/sizeof(g_propertyEvent_status_report[0]), - .pEventData = g_propertyEvent_status_report, + .event_name = "status_report", + .type = "info", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_status_report) / sizeof(g_propertyEvent_status_report[0]), + .pEventData = g_propertyEvent_status_report, }, { - .event_name = "low_voltage", - .type = "alert", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_low_voltage)/sizeof(g_propertyEvent_low_voltage[0]), - .pEventData = g_propertyEvent_low_voltage, + .event_name = "low_voltage", + .type = "alert", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_low_voltage) / sizeof(g_propertyEvent_low_voltage[0]), + .pEventData = g_propertyEvent_low_voltage, }, { - .event_name = "hardware_fault", - .type = "fault", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_hardware_fault)/sizeof(g_propertyEvent_hardware_fault[0]), - .pEventData = g_propertyEvent_hardware_fault, + .event_name = "hardware_fault", + .type = "fault", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_hardware_fault) / sizeof(g_propertyEvent_hardware_fault[0]), + .pEventData = g_propertyEvent_hardware_fault, }, }; - -/*-----------------event config end -------------------*/ + +/*-----------------event config end -------------------*/ static void update_events_timestamp(sEvent *pEvents, int count) { - int i; - - for(i = 0; i < count; i++){ - if (NULL == (&pEvents[i])) { - Log_e("null event pointer"); - return; + int i; + + for (i = 0; i < count; i++) { + if (NULL == (&pEvents[i])) { + Log_e("null event pointer"); + return; } -#ifdef EVENT_TIMESTAMP_USED - pEvents[i].timestamp = time(NULL); //should be UTC and accurate +#ifdef EVENT_TIMESTAMP_USED + pEvents[i].timestamp = HAL_Timer_current_sec(); //should be UTC and accurate #else - pEvents[i].timestamp = 0; + pEvents[i].timestamp = 0; #endif - } + } } static void event_post_cb(void *pClient, MQTTMessage *msg) { - Log_d("recv event reply, clear event"); - IOT_Event_clearFlag(pClient, FLAG_EVENT0); + Log_d("recv event reply, clear event"); +// IOT_Event_clearFlag(pClient, FLAG_EVENT0); } //event check and post static void eventPostCheck(void *client) { - int i; - int rc; - uint32_t eflag; - uint8_t EventCont; - sEvent *pEventList[EVENT_COUNTS]; - - - eflag = IOT_Event_getFlag(client); - if((EVENT_COUNTS > 0 )&& (eflag > 0)){ - EventCont = 0; - for(i = 0; i < EVENT_COUNTS; i++){ - if((eflag&(1< 0 ) && (eflag > 0)) { + EventCont = 0; + for (i = 0; i < EVENT_COUNTS; i++) { + if ((eflag & (1 << i))&ALL_EVENTS_MASK) { + pEventList[EventCont++] = &(g_events[i]); + update_events_timestamp(&g_events[i], 1); + IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); + } + } + + rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \ + EventCont, pEventList, event_post_cb); + if (rc < 0) { + Log_e("event post failed: %d", rc); + } + } } #endif /*action_config.c can be generated by tools/codegen.py -c xx/product.json*/ -/*-----------------action config start -------------------*/ +/*-----------------action config start -------------------*/ #ifdef ACTION_ENABLED #define TOTAL_ACTION_COUNTS (1) static TYPE_DEF_TEMPLATE_INT sg_blink_in_period = 5; static DeviceProperty g_actionInput_blink[] = { - {.key = "period", .data = &sg_blink_in_period, .type = TYPE_TEMPLATE_INT} + {.key = "period", .data = &sg_blink_in_period, .type = TYPE_TEMPLATE_INT} }; static TYPE_DEF_TEMPLATE_BOOL sg_blink_out_result = 0; static DeviceProperty g_actionOutput_blink[] = { - {.key = "result", .data = &sg_blink_out_result, .type = TYPE_TEMPLATE_BOOL}, + {.key = "result", .data = &sg_blink_out_result, .type = TYPE_TEMPLATE_BOOL}, }; -static DeviceAction g_actions[]={ +static DeviceAction g_actions[] = { { - .pActionId = "blink", - .timestamp = 0, - .input_num = sizeof(g_actionInput_blink)/sizeof(g_actionInput_blink[0]), - .output_num = sizeof(g_actionOutput_blink)/sizeof(g_actionOutput_blink[0]), - .pInput = g_actionInput_blink, - .pOutput = g_actionOutput_blink, + .pActionId = "blink", + .timestamp = 0, + .input_num = sizeof(g_actionInput_blink) / sizeof(g_actionInput_blink[0]), + .output_num = sizeof(g_actionOutput_blink) / sizeof(g_actionOutput_blink[0]), + .pInput = g_actionInput_blink, + .pOutput = g_actionOutput_blink, }, }; -/*-----------------action config end -------------------*/ -static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) -{ - int i; - sReplyPara replyPara; +/*-----------------action config end -------------------*/ +static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) +{ + int i; + sReplyPara replyPara; - //control light blink - int period = 0; - DeviceProperty *pActionInput = pAction->pInput; - for (i = 0; i < pAction->input_num; i++) { - if(!strcmp(pActionInput[i].key, "period")) { - period = *((int*)pActionInput[i].data); - } else { - Log_e("no such input[%s]!", pActionInput[i].key); - } - } + //control light blink + int period = 0; + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (!strcmp(pActionInput[i].key, "period")) { + period = *((int*)pActionInput[i].data); + } else { + Log_e("no such input[%s]!", pActionInput[i].key); + } + } - //do blink - HAL_Printf( "%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_RED); - HAL_SleepMs(period*1000); - HAL_Printf( "\r%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_GREEN); - HAL_SleepMs(period*1000); - HAL_Printf( "\r%s[lighting blink][****]\n" ANSI_COLOR_RESET, ANSI_COLOR_RED); + //do blink + HAL_Printf( "%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_RED); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_GREEN); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]\n" ANSI_COLOR_RESET, ANSI_COLOR_RED); - // construct output - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault - - DeviceProperty *pActionOutnput = pAction->pOutput; - *(int*)(pActionOutnput[0].data) = 0; //set result + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault - IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); + DeviceProperty *pActionOutnput = pAction->pOutput; + *(int*)(pActionOutnput[0].data) = 0; //set result + + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); } static int _register_data_template_action(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { - rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template action failed, err: %d", rc); - return rc; - } else { - Log_i("data template action=%s registered.", g_actions[i].pActionId); - } + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_SUBCRIBE_SUCCESS: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_TIMEOUT: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_SUBCRIBE_NACK: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } +/*add user init code, like sensor init*/ +static void _usr_init(void) +{ + Log_d("add your init code here"); +} // Setup MQTT construct parameters static int _setup_connect_init_params(TemplateInitParams* initParams) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - /* TLS with certs*/ - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + /* TLS with certs*/ + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } /*control msg from server will trigger this callback*/ -static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) { int i = 0; - for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { sg_DataTemplate[i].state = eCHANGED; - Log_i("Property=%s changed", pProperty->key); + Log_i("Property=%s changed", pProperty->key); sg_control_msg_arrived = true; return; } @@ -398,159 +404,229 @@ static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, ui Log_e("Property=%s changed no match", pProperty->key); } - -static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) { - Log_i("recv report_reply(ack=%d): %s", replyAck,pJsonDocument); +static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) +{ + Log_i("recv report_reply(ack=%d): %s", replyAck, pJsonDocument); } // register data template properties static int _register_data_template_property(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template property failed, err: %d", rc); - return rc; - } else { - Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); - } + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; +} + +/*get property state, changed or not*/ +static eDataState get_property_state(void *pProperyData) +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + return sg_DataTemplate[i].state; + } + } + + Log_e("no property matched"); + return eNOCHANGE; +} + + +/*set property state, changed or no change*/ +static void set_propery_state(void *pProperyData, eDataState state) +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + sg_DataTemplate[i].state = state; + break; + } + } } /* demo for light logic deal */ -static void deal_down_stream_user_logic(void *client,ProductDataDefine *light) +static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) { - int i; + int i; const char * ansi_color = NULL; const char * ansi_color_name = NULL; char brightness_bar[] = "||||||||||||||||||||"; int brightness_bar_len = strlen(brightness_bar); - /* light color */ - switch(light->m_color) { - case eCOLOR_RED: - ansi_color = ANSI_COLOR_RED; - ansi_color_name = " RED "; - break; - case eCOLOR_GREEN: - ansi_color = ANSI_COLOR_GREEN; - ansi_color_name = "GREEN"; - break; - case eCOLOR_BLUE: - ansi_color = ANSI_COLOR_BLUE; - ansi_color_name = " BLUE"; - break; - default: - ansi_color = ANSI_COLOR_YELLOW; - ansi_color_name = "UNKNOWN"; - break; - } + /* light color */ + switch (light->m_color) { + case eCOLOR_RED: + ansi_color = ANSI_COLOR_RED; + ansi_color_name = " RED "; + break; + case eCOLOR_GREEN: + ansi_color = ANSI_COLOR_GREEN; + ansi_color_name = "GREEN"; + break; + case eCOLOR_BLUE: + ansi_color = ANSI_COLOR_BLUE; + ansi_color_name = " BLUE"; + break; + default: + ansi_color = ANSI_COLOR_YELLOW; + ansi_color_name = "UNKNOWN"; + break; + } - /* light brightness bar */ - brightness_bar_len = (light->m_brightness >= 100)?brightness_bar_len:(int)((light->m_brightness * brightness_bar_len)/100); + /* light brightness bar */ + brightness_bar_len = (light->m_brightness >= 100) ? brightness_bar_len : (int)((light->m_brightness * brightness_bar_len) / 100); for (i = brightness_bar_len; i < strlen(brightness_bar); i++) { brightness_bar[i] = '-'; } - if(light->m_light_switch){ - /* light is on , show with the properties*/ - HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET,\ - ansi_color,ansi_color_name,brightness_bar,light->m_name); - }else{ - /* light is off */ - HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET,\ - ansi_color_name,brightness_bar,light->m_name); - } - -#ifdef EVENT_POST_ENABLED - if(eCHANGED == sg_DataTemplate[0].state){ - if(light->m_light_switch){ - memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); - strcpy(sg_message,"light on"); - sg_status = 1; - }else{ - memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); - strcpy(sg_message,"light off"); - sg_status = 0; - } - IOT_Event_setFlag(client, FLAG_EVENT0); - } -#endif + if (light->m_light_switch) { + /* light is on , show with the properties*/ + HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color, ansi_color_name, brightness_bar, light->m_name); + } else { + /* light is off */ + HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color_name, brightness_bar, light->m_name); + } + + if (eCHANGED == get_property_state(&light->m_light_switch)) { +#ifdef EVENT_POST_ENABLED + if (light->m_light_switch) { + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light on"); + } else { + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); + } + + //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck + IOT_Event_setFlag(client, FLAG_EVENT0); +#else + Log_d("light switch state changed"); +#endif + } +} + +/*example for cycle report, you can delete this for your needs*/ +static void cycle_report(Timer *reportTimer) +{ + int i; + + if (expired(reportTimer)) { + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + set_propery_state(sg_DataTemplate[i].data_property.data, eCHANGED); + countdown_ms(reportTimer, 5000); + } + } +} + +/*get local property data, like sensor data*/ +static void _refresh_local_property(void) +{ + //add your local property refresh logic, cycle report for example + cycle_report(&sg_reportTimer); +} + +/*find propery need report*/ +static int find_wait_report_property(DeviceProperty *pReportDataList[]) +{ + int i, j; + + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (eCHANGED == sg_DataTemplate[i].state) { + pReportDataList[j++] = &(sg_DataTemplate[i].data_property); + sg_DataTemplate[i].state = eNOCHANGE; + } + } + + return j; } /* demo for up-stream code */ static int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) { - int i, j; - - for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { - if(eCHANGED == sg_DataTemplate[i].state) { - pReportDataList[j++] = &(sg_DataTemplate[i].data_property); - sg_DataTemplate[i].state = eNOCHANGE; - } - } - *pCount = j; + //refresh local property + _refresh_local_property(); - return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; + /*find propery need report*/ + *pCount = find_wait_report_property(pReportDataList); + + return (*pCount > 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } /*You should get the real info for your device, here just for example*/ static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) { - /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ DeviceProperty plat_info[] = { - {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, - {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, - {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, - {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, - {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, - {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, + {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, + {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, + {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, + {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, + {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, + {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, {NULL, NULL, 0} //end - }; - - /*self define info*/ - DeviceProperty self_info[] = { + }; + + /*self define info*/ + DeviceProperty self_info[] = { {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, {NULL, NULL, 0} //end - }; + }; - return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); } -/*example for cycle report*/ -int cycle_report(DeviceProperty *pReportDataList[], Timer *reportTimer) +#ifdef MULTITHREAD_ENABLED +static void *template_yield_thread(void *ptr) { - int i; +#define THREAD_SLEEP_INTERVAL_MS 1 + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; - if(expired(reportTimer)){ - for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - pReportDataList[i] = &(sg_DataTemplate[i].data_property); - countdown_ms(reportTimer, 5000); - } - return QCLOUD_RET_SUCCESS; - }else{ - - return QCLOUD_ERR_INVAL; - } + Log_d("template yield thread start ..."); + while (true) { + rc = IOT_Template_Yield(pClient, 200); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("Something goes error: %d", rc); + } + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + } + return NULL; +#undef THREAD_SLEEP_INTERVAL_MS } +#endif + +int main(int argc, char **argv) +{ + + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + sReplyPara replyPara; + int ReportCont; + int rc; + -int main(int argc, char **argv) { - - DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; - sReplyPara replyPara; - int ReportCont; - Timer reportTimer; - int rc; - - //init log level IOT_Log_Set_Level(eLOG_DEBUG); @@ -558,11 +634,11 @@ int main(int argc, char **argv) { TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS; rc = _setup_connect_init_params(&init_params); if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + Log_e("init params err,rc=%d", rc); + return rc; + } - void *client = IOT_Template_Construct(&init_params); + void *client = IOT_Template_Construct(&init_params, NULL); if (client != NULL) { Log_i("Cloud Device Construct Success"); } else { @@ -570,139 +646,130 @@ int main(int argc, char **argv) { return QCLOUD_ERR_FAILURE; } +#ifdef MULTITHREAD_ENABLED + pthread_t *yield_thread_t = NULL; + yield_thread_t = HAL_ThreadCreate(0, 0, "template_yield_thread", template_yield_thread, client); + if (yield_thread_t == NULL) { + Log_e("create yield thread fail"); + goto exit; + } +#endif + + //usr init + _usr_init(); + //init data template _init_data_template(); - //register data template propertys here rc = _register_data_template_property(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template propertys Success"); } else { Log_e("Register data template propertys Failed: %d", rc); - return rc; + goto exit; } - //register data template actions here + //register data template actions here #ifdef ACTION_ENABLED rc = _register_data_template_action(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template actions Success"); } else { Log_e("Register data template actions Failed: %d", rc); - return rc; + goto exit; } #endif - //report device info, then you can manager your product by these info, like position - rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); - if(QCLOUD_RET_SUCCESS == rc){ - rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Report system info fail, err: %d", rc); - return rc; - } - }else{ - Log_e("Get system info fail, err: %d", rc); - } + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if (QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + } + } else { + Log_e("Get system info fail, err: %d", rc); + } - //get the property changed during offline - rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Get data status fail, err: %d", rc); - return rc; - }else{ - Log_d("Get data status success"); - } + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + } else { + Log_d("Get data status success"); + } - //init a timer for cycle report, you could delete it or not for your needs - InitTimer(&reportTimer); - - while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT - || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { + //init a timer for cycle report, you could delete it or not for your needs + InitTimer(&sg_reportTimer); + while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT + || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { +#ifndef MULTITHREAD_ENABLED rc = IOT_Template_Yield(client, 200); - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { HAL_SleepMs(1000); continue; + } else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } +#endif + /* handle control msg from server */ + if (sg_control_msg_arrived) { + deal_down_stream_user_logic(client, &sg_ProductData); + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - /* handle control msg from server */ - if (sg_control_msg_arrived) { - - deal_down_stream_user_logic(client, &sg_ProductData); - - /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - - rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); if (rc == QCLOUD_RET_SUCCESS) { - Log_d("Contol msg reply success"); - sg_control_msg_arrived = false; + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; } else { Log_e("Contol msg reply failed, err: %d", rc); - } - } else{ - //Log_d("No control msg received..."); - } + } + } - /*report msg to server*/ - /*report the lastest properties's status*/ - if(QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)){ - - rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); - if (rc == QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, - OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc == QCLOUD_RET_SUCCESS) { - - Log_i("data template reporte success"); - } else { - Log_e("data template reporte failed, err: %d", rc); - } - } else { - Log_e("construct reporte data failed, err: %d", rc); - } + /*report msg to server*/ + /*report the lastest properties's status*/ + if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)) { - }else{ - //Log_d("no data need to be reported or someting goes wrong"); - } - - /*example for cycle report, you can delete this for your needs*/ - if(QCLOUD_RET_SUCCESS == cycle_report(pReportDataList, &reportTimer)){ - rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, TOTAL_PROPERTY_COUNT, pReportDataList); - if (rc == QCLOUD_RET_SUCCESS) { - //Log_d("cycle report:%s",sg_data_report_buffer); - rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, - OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc == QCLOUD_RET_SUCCESS) { - Log_d("cycle reporte success"); - } else { - Log_e("cycle reporte failed, err: %d", rc); - } - } else { - Log_e("construct reported failed, err: %d", rc); - } + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { - } - -#ifdef EVENT_POST_ENABLED - eventPostCheck(client); + Log_i("data template reporte success"); + } else { + Log_e("data template reporte failed, err: %d", rc); + } + } else { + Log_e("construct reporte data failed, err: %d", rc); + } + + } + +#ifdef EVENT_POST_ENABLED + eventPostCheck(client); #endif HAL_SleepMs(1000); } +exit: + rc = IOT_Template_Destroy(client); +#ifdef MULTITHREAD_ENABLED + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } +#endif + return rc; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/CMakeLists.txt b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/CMakeLists.txt index b5dcad95..5561b581 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/CMakeLists.txt +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/CMakeLists.txt @@ -1,4 +1,3 @@ -# �������ã�������Ҫ�����Դ�ļ� # UTILS file(GLOB src_utils ${CMAKE_CURRENT_SOURCE_DIR}/utils/*.c) @@ -11,6 +10,12 @@ list(APPEND src_sdk ${src_mqtt}) file(GLOB src_data_template ${CMAKE_CURRENT_SOURCE_DIR}/services/data_template/*.c) list(APPEND src_sdk ${src_data_template}) +# gateway +if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON") + file(GLOB src_gateway ${CMAKE_CURRENT_SOURCE_DIR}/services/gateway/*.c) + list(APPEND src_sdk ${src_gateway}) +endif() + # ota mqtt if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") file(GLOB src_mqtt_ota @@ -52,7 +57,7 @@ file(GLOB src_network ${CMAKE_CURRENT_SOURCE_DIR}/network/*.c) list(APPEND src_sdk ${src_network}) -# ���ɿ⣬��ȡԴ�� +# code output if(${EXTRACT_SRC} STREQUAL "ON") file(COPY ${src_sdk} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/sdk_src/) endif() diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h index b33f8462..f3334a27 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h @@ -40,7 +40,7 @@ extern "C" { #define MAX_CONN_ID_LEN (6) /* Max number of topic subscribed */ -#define MAX_MESSAGE_HANDLERS (10) +#define MAX_MESSAGE_HANDLERS (20) /* Max number in repub list */ #define MAX_REPUB_NUM (20) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h index bfd9c608..e052289e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h @@ -81,7 +81,7 @@ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]); * @brief Output = MD5( input buffer ) * * @param input data input - * @param ilen data length + * @param ilen data lenght * @param output MD5 result */ void utils_md5(const unsigned char *input, size_t ilen, unsigned char output[16]); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_client.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_client.c index 17970b90..77dcc75a 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_client.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_client.c @@ -31,14 +31,14 @@ #define AT_RESP_END_FAIL "FAIL" #define AT_END_CR_LF "\r\n" -sRingbuff g_ring_buff; +sRingbuff g_ring_buff; static at_client sg_at_client; static uint32_t sg_flags = 0; /*this function can be called only by at_uart_isr, just push the data to the at_client ringbuffer.*/ void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len) { - (void)ring_buff_push_data(&g_ring_buff, pdata, len); + (void)ring_buff_push_data(&g_ring_buff, pdata, len); } /** @@ -46,38 +46,36 @@ void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len) * * @param buf_size the maximum response buffer size * @param line_num the number of setting response lines - * = 0: the response data will auto return when received 'OK' or 'eLOG_ERROR' - * != 0: the response data will return when received setting lines number data + * = 0: the response data will auto return when received 'OK' or 'eLOG_ERROR' + * != 0: the response data will return when received setting lines number data * @param timeout the maximum response time * * @return != NULL: response object - * = NULL: no memory + * = NULL: no memory */ at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t timeout) { - at_response_t resp = NULL; + at_response_t resp = NULL; - resp = (at_response_t) HAL_Malloc(sizeof(at_response)); - if (resp == NULL) - { - Log_e("AT create response object failed! No memory for response object!"); - return NULL; - } + resp = (at_response_t) HAL_Malloc(sizeof(at_response)); + if (resp == NULL) { + Log_e("AT create response object failed! No memory for response object!"); + return NULL; + } - resp->buf = (char *) HAL_Malloc(buf_size); - if (resp->buf == NULL) - { - Log_e("AT create response object failed! No memory for response buffer!"); - HAL_Free(resp); - return NULL; - } + resp->buf = (char *) HAL_Malloc(buf_size); + if (resp->buf == NULL) { + Log_e("AT create response object failed! No memory for response buffer!"); + HAL_Free(resp); + return NULL; + } - resp->buf_size = buf_size; - resp->line_num = line_num; - resp->line_counts = 0; - resp->timeout = timeout; + resp->buf_size = buf_size; + resp->line_num = line_num; + resp->line_counts = 0; + resp->timeout = timeout; - return resp; + return resp; } /** @@ -87,13 +85,11 @@ at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t time */ void at_delete_resp(at_response_t resp) { - if (resp && resp->buf) - { + if (resp && resp->buf) { HAL_Free(resp->buf); } - if (resp) - { + if (resp) { HAL_Free(resp); resp = NULL; } @@ -102,43 +98,43 @@ void at_delete_resp(at_response_t resp) void at_delayms(uint32_t delayms) { #ifdef AT_OS_USED - HAL_SleepMs(delayms); + HAL_SleepMs(delayms); #else - HAL_DelayMs(delayms); + HAL_DelayMs(delayms); #endif } void at_setFlag(uint32_t flag) { - sg_flags |= flag&0xffffffff; + sg_flags |= flag & 0xffffffff; } void at_clearFlag(uint32_t flag) { - sg_flags &= (~flag)&0xffffffff; + sg_flags &= (~flag) & 0xffffffff; } uint32_t at_getFlag(void) { - return sg_flags; + return sg_flags; } bool at_waitFlag(uint32_t flag, uint32_t timeout) { - Timer timer; - bool Ret = false; - - countdown_ms(&timer, timeout); - do{ - if(flag == (at_getFlag()&flag)){ - Ret = true; - break; - } - at_delayms(1); - }while(!expired(&timer)); + Timer timer; + bool Ret = false; - return Ret; + countdown_ms(&timer, timeout); + do { + if (flag == (at_getFlag()&flag)) { + Ret = true; + break; + } + at_delayms(1); + } while (!expired(&timer)); + + return Ret; } /** @@ -148,35 +144,32 @@ bool at_waitFlag(uint32_t flag, uint32_t timeout) * @param resp_line line number, start from '1' * * @return != NULL: response line buffer - * = NULL: input response line error + * = NULL: input response line error */ const char *at_resp_get_line(at_response_t resp, uint32_t resp_line) { - char *resp_buf = resp->buf; - char *resp_line_buf = NULL; - int line_num = 1; + char *resp_buf = resp->buf; + char *resp_line_buf = NULL; + int line_num = 1; - POINTER_SANITY_CHECK(resp, NULL); + POINTER_SANITY_CHECK(resp, NULL); - if (resp_line > resp->line_counts || resp_line <= 0) - { - Log_e("AT response get line failed! Input response line(%d) error!", resp_line); - return NULL; - } + if (resp_line > resp->line_counts || resp_line <= 0) { + Log_e("AT response get line failed! Input response line(%d) error!", resp_line); + return NULL; + } - for (line_num = 1; line_num <= resp->line_counts; line_num++) - { - if (resp_line == line_num) - { - resp_line_buf = resp_buf; + for (line_num = 1; line_num <= resp->line_counts; line_num++) { + if (resp_line == line_num) { + resp_line_buf = resp_buf; - return resp_line_buf; - } + return resp_line_buf; + } - resp_buf += strlen(resp_buf) + 1; - } + resp_buf += strlen(resp_buf) + 1; + } - return NULL; + return NULL; } /** @@ -186,30 +179,28 @@ const char *at_resp_get_line(at_response_t resp, uint32_t resp_line) * @param keyword query keyword * * @return != NULL: response line buffer - * = NULL: no matching data + * = NULL: no matching data */ const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword) { - char *resp_buf = resp->buf; - char *resp_line_buf = NULL; - int line_num = 1; + char *resp_buf = resp->buf; + char *resp_line_buf = NULL; + int line_num = 1; - POINTER_SANITY_CHECK(resp, NULL); - POINTER_SANITY_CHECK(keyword, NULL); + POINTER_SANITY_CHECK(resp, NULL); + POINTER_SANITY_CHECK(keyword, NULL); - for (line_num = 1; line_num <= resp->line_counts; line_num++) - { - if (strstr(resp_buf, keyword)) - { - resp_line_buf = resp_buf; + for (line_num = 1; line_num <= resp->line_counts; line_num++) { + if (strstr(resp_buf, keyword)) { + resp_line_buf = resp_buf; - return resp_line_buf; - } + return resp_line_buf; + } - resp_buf += strlen(resp_buf) + 1; - } + resp_buf += strlen(resp_buf) + 1; + } - return NULL; + return NULL; } /** @@ -220,30 +211,29 @@ const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword) * @param resp_expr response buffer expression * * @return -1 : input response line number error or get line buffer error - * 0 : parsed without match - * >0 : the number of arguments successfully parsed + * 0 : parsed without match + * >0 : the number of arguments successfully parsed */ int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char *resp_expr, ...) { - va_list args; - int resp_args_num = 0; - const char *resp_line_buf = NULL; + va_list args; + int resp_args_num = 0; + const char *resp_line_buf = NULL; - POINTER_SANITY_CHECK(resp, -1); - POINTER_SANITY_CHECK(resp_expr, -1); - if ((resp_line_buf = at_resp_get_line(resp, resp_line)) == NULL) - { - return -1; - } + POINTER_SANITY_CHECK(resp, -1); + POINTER_SANITY_CHECK(resp_expr, -1); + if ((resp_line_buf = at_resp_get_line(resp, resp_line)) == NULL) { + return -1; + } - va_start(args, resp_expr); + va_start(args, resp_expr); - resp_args_num = vsscanf(resp_line_buf, resp_expr, args); + resp_args_num = vsscanf(resp_line_buf, resp_expr, args); - va_end(args); + va_end(args); - return resp_args_num; + return resp_args_num; } /** @@ -254,30 +244,29 @@ int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char * * @param resp_expr response buffer expression * * @return -1 : input keyword error or get line buffer error - * 0 : parsed without match - * >0 : the number of arguments successfully parsed + * 0 : parsed without match + * >0 : the number of arguments successfully parsed */ int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...) { - va_list args; - int resp_args_num = 0; - const char *resp_line_buf = NULL; + va_list args; + int resp_args_num = 0; + const char *resp_line_buf = NULL; - POINTER_SANITY_CHECK(resp, -1); - POINTER_SANITY_CHECK(resp_expr, -1); - if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == NULL) - { - return -1; - } + POINTER_SANITY_CHECK(resp, -1); + POINTER_SANITY_CHECK(resp_expr, -1); + if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == NULL) { + return -1; + } - va_start(args, resp_expr); + va_start(args, resp_expr); - resp_args_num = vsscanf(resp_line_buf, resp_expr, args); + resp_args_num = vsscanf(resp_line_buf, resp_expr, args); - va_end(args); + va_end(args); - return resp_args_num; + return resp_args_num; } /** @@ -288,206 +277,189 @@ int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const * @param cmd_expr AT commands expression * * @return 0 : success - * -1 : response status error - * -2 : wait timeout + * -1 : response status error + * -2 : wait timeout */ int at_obj_exec_cmd(at_response_t resp, const char *cmd_expr, ...) { - POINTER_SANITY_CHECK(cmd_expr, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(cmd_expr, QCLOUD_ERR_INVAL); - va_list args; - int cmd_size = 0; - int result = QCLOUD_RET_SUCCESS; - const char *cmd = NULL; - at_client_t client = at_client_get(); - + va_list args; + int cmd_size = 0; + int result = QCLOUD_RET_SUCCESS; + const char *cmd = NULL; + at_client_t client = at_client_get(); - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return QCLOUD_ERR_FAILURE; - } - HAL_MutexLock(client->lock); - resp->line_counts = 0; - client->resp_status = AT_RESP_OK; - client->resp = resp; + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return QCLOUD_ERR_FAILURE; + } - va_start(args, cmd_expr); - at_vprintfln(cmd_expr, args); - va_end(args); + HAL_MutexLock(client->lock); + resp->line_counts = 0; + client->resp_status = AT_RESP_OK; + client->resp = resp; - if (resp != NULL) - { + va_start(args, cmd_expr); + at_vprintfln(cmd_expr, args); + va_end(args); + + if (resp != NULL) { #ifndef AT_OS_USED - client->resp_status = AT_RESP_TIMEOUT; - at_client_yeild(NULL, resp->timeout); - if (client->resp_status != AT_RESP_OK) - { - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } + client->resp_status = AT_RESP_TIMEOUT; + at_client_yeild(NULL, resp->timeout); + if (client->resp_status != AT_RESP_OK) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } #else - if(HAL_SemaphoreWait(client->resp_sem, resp->timeout) < 0){ - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } + if (HAL_SemaphoreWait(client->resp_sem, resp->timeout) < 0) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } - if (client->resp_status != AT_RESP_OK) - { - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } -#endif - } + if (client->resp_status != AT_RESP_OK) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } +#endif + } __exit: - client->resp = NULL; - HAL_MutexUnlock(client->lock); - - return result; + client->resp = NULL; + HAL_MutexUnlock(client->lock); + + return result; } /** * Send data to AT server, send data don't have end sign(eg: \r\n). * * @param client current AT client object - * @param buf send data buffer - * @param size send fixed data size - * @param timeout timeout for send + * @param buf send data buffer + * @param size send fixed data size + * @param timeout timeout for send * * @return >0: send data size - * =0: send failed + * =0: send failed */ int at_client_send(at_client_t client, const char *buf, int size, uint32_t timeout) { - POINTER_SANITY_CHECK(buf, 0); + POINTER_SANITY_CHECK(buf, 0); - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return 0; - } + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return 0; + } #ifdef AT_DEBUG - at_print_raw_cmd("send", buf, size); + at_print_raw_cmd("send", buf, size); #endif - return HAL_AT_Uart_Send((void *)buf, size); + return HAL_AT_Uart_Send((void *)buf, size); } static int at_client_getchar(at_client_t client, char *pch, uint32_t timeout) { - int ret = QCLOUD_RET_SUCCESS; - Timer timer; + int ret = QCLOUD_RET_SUCCESS; + Timer timer; - countdown_ms(&timer, timeout); - do - { + countdown_ms(&timer, timeout); + do { -#ifndef AT_UART_RECV_IRQ - if(0 == HAL_AT_Uart_Recv((void *)pch, 1, NULL, timeout)) - { - continue; - } +#ifndef AT_UART_RECV_IRQ + if (0 == HAL_AT_Uart_Recv((void *)pch, 1, NULL, timeout)) { + continue; + } #else - if(0 == ring_buff_pop_data(client->pRingBuff, (uint8_t *)pch, 1)) //push data to ringbuff @ AT_UART_IRQHandler - { - continue; - } -#endif - else - { - break; - } + if (0 == ring_buff_pop_data(client->pRingBuff, (uint8_t *)pch, 1)) { //push data to ringbuff @ AT_UART_IRQHandler + continue; + } +#endif + else { + break; + } } while (!expired(&timer)); - if(expired(&timer)) - { - ret = QCLOUD_ERR_FAILURE; - } - - return ret; + if (expired(&timer)) { + ret = QCLOUD_ERR_FAILURE; + } + + return ret; } /** * AT client receive fixed-length data. * * @param client current AT client object - * @param buf receive data buffer - * @param size receive fixed data size + * @param buf receive data buffer + * @param size receive fixed data size * @param timeout receive data timeout (ms) * * @note this function can only be used in execution function of URC data * * @return >0: receive data size - * =0: receive failed + * =0: receive failed */ int at_client_obj_recv(char *buf, int size, int timeout) { - int read_idx = 0; - int result = QCLOUD_RET_SUCCESS; - char ch; + int read_idx = 0; + int result = QCLOUD_RET_SUCCESS; + char ch; - POINTER_SANITY_CHECK(buf, 0); - at_client_t client = at_client_get(); + POINTER_SANITY_CHECK(buf, 0); + at_client_t client = at_client_get(); - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return 0; - } + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return 0; + } - while (1) - { - if (read_idx < size) - { - result = at_client_getchar(client, &ch, timeout); - if (result != QCLOUD_RET_SUCCESS) - { - Log_e("AT Client receive failed, uart device get data error(%d)", result); - return 0; - } + while (1) { + if (read_idx < size) { + result = at_client_getchar(client, &ch, timeout); + if (result != QCLOUD_RET_SUCCESS) { + Log_e("AT Client receive failed, uart device get data error(%d)", result); + return 0; + } - buf[read_idx++] = ch; - } - else - { - break; - } - } + buf[read_idx++] = ch; + } else { + break; + } + } #ifdef AT_DEBUG - at_print_raw_cmd("urc_recv", buf, size); + at_print_raw_cmd("urc_recv", buf, size); #endif - return read_idx; + return read_idx; } /** - * AT client set end sign. + * AT client set end sign. * * @param client current AT client object * @param ch the end sign, can not be used when it is '\0' */ void at_set_end_sign(char ch) { - at_client_t client = at_client_get(); - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return; - } + at_client_t client = at_client_get(); - client->end_sign = ch; + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return; + } + + client->end_sign = ch; } /** @@ -499,22 +471,20 @@ void at_set_end_sign(char ch) */ void at_set_urc_table(at_client_t client, const at_urc_t urc_table, uint32_t table_sz) { - int idx; + int idx; - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return; - } + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return; + } - for (idx = 0; idx < table_sz; idx++) - { - POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_prefix); - POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_suffix); - } + for (idx = 0; idx < table_sz; idx++) { + POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_prefix); + POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_suffix); + } - client->urc_table = urc_table; - client->urc_table_size = table_sz; + client->urc_table = urc_table; + client->urc_table_size = table_sz; } at_client_t at_client_get(void) @@ -524,366 +494,300 @@ at_client_t at_client_get(void) static const at_urc *get_urc_obj(at_client_t client) { - int i, prefix_len, suffix_len; - int buf_sz; - char *buffer = NULL; + int i, prefix_len, suffix_len; + int buf_sz; + char *buffer = NULL; - if (client->urc_table == NULL) - { - return NULL; - } + if (client->urc_table == NULL) { + return NULL; + } - buffer = client->recv_buffer; - buf_sz = client->cur_recv_len; + buffer = client->recv_buffer; + buf_sz = client->cur_recv_len; - for (i = 0; i < client->urc_table_size; i++) - { - prefix_len = strlen(client->urc_table[i].cmd_prefix); - suffix_len = strlen(client->urc_table[i].cmd_suffix); - if (buf_sz < prefix_len + suffix_len) - { - continue; - } - if ((prefix_len ? !strncmp(buffer, client->urc_table[i].cmd_prefix, prefix_len) : 1) - && (suffix_len ? !strncmp(buffer + buf_sz - suffix_len, client->urc_table[i].cmd_suffix, suffix_len) : 1)) - { - //Log_d("matched:%s", client->urc_table[i].cmd_prefix); - return &client->urc_table[i]; - } - } + for (i = 0; i < client->urc_table_size; i++) { + prefix_len = strlen(client->urc_table[i].cmd_prefix); + suffix_len = strlen(client->urc_table[i].cmd_suffix); + if (buf_sz < prefix_len + suffix_len) { + continue; + } + if ((prefix_len ? !strncmp(buffer, client->urc_table[i].cmd_prefix, prefix_len) : 1) + && (suffix_len ? !strncmp(buffer + buf_sz - suffix_len, client->urc_table[i].cmd_suffix, suffix_len) : 1)) { + //Log_d("matched:%s", client->urc_table[i].cmd_prefix); + return &client->urc_table[i]; + } + } - return NULL; + return NULL; } static int at_recv_readline(at_client_t client) { - int read_len = 0; - char ch = 0, last_ch = 0; - bool is_full = false; - int ret; + int read_len = 0; + char ch = 0, last_ch = 0; + bool is_full = false; + int ret; - memset(client->recv_buffer, 0x00, client->recv_bufsz); - client->cur_recv_len = 0; + memset(client->recv_buffer, 0x00, client->recv_bufsz); + client->cur_recv_len = 0; - while (1) - { - ret = at_client_getchar(client, &ch, GET_CHAR_TIMEOUT_MS); - - if(QCLOUD_RET_SUCCESS != ret) - { - return -1; - } + while (1) { + ret = at_client_getchar(client, &ch, GET_CHAR_TIMEOUT_MS); - if (read_len < client->recv_bufsz) - { - client->recv_buffer[read_len++] = ch; - client->cur_recv_len = read_len; - } - else - { - is_full = true; - } - - /* is newline or URC data */ - if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign) || get_urc_obj(client)) - { - - if (is_full) - { - Log_e("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); - memset(client->recv_buffer, 0x00, client->recv_bufsz); - client->cur_recv_len = 0; - ring_buff_flush(client->pRingBuff); - return -1; - } - break; - } - last_ch = ch; - } + if (QCLOUD_RET_SUCCESS != ret) { + return -1; + } + + if (read_len < client->recv_bufsz) { + client->recv_buffer[read_len++] = ch; + client->cur_recv_len = read_len; + } else { + is_full = true; + } + + /* is newline or URC data */ + if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign) || get_urc_obj(client)) { + + if (is_full) { + Log_e("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); + memset(client->recv_buffer, 0x00, client->recv_bufsz); + client->cur_recv_len = 0; + ring_buff_flush(client->pRingBuff); + return -1; + } + break; + } + last_ch = ch; + } #ifdef AT_DEBUG - at_print_raw_cmd("recvline", client->recv_buffer, read_len); + at_print_raw_cmd("recvline", client->recv_buffer, read_len); #endif - return read_len; + return read_len; } #ifdef AT_OS_USED static void *client_parser(void *userContex) { - int resp_buf_len = 0; - const at_urc *urc; - int line_counts = 0; - at_client_t client = at_client_get(); + int resp_buf_len = 0; + const at_urc *urc; + int line_counts = 0; + at_client_t client = at_client_get(); - Log_d("client_parser start..."); - - while(1) - { - if (at_recv_readline(client) > 0) - { - -#ifdef AT_DEBUG - const char *cmd = NULL; - int cmdsize = 0; - cmd = at_get_last_cmd(&cmdsize); - Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); -#endif - if ((urc = get_urc_obj(client)) != NULL) - { - /* current receive is request, try to execute related operations */ - if (urc->func != NULL) - { - urc->func(client->recv_buffer, client->cur_recv_len); - } + Log_d("client_parser start..."); - } - else if (client->resp != NULL) - { - if(client->end_sign != 0) // handle endsign - { - if(client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) - { - continue; - } - else - { - goto exit; - } - } + while (1) { + if (at_recv_readline(client) > 0) { - /* current receive is response */ - client->recv_buffer[client->cur_recv_len - 1] = '\0'; - if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) - { - /* copy response lines, separated by '\0' */ - memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); - resp_buf_len += client->cur_recv_len; +#ifdef AT_DEBUG + const char *cmd = NULL; + int cmdsize = 0; + cmd = at_get_last_cmd(&cmdsize); + Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); +#endif + if ((urc = get_urc_obj(client)) != NULL) { + /* current receive is request, try to execute related operations */ + if (urc->func != NULL) { + urc->func(client->recv_buffer, client->cur_recv_len); + } - line_counts++; - } - else - { - client->resp_status = AT_RESP_BUFF_FULL; - Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); - } - /* check response result */ - if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 - && client->resp->line_num == 0) - { - /* get the end data by response result, return response state END_OK. */ - client->resp_status = AT_RESP_OK; - } - else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) - || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) - { - client->resp_status = AT_RESP_eLOG_ERROR; - } - else if (line_counts == client->resp->line_num && client->resp->line_num) - { - /* get the end data by response line, return response state END_OK.*/ - client->resp_status = AT_RESP_OK; - } - else - { - continue; - } -exit: - client->resp->line_counts = line_counts; - client->resp = NULL; - resp_buf_len = 0; - line_counts = 0; - HAL_SemaphorePost(client->resp_sem); - } - else - { -// Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); - } - } - else - { - //Log_d("read no new line"); - } - - } - return NULL; + } else if (client->resp != NULL) { + if (client->end_sign != 0) { // handle endsign + if (client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) { + continue; + } else { + goto exit; + } + } + + /* current receive is response */ + client->recv_buffer[client->cur_recv_len - 1] = '\0'; + if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) { + /* copy response lines, separated by '\0' */ + memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); + resp_buf_len += client->cur_recv_len; + + line_counts++; + } else { + client->resp_status = AT_RESP_BUFF_FULL; + Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); + } + /* check response result */ + if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 + && client->resp->line_num == 0) { + /* get the end data by response result, return response state END_OK. */ + client->resp_status = AT_RESP_OK; + } else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) + || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) { + client->resp_status = AT_RESP_eLOG_ERROR; + } else if (line_counts == client->resp->line_num && client->resp->line_num) { + /* get the end data by response line, return response state END_OK.*/ + client->resp_status = AT_RESP_OK; + } else { + continue; + } + exit: + client->resp->line_counts = line_counts; + client->resp = NULL; + resp_buf_len = 0; + line_counts = 0; + HAL_SemaphorePost(client->resp_sem); + } else { +// Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); + } + } else { + //Log_d("read no new line"); + } + + } + return NULL; } #else void at_client_yeild(at_urc *expect_urc, uint32_t timeout) { - int resp_buf_len = 0; - const at_urc *urc; - int line_counts = 0; - int prefix_len; - int suffix_len; - Timer timer; - at_client_t client = at_client_get(); - - Log_d("Entry..."); - countdown_ms(&timer, timeout); - do - { - if (at_recv_readline(client) > 0) - { -#ifdef AT_DEBUG - const char *cmd = NULL; - int cmdsize = 0; - cmd = at_get_last_cmd(&cmdsize); - Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); + int resp_buf_len = 0; + const at_urc *urc; + int line_counts = 0; + int prefix_len; + int suffix_len; + Timer timer; + at_client_t client = at_client_get(); + + Log_d("Entry..."); + countdown_ms(&timer, timeout); + do { + if (at_recv_readline(client) > 0) { +#ifdef AT_DEBUG + const char *cmd = NULL; + int cmdsize = 0; + cmd = at_get_last_cmd(&cmdsize); + Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); #endif - if ((urc = get_urc_obj(client)) != NULL) - { - /* current receive is request, try to execute related operations */ - if (urc->func != NULL) - { - urc->func(client->recv_buffer, client->cur_recv_len); - } - - /*expect urc matched then break*/ - if(expect_urc != NULL) - { - prefix_len = strlen(expect_urc->cmd_prefix); - suffix_len = strlen(expect_urc->cmd_suffix); - if ((prefix_len ? !strncmp(urc->cmd_prefix, expect_urc->cmd_prefix, prefix_len) : 1) - && (suffix_len ? !strncmp(urc->cmd_suffix, expect_urc->cmd_suffix, suffix_len) : 1)){ - client->resp_status = AT_RESP_OK; - break; - } - } - } - else if (client->resp != NULL) - { - if(client->end_sign != 0) // handle endsign - { - if(client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) - { - continue; - } - else - { - client->resp_status = AT_RESP_OK; - client->resp->line_counts = line_counts; - client->resp = NULL; - //client->resp_notice = true; - resp_buf_len = 0; - line_counts = 0; - break; - } - } - - /* current receive is response */ - client->recv_buffer[client->cur_recv_len - 1] = '\0'; - if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) - { - /* copy response lines, separated by '\0' */ - memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); - resp_buf_len += client->cur_recv_len; + if ((urc = get_urc_obj(client)) != NULL) { + /* current receive is request, try to execute related operations */ + if (urc->func != NULL) { + urc->func(client->recv_buffer, client->cur_recv_len); + } - line_counts++; - } - else - { - client->resp_status = AT_RESP_BUFF_FULL; - Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); - } - /* check response result */ - if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 - && client->resp->line_num == 0) - { - /* get the end data by response result, return response state END_OK. */ - client->resp_status = AT_RESP_OK; - } - else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) - || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) - { - client->resp_status = AT_RESP_eLOG_ERROR; - } - else if (line_counts == client->resp->line_num && client->resp->line_num) - { - /* get the end data by response line, return response state END_OK.*/ - client->resp_status = AT_RESP_OK; - } - else - { if(!expired(&timer)) - { - continue; - } - else - { - break; - } - } + /*expect urc matched then break*/ + if (expect_urc != NULL) { + prefix_len = strlen(expect_urc->cmd_prefix); + suffix_len = strlen(expect_urc->cmd_suffix); + if ((prefix_len ? !strncmp(urc->cmd_prefix, expect_urc->cmd_prefix, prefix_len) : 1) + && (suffix_len ? !strncmp(urc->cmd_suffix, expect_urc->cmd_suffix, suffix_len) : 1)) { + client->resp_status = AT_RESP_OK; + break; + } + } + } else if (client->resp != NULL) { + if (client->end_sign != 0) { // handle endsign + if (client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) { + continue; + } else { + client->resp_status = AT_RESP_OK; + client->resp->line_counts = line_counts; + client->resp = NULL; + //client->resp_notice = true; + resp_buf_len = 0; + line_counts = 0; + break; + } + } - client->resp->line_counts = line_counts; - client->resp = NULL; - //client->resp_notice = true; - resp_buf_len = 0; - line_counts = 0; - break; - } - else - { - // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); - } - } - else - { - //Log_d("read no new line"); - } - }while(!expired(&timer)); + /* current receive is response */ + client->recv_buffer[client->cur_recv_len - 1] = '\0'; + if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) { + /* copy response lines, separated by '\0' */ + memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); + resp_buf_len += client->cur_recv_len; + + line_counts++; + } else { + client->resp_status = AT_RESP_BUFF_FULL; + Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); + } + /* check response result */ + if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 + && client->resp->line_num == 0) { + /* get the end data by response result, return response state END_OK. */ + client->resp_status = AT_RESP_OK; + } else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) + || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) { + client->resp_status = AT_RESP_eLOG_ERROR; + } else if (line_counts == client->resp->line_num && client->resp->line_num) { + /* get the end data by response line, return response state END_OK.*/ + client->resp_status = AT_RESP_OK; + } else { + if (!expired(&timer)) { + continue; + } else { + break; + } + } + + client->resp->line_counts = line_counts; + client->resp = NULL; + //client->resp_notice = true; + resp_buf_len = 0; + line_counts = 0; + break; + } else { + // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); + } + } else { + //Log_d("read no new line"); + } + } while (!expired(&timer)); } #endif /* initialize the client parameters */ int at_client_para_init(at_client_t client) { - client->lock = HAL_MutexCreate(); - if(NULL == client->lock) - { - Log_e("create lock err"); - return QCLOUD_ERR_FAILURE; - } + client->lock = HAL_MutexCreate(); + if (NULL == client->lock) { + Log_e("create lock err"); + return QCLOUD_ERR_FAILURE; + } -#ifdef AT_OS_USED - client->resp_sem = HAL_SemaphoreCreate(); - if (NULL == client->resp_sem) - { - Log_e("create sem err"); - return QCLOUD_ERR_FAILURE; - } - - client->parser = client_parser; -#endif +#ifdef AT_OS_USED + client->resp_sem = HAL_SemaphoreCreate(); + if (NULL == client->resp_sem) { + Log_e("create sem err"); + return QCLOUD_ERR_FAILURE; + } - char * ringBuff = HAL_Malloc(RING_BUFF_LEN); - if(NULL == ringBuff) - { - Log_e("malloc ringbuff err"); - return QCLOUD_ERR_FAILURE; - } - ring_buff_init(&g_ring_buff, ringBuff, RING_BUFF_LEN); + client->parser = client_parser; +#endif - char * recvBuff = HAL_Malloc(CLINET_BUFF_LEN); - if(NULL == recvBuff) - { - Log_e("malloc recvbuff err"); - return QCLOUD_ERR_FAILURE; - } - client->recv_buffer = recvBuff; + char * ringBuff = HAL_Malloc(RING_BUFF_LEN); + if (NULL == ringBuff) { + Log_e("malloc ringbuff err"); + return QCLOUD_ERR_FAILURE; + } + ring_buff_init(&g_ring_buff, ringBuff, RING_BUFF_LEN); + + char * recvBuff = HAL_Malloc(CLINET_BUFF_LEN); + if (NULL == recvBuff) { + Log_e("malloc recvbuff err"); + return QCLOUD_ERR_FAILURE; + } + client->recv_buffer = recvBuff; - client->pRingBuff = &g_ring_buff; - client->recv_bufsz = CLINET_BUFF_LEN; - client->cur_recv_len = 0; - - client->resp = NULL; + client->pRingBuff = &g_ring_buff; + client->recv_bufsz = CLINET_BUFF_LEN; + client->cur_recv_len = 0; - client->urc_table = NULL; - client->urc_table_size = 0; - client->end_sign = 0; + client->resp = NULL; - return QCLOUD_RET_SUCCESS; + client->urc_table = NULL; + client->urc_table_size = 0; + client->end_sign = 0; + + return QCLOUD_RET_SUCCESS; } /** @@ -894,74 +798,69 @@ int at_client_para_init(at_client_t client) */ int at_client_init(at_client_t *pClient) { - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - at_client_t client; - int result; + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + at_client_t client; + int result; - client = at_client_get(); + client = at_client_get(); - if(NULL == client) - { - Log_e("no at client get"); - result = QCLOUD_ERR_FAILURE; - goto exit; - } + if (NULL == client) { + Log_e("no at client get"); + result = QCLOUD_ERR_FAILURE; + goto exit; + } - if(AT_STATUS_INITIALIZED == client->status) - { - Log_e("at client has been initialized"); - result = QCLOUD_ERR_FAILURE; - goto exit; - } - - result = at_client_para_init(client); - if (result == QCLOUD_RET_SUCCESS) - { - Log_d("AT client(V%s) initialize success.", AT_FRAME_VERSION); - client->status = AT_STATUS_INITIALIZED; - *pClient = client; + if (AT_STATUS_INITIALIZED == client->status) { + Log_e("at client has been initialized"); + result = QCLOUD_ERR_FAILURE; + goto exit; + } -#ifdef AT_OS_USED - // create thread for at parser - if(NULL != client->parser) - { -#define AT_PARSER_THREAD_STACK 6144 -#define AT_PARSER_THREAD_PRIORITY 0 + result = at_client_para_init(client); + if (result == QCLOUD_RET_SUCCESS) { + Log_d("AT client(V%s) initialize success.", AT_FRAME_VERSION); + client->status = AT_STATUS_INITIALIZED; + *pClient = client; - client->thread_t = HAL_ThreadCreate( - AT_PARSER_THREAD_STACK, \ - AT_PARSER_THREAD_PRIORITY, - "at_client_parser", - client->parser, \ - client); - - result = client->thread_t ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; - if(QCLOUD_RET_SUCCESS == result){ - Log_d("create at_parser thread success!"); - }else{ - Log_d("create at_parser thread fail!"); - } - -#undef AT_PARSER_THREAD_STACK -#undef AT_PARSER_THREAD_PRIORITY - } -#endif +#ifdef AT_OS_USED + // create thread for at parser + if (NULL != client->parser) { +#define AT_PARSER_THREAD_STACK 6144 +#define AT_PARSER_THREAD_PRIORITY 0 - } - else - { - *pClient = NULL; - client->status = AT_STATUS_UNINITIALIZED; - Log_e("AT client(V%s) initialize failed(%d).", AT_FRAME_VERSION, result); - } + client->thread_t = HAL_ThreadCreate( + AT_PARSER_THREAD_STACK, \ + AT_PARSER_THREAD_PRIORITY, + "at_client_parser", + client->parser, \ + client); + + result = client->thread_t ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; + if (QCLOUD_RET_SUCCESS == result) { + Log_d("create at_parser thread success!"); + } else { + Log_d("create at_parser thread fail!"); + } + +#undef AT_PARSER_THREAD_STACK +#undef AT_PARSER_THREAD_PRIORITY + } +#endif + + } else { + *pClient = NULL; + client->status = AT_STATUS_UNINITIALIZED; + Log_e("AT client(V%s) initialize failed(%d).", AT_FRAME_VERSION, result); + } exit: - return result; + return result; } -int at_client_deinit(at_client_t pClient){ +int at_client_deinit(at_client_t pClient) +{ - //TO DO: - return QCLOUD_RET_SUCCESS; + //TO DO: + return QCLOUD_RET_SUCCESS; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c index 837e2088..4abd05b8 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c @@ -18,12 +18,12 @@ #include #include -#include +#include #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#include "utils_param_check.h" +#include "utils_param_check.h" #include "at_socket_inf.h" /** The global array of available at */ @@ -35,83 +35,83 @@ static void *sg_at_socket_mutex; /**at device driver ops*/ static at_device_op_t *sg_at_device_ops = NULL; -#define MAX_RECV_PKT_PER_CHAIN (10) +#define MAX_RECV_PKT_PER_CHAIN (10) static at_device_op_t * _at_device_op_get(void) { - return sg_at_device_ops; + return sg_at_device_ops; } static int _at_socket_ctx_free(at_socket_ctx_t *pCtx) { - POINTER_SANITY_CHECK(pCtx, QCLOUD_ERR_INVAL); - - pCtx->fd = UNUSED_SOCKET; - pCtx->net_type = eNET_DEFAULT; + POINTER_SANITY_CHECK(pCtx, QCLOUD_ERR_INVAL); - if(pCtx->recvpkt_list){ - list_destroy(pCtx->recvpkt_list); - pCtx->recvpkt_list = NULL; - } - - if(pCtx->recv_lock){ - HAL_MutexDestroy(pCtx->recv_lock); - pCtx->recv_lock = NULL; - } - - return QCLOUD_RET_SUCCESS; + pCtx->fd = UNUSED_SOCKET; + pCtx->net_type = eNET_DEFAULT; + + if (pCtx->recvpkt_list) { + list_destroy(pCtx->recvpkt_list); + pCtx->recvpkt_list = NULL; + } + + if (pCtx->recv_lock) { + HAL_MutexDestroy(pCtx->recv_lock); + pCtx->recv_lock = NULL; + } + + return QCLOUD_RET_SUCCESS; } static at_socket_ctx_t *_at_socket_ctx_alloc(void) { - int i; + int i; - for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { - if (at_socket_ctxs[i].state == eSOCKET_CLOSED) { - - at_socket_ctxs[i].net_type = eNET_DEFAULT; - at_socket_ctxs[i].send_timeout_ms = AT_SOCKET_SEND_TIMEOUT_MS; - at_socket_ctxs[i].recv_timeout_ms = AT_SOCKET_RECV_TIMEOUT_MS; - at_socket_ctxs[i].dev_op = _at_device_op_get(); - - at_socket_ctxs[i].recv_lock = HAL_MutexCreate(); - if(NULL == at_socket_ctxs[i].recv_lock){ - Log_e("create recv lock fail"); - goto exit; - } - at_socket_ctxs[i].recvpkt_list = list_new(); - if(NULL != at_socket_ctxs[i].recvpkt_list){ - at_socket_ctxs[i].recvpkt_list->free = HAL_Free; - }else { - Log_e("no memory to allocate recvpkt_list"); - goto exit; - } - - at_socket_ctxs[i].state = eSOCKET_ALLOCED; - return &at_socket_ctxs[i]; - } - } + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + if (at_socket_ctxs[i].state == eSOCKET_CLOSED) { + + at_socket_ctxs[i].net_type = eNET_DEFAULT; + at_socket_ctxs[i].send_timeout_ms = AT_SOCKET_SEND_TIMEOUT_MS; + at_socket_ctxs[i].recv_timeout_ms = AT_SOCKET_RECV_TIMEOUT_MS; + at_socket_ctxs[i].dev_op = _at_device_op_get(); + + at_socket_ctxs[i].recv_lock = HAL_MutexCreate(); + if (NULL == at_socket_ctxs[i].recv_lock) { + Log_e("create recv lock fail"); + goto exit; + } + at_socket_ctxs[i].recvpkt_list = list_new(); + if (NULL != at_socket_ctxs[i].recvpkt_list) { + at_socket_ctxs[i].recvpkt_list->free = HAL_Free; + } else { + Log_e("no memory to allocate recvpkt_list"); + goto exit; + } + + at_socket_ctxs[i].state = eSOCKET_ALLOCED; + return &at_socket_ctxs[i]; + } + } exit: - if(i < MAX_AT_SOCKET_NUM){ - _at_socket_ctx_free(&at_socket_ctxs[i]); - } - - return NULL; + if (i < MAX_AT_SOCKET_NUM) { + _at_socket_ctx_free(&at_socket_ctxs[i]); + } + + return NULL; } static at_socket_ctx_t *_at_socket_find(int fd) { - int i; - - for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { - if (at_socket_ctxs[i].fd == fd) { - return &at_socket_ctxs[i]; - } - } + int i; - return NULL; + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + if (at_socket_ctxs[i].fd == fd) { + return &at_socket_ctxs[i]; + } + } + + return NULL; } /* get a block to the AT socket receive list*/ @@ -119,15 +119,15 @@ static int _at_recvpkt_put(List *rlist, const char *ptr, size_t length) { at_recv_pkt *pkt = NULL; - if(rlist->len > MAX_RECV_PKT_PER_CHAIN){ - Log_e("Too many recv packets wait for read"); - HAL_Free(pkt); - return QCLOUD_ERR_FAILURE; - } + if (rlist->len > MAX_RECV_PKT_PER_CHAIN) { + Log_e("Too many recv packets wait for read"); + HAL_Free(pkt); + return QCLOUD_ERR_FAILURE; + } pkt = (at_recv_pkt *) HAL_Malloc(sizeof(struct at_recv_pkt)); - if (pkt == NULL){ - Log_e("No memory for receive packet table!"); + if (pkt == NULL) { + Log_e("No memory for receive packet table!"); return QCLOUD_ERR_FAILURE; } @@ -135,281 +135,281 @@ static int _at_recvpkt_put(List *rlist, const char *ptr, size_t length) pkt->bfsz_index = 0; pkt->buff = (char *) ptr; - ListNode *node = list_node_new(pkt); + ListNode *node = list_node_new(pkt); if (NULL == node) { Log_e("run list_node_new is error!"); - HAL_Free(pkt); + HAL_Free(pkt); return QCLOUD_ERR_FAILURE; } list_rpush(rlist, node); - + return length; } /* get a block from AT socket receive list */ static int _at_recvpkt_get(List *pkt_list, char *buff, size_t len) { - ListIterator *iter; - ListNode *node = NULL; - at_recv_pkt *pkt; - size_t readlen = 0, page_len = 0; - POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); - + ListIterator *iter; + ListNode *node = NULL; + at_recv_pkt *pkt; + size_t readlen = 0, page_len = 0; + POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); + if (pkt_list->len) { - iter = list_iterator_new(pkt_list, LIST_HEAD); + iter = list_iterator_new(pkt_list, LIST_HEAD); if (NULL == iter) { - Log_e("new listiterator fail"); - return QCLOUD_ERR_TCP_READ_FAIL; + Log_e("new listiterator fail"); + return QCLOUD_ERR_TCP_READ_FAIL; } - /*traverse recv pktlist*/ - do{ - node = list_iterator_next(iter); + /*traverse recv pktlist*/ + do { + node = list_iterator_next(iter); if (!node) { - break; + break; } - /*get recv packet*/ - pkt = (at_recv_pkt *)(node->val); - if(!pkt){ - Log_e("pkt is invalid!"); - list_remove(pkt_list, node); - continue; - } - - page_len = pkt->bfsz_totle - pkt->bfsz_index; - if(page_len >= (len - readlen)){ - memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, (len - readlen)); - pkt->bfsz_index += len - readlen; - readlen = len; - break; - }else{ - memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, page_len); - readlen += page_len; - - /*delete pkt after read*/ - HAL_Free(pkt->buff); - list_remove(pkt_list, node); - } - }while(1); + /*get recv packet*/ + pkt = (at_recv_pkt *)(node->val); + if (!pkt) { + Log_e("pkt is invalid!"); + list_remove(pkt_list, node); + continue; + } + + page_len = pkt->bfsz_totle - pkt->bfsz_index; + if (page_len >= (len - readlen)) { + memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, (len - readlen)); + pkt->bfsz_index += len - readlen; + readlen = len; + break; + } else { + memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, page_len); + readlen += page_len; + + /*delete pkt after read*/ + HAL_Free(pkt->buff); + list_remove(pkt_list, node); + } + } while (1); list_iterator_destroy(iter); } - return readlen; + return readlen; } static void _at_socket_recv_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) { - POINTER_SANITY_CHECK_RTN(buff); - at_socket_ctx_t *pAtSocket; - - if(event == AT_SOCKET_EVT_RECV){ - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); - if(_at_recvpkt_put(pAtSocket->recvpkt_list, buff, bfsz) < 0){ - Log_e("put recv package to list fail"); - HAL_Free(buff); - } - HAL_MutexUnlock(sg_at_socket_mutex); - } + POINTER_SANITY_CHECK_RTN(buff); + at_socket_ctx_t *pAtSocket; + + if (event == AT_SOCKET_EVT_RECV) { + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); + if (_at_recvpkt_put(pAtSocket->recvpkt_list, buff, bfsz) < 0) { + Log_e("put recv package to list fail"); + HAL_Free(buff); + } + HAL_MutexUnlock(sg_at_socket_mutex); + } } static void _at_socket_closed_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) { - //fancyxu - at_socket_ctx_t *pAtSocket; - pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); - - if(event == AT_SOCKET_EVT_CLOSED) { - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket->state = eSOCKET_CLOSED; - _at_socket_ctx_free(pAtSocket); - HAL_MutexUnlock(sg_at_socket_mutex); - } + //fancyxu + at_socket_ctx_t *pAtSocket; + pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); + + if (event == AT_SOCKET_EVT_CLOSED) { + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket->state = eSOCKET_CLOSED; + _at_socket_ctx_free(pAtSocket); + HAL_MutexUnlock(sg_at_socket_mutex); + } } int at_device_op_register(at_device_op_t *device_op) { - int rc; - - if(NULL == sg_at_device_ops){ - sg_at_device_ops = device_op; - rc = QCLOUD_RET_SUCCESS; - }else{ - Log_e("pre device op already register"); - rc = QCLOUD_ERR_FAILURE; - } + int rc; - return rc; + if (NULL == sg_at_device_ops) { + sg_at_device_ops = device_op; + rc = QCLOUD_RET_SUCCESS; + } else { + Log_e("pre device op already register"); + rc = QCLOUD_ERR_FAILURE; + } + + return rc; } int at_socket_init(void) { - int i; - int rc = QCLOUD_RET_SUCCESS; + int i; + int rc = QCLOUD_RET_SUCCESS; - for(i = 0; i < MAX_AT_SOCKET_NUM; i++){ - at_socket_ctxs[i].fd = UNUSED_SOCKET; - at_socket_ctxs[i].state = eSOCKET_CLOSED; - at_socket_ctxs[i].dev_op = NULL; - at_socket_ctxs[i].recvpkt_list = NULL; - } + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + at_socket_ctxs[i].fd = UNUSED_SOCKET; + at_socket_ctxs[i].state = eSOCKET_CLOSED; + at_socket_ctxs[i].dev_op = NULL; + at_socket_ctxs[i].recvpkt_list = NULL; + } - sg_at_socket_mutex = HAL_MutexCreate(); - if (sg_at_socket_mutex == NULL) { - Log_e("create sg_at_socket_mutex fail \n"); - rc = QCLOUD_ERR_FAILURE; - } + sg_at_socket_mutex = HAL_MutexCreate(); + if (sg_at_socket_mutex == NULL) { + Log_e("create sg_at_socket_mutex fail \n"); + rc = QCLOUD_ERR_FAILURE; + } - if(NULL != sg_at_device_ops){ - if(QCLOUD_RET_SUCCESS == sg_at_device_ops->init()){ - Log_d("at device %s init success", (NULL == sg_at_device_ops->deviceName)?"noname":sg_at_device_ops->deviceName); - sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_RECV, _at_socket_recv_cb); - sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_CLOSED, _at_socket_closed_cb); - }else{ - Log_e("at device %s init fail", (NULL == sg_at_device_ops->deviceName)?"noname":sg_at_device_ops->deviceName); - } - } + if (NULL != sg_at_device_ops) { + if (QCLOUD_RET_SUCCESS == sg_at_device_ops->init()) { + Log_d("at device %s init success", (NULL == sg_at_device_ops->deviceName) ? "noname" : sg_at_device_ops->deviceName); + sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_RECV, _at_socket_recv_cb); + sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_CLOSED, _at_socket_closed_cb); + } else { + Log_e("at device %s init fail", (NULL == sg_at_device_ops->deviceName) ? "noname" : sg_at_device_ops->deviceName); + } + } - return rc; + return rc; } int at_socket_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) { - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->parse_domain, QCLOUD_ERR_INVAL); + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->parse_domain, QCLOUD_ERR_INVAL); - return at_op->parse_domain(host_name, host_ip, host_ip_len); + return at_op->parse_domain(host_name, host_ip, host_ip_len); } int at_socket_get_local_mac(char *macbuff, size_t bufflen) { - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->get_local_mac, QCLOUD_ERR_INVAL); - - return at_op->get_local_mac(macbuff, bufflen); + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->get_local_mac, QCLOUD_ERR_INVAL); + + return at_op->get_local_mac(macbuff, bufflen); } int at_socket_get_local_ip(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen) { - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->get_local_ip, QCLOUD_ERR_INVAL); - - return at_op->get_local_ip(ip, iplen, gw, gwlen, mask, masklen); + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->get_local_ip, QCLOUD_ERR_INVAL); + + return at_op->get_local_ip(ip, iplen, gw, gwlen, mask, masklen); } int at_socket_connect(const char *host, uint16_t port, eNetProto eProto) -{ - at_socket_ctx_t *pAtSocket; - int fd; +{ + at_socket_ctx_t *pAtSocket; + int fd; - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket = _at_socket_ctx_alloc(); - HAL_MutexUnlock(sg_at_socket_mutex); - - if((NULL == pAtSocket) || (NULL == pAtSocket->dev_op)|| (NULL == pAtSocket->dev_op->connect)){ - Log_e("alloc socket fail"); - return QCLOUD_ERR_FAILURE; - } + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket = _at_socket_ctx_alloc(); + HAL_MutexUnlock(sg_at_socket_mutex); - fd = pAtSocket->dev_op->connect(host, port, eProto); - if(fd < 0){ - Log_e("dev_op connect fail,pls check at device driver!"); - _at_socket_ctx_free(pAtSocket); - }else{ - pAtSocket->fd = fd + MAX_AT_SOCKET_NUM; - pAtSocket->state = eSOCKET_CONNECTED; - } - - return pAtSocket->fd; + if ((NULL == pAtSocket) || (NULL == pAtSocket->dev_op) || (NULL == pAtSocket->dev_op->connect)) { + Log_e("alloc socket fail"); + return QCLOUD_ERR_FAILURE; + } + + fd = pAtSocket->dev_op->connect(host, port, eProto); + if (fd < 0) { + Log_e("dev_op connect fail,pls check at device driver!"); + _at_socket_ctx_free(pAtSocket); + } else { + pAtSocket->fd = fd + MAX_AT_SOCKET_NUM; + pAtSocket->state = eSOCKET_CONNECTED; + } + + return pAtSocket->fd; } int at_socket_close(int fd) -{ - at_socket_ctx_t *pAtSocket; - - - pAtSocket = _at_socket_find(fd); - if(NULL==pAtSocket) { //server close the connection - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - } - - int rc; - if((eSOCKET_CONNECTED == pAtSocket->state) && (NULL != pAtSocket->dev_op) && (NULL != pAtSocket->dev_op->close)) { - rc = pAtSocket->dev_op->close(pAtSocket->fd - MAX_AT_SOCKET_NUM); - } else { - rc = QCLOUD_ERR_FAILURE; - } - return rc; +{ + at_socket_ctx_t *pAtSocket; + + + pAtSocket = _at_socket_find(fd); + if (NULL == pAtSocket) { //server close the connection + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } + + int rc; + if ((eSOCKET_CONNECTED == pAtSocket->state) && (NULL != pAtSocket->dev_op) && (NULL != pAtSocket->dev_op->close)) { + rc = pAtSocket->dev_op->close(pAtSocket->fd - MAX_AT_SOCKET_NUM); + } else { + rc = QCLOUD_ERR_FAILURE; + } + return rc; } int at_socket_send(int fd, const void *buf, size_t len) { - at_socket_ctx_t *pAtSocket; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->send, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - }else{ - return pAtSocket->dev_op->send(fd - MAX_AT_SOCKET_NUM, buf, len); - } + at_socket_ctx_t *pAtSocket; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->send, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } else { + return pAtSocket->dev_op->send(fd - MAX_AT_SOCKET_NUM, buf, len); + } } int at_socket_recv(int fd, void *buf, size_t len) { - at_socket_ctx_t *pAtSocket; - size_t recv_len; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + at_socket_ctx_t *pAtSocket; + size_t recv_len; - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_READ_FAIL; - }else{ - HAL_MutexLock(pAtSocket->recv_lock); + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); - //call at device recv driver for os and nonos - if(pAtSocket->recvpkt_list->len == 0) { - if(pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, pAtSocket->recv_timeout_ms) != QCLOUD_RET_SUCCESS) { - Log_e("at device recv err"); //do not return yet - } - } + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_READ_FAIL; + } else { + HAL_MutexLock(pAtSocket->recv_lock); - /* receive packet list last transmission of remaining data */ - recv_len = _at_recvpkt_get(pAtSocket->recvpkt_list, (char *)buf, len); - HAL_MutexUnlock(pAtSocket->recv_lock); - } + //call at device recv driver for os and nonos + if (pAtSocket->recvpkt_list->len == 0) { + if (pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, pAtSocket->recv_timeout_ms) != QCLOUD_RET_SUCCESS) { + Log_e("at device recv err"); //do not return yet + } + } - return recv_len; + /* receive packet list last transmission of remaining data */ + recv_len = _at_recvpkt_get(pAtSocket->recvpkt_list, (char *)buf, len); + HAL_MutexUnlock(pAtSocket->recv_lock); + } + + return recv_len; } int at_socket_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) { - at_socket_ctx_t *pAtSocket; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + at_socket_ctx_t *pAtSocket; - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - }else{ - return pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, timeout); - } + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } else { + return pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, timeout); + } } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c index 1a9d4e91..c2b1a951 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c @@ -38,29 +38,21 @@ void at_print_raw_cmd(const char *name, const char *buf, int size) { int i, j; - for (i = 0; i < size; i += WIDTH_SIZE) - { + for (i = 0; i < size; i += WIDTH_SIZE) { HAL_Printf("%s: %04X-%04X: ", name, i, i + WIDTH_SIZE); - for (j = 0; j < WIDTH_SIZE; j++) - { - if (i + j < size) - { + for (j = 0; j < WIDTH_SIZE; j++) { + if (i + j < size) { HAL_Printf("%02X ", buf[i + j]); - } - else - { + } else { HAL_Printf(" "); } - if ((j + 1) % 8 == 0) - { + if ((j + 1) % 8 == 0) { HAL_Printf(" "); } } HAL_Printf(" "); - for (j = 0; j < WIDTH_SIZE; j++) - { - if (i + j < size) - { + for (j = 0; j < WIDTH_SIZE; j++) { + if (i + j < size) { HAL_Printf("%c", __is_print(buf[i + j]) ? buf[i + j] : '.'); } } @@ -98,214 +90,210 @@ int at_vprintfln(const char *format, va_list args) /** * at_sscanf - Unformat a buffer into a list of arguments, rewrite sscanf - * @buf: input buffer - * @fmt: format of buffer - * @args: arguments + * @buf: input buffer + * @fmt: format of buffer + * @args: arguments */ int at_sscanf(const char * buf, const char * fmt, va_list args) { - const char *str = buf; - char *next; - int num = 0; - int qualifier; - int base; - int field_width = -1; - int is_sign = 0; + const char *str = buf; + char *next; + int num = 0; + int qualifier; + int base; + int field_width = -1; + int is_sign = 0; - while(*fmt && *str) { - /* skip any white space in format */ - /* white space in format matchs any amount of - * white space, including none, in the input. - */ - if (isspace(*fmt)) { - while (isspace(*fmt)) - ++fmt; - while (isspace(*str)) - ++str; - } + while (*fmt && *str) { + /* skip any white space in format */ + /* white space in format matchs any amount of + * white space, including none, in the input. + */ + if (isspace(*fmt)) { + while (isspace(*fmt)) + ++fmt; + while (isspace(*str)) + ++str; + } - /* anything that is not a conversion must match exactly */ - if (*fmt != '%' && *fmt) { - if (*fmt++ != *str++) - break; - continue; - } + /* anything that is not a conversion must match exactly */ + if (*fmt != '%' && *fmt) { + if (*fmt++ != *str++) + break; + continue; + } - if (!*fmt) - break; - ++fmt; - - /* skip this conversion. - * advance both strings to next white space - */ - if (*fmt == '*') { - while (!isspace(*fmt) && *fmt) - fmt++; - while (!isspace(*str) && *str) - str++; - continue; - } + if (!*fmt) + break; + ++fmt; - /* get field width */ - if (isdigit(*fmt)) - field_width = atoi(fmt); + /* skip this conversion. + * advance both strings to next white space + */ + if (*fmt == '*') { + while (!isspace(*fmt) && *fmt) + fmt++; + while (!isspace(*str) && *str) + str++; + continue; + } - /* get conversion qualifier */ - qualifier = -1; - if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') { - qualifier = *fmt; - fmt++; - } - base = 10; - is_sign = 0; + /* get field width */ + if (isdigit(*fmt)) + field_width = atoi(fmt); - if (!*fmt || !*str) - break; + /* get conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') { + qualifier = *fmt; + fmt++; + } + base = 10; + is_sign = 0; - switch(*fmt++) { - case 'c': - { - char *s = (char *) va_arg(args,char*); - if (field_width == -1) - field_width = 1; - do { - *s++ = *str++; - } while(field_width-- > 0 && *str); - num++; - } - continue; - case 's': - { - char *s = (char *) va_arg(args, char *); - if(field_width == -1) - field_width = INT_MAX; - /* first, skip leading white space in buffer */ - while (isspace(*str)) - str++; + if (!*fmt || !*str) + break; - /* now copy until next white space */ - while (*str && ((*str) != ',')) { - if(isspace(*str)){ - str++; - }else{ - *s++ = *str++; - } - } - *s = '\0'; - num++; - } - continue; - /* S for special handling for MQTTPUB JSON content */ - case 'S': - { - char *s = (char *) va_arg(args, char *); - if(field_width == -1) - field_width = INT_MAX; - /* first, skip leading white space in buffer */ - while (isspace(*str)) - str++; + switch (*fmt++) { + case 'c': { + char *s = (char *) va_arg(args, char*); + if (field_width == -1) + field_width = 1; + do { + *s++ = *str++; + } while (field_width-- > 0 && *str); + num++; + } + continue; + case 's': { + char *s = (char *) va_arg(args, char *); + if (field_width == -1) + field_width = INT_MAX; + /* first, skip leading white space in buffer */ + while (isspace(*str)) + str++; - /* now copy until next white space */ - while (*str) { - if(isspace(*str)){ - str++; - }else{ - *s++ = *str++; - } - } - *s = '\0'; - num++; - } - continue; - case 'n': - /* return number of characters read so far */ - { - int *i = (int *)va_arg(args,int*); - *i = str - buf; - } - continue; - case 'o': - base = 8; - break; - case 'x': - case 'X': - base = 16; - break; - case 'd': - case 'i': - is_sign = 1; - case 'u': - break; - case '%': - /* looking for '%' in str */ - if (*str++ != '%') - return num; - continue; - default: - /* invalid format; stop here */ - return num; - } + /* now copy until next white space */ + while (*str && ((*str) != ',')) { + if (isspace(*str)) { + str++; + } else { + *s++ = *str++; + } + } + *s = '\0'; + num++; + } + continue; + /* S for special handling for MQTTPUB JSON content */ + case 'S': { + char *s = (char *) va_arg(args, char *); + if (field_width == -1) + field_width = INT_MAX; + /* first, skip leading white space in buffer */ + while (isspace(*str)) + str++; - /* have some sort of integer conversion. - * first, skip white space in buffer. - */ - while (isspace(*str)) - str++; + /* now copy until next white space */ + while (*str) { + if (isspace(*str)) { + str++; + } else { + *s++ = *str++; + } + } + *s = '\0'; + num++; + } + continue; + case 'n': + /* return number of characters read so far */ + { + int *i = (int *)va_arg(args, int*); + *i = str - buf; + } + continue; + case 'o': + base = 8; + break; + case 'x': + case 'X': + base = 16; + break; + case 'd': + case 'i': + is_sign = 1; + case 'u': + break; + case '%': + /* looking for '%' in str */ + if (*str++ != '%') + return num; + continue; + default: + /* invalid format; stop here */ + return num; + } - if (!*str || !isdigit(*str)) - break; + /* have some sort of integer conversion. + * first, skip white space in buffer. + */ + while (isspace(*str)) + str++; - switch(qualifier) { - case 'h': - if (is_sign) { - short *s = (short *) va_arg(args,short *); - *s = (short) strtol(str,&next,base); - } else { - unsigned short *s = (unsigned short *) va_arg(args, unsigned short *); - *s = (unsigned short) strtoul(str, &next, base); - } - break; - case 'l': - if (is_sign) { - long *l = (long *) va_arg(args,long *); - *l = strtol(str,&next,base); - } else { - unsigned long *l = (unsigned long*) va_arg(args,unsigned long*); - *l = strtoul(str,&next,base); - } - break; - case 'L': - if (is_sign) { - long long *l = (long long*) va_arg(args,long long *); - *l = strtoll(str,&next,base); - } else { - unsigned long long *l = (unsigned long long*) va_arg(args,unsigned long long*); - *l = strtoull(str,&next,base); - } - break; - case 'Z': - { - unsigned long *s = (unsigned long*) va_arg(args,unsigned long*); - *s = (unsigned long) strtoul(str,&next,base); - } - break; - default: - if (is_sign) { - int *i = (int *) va_arg(args, int*); - *i = (int) strtol(str,&next,base); - } else { - unsigned int *i = (unsigned int*) va_arg(args, unsigned int*); - *i = (unsigned int) strtoul(str,&next,base); - } - break; - } - num++; + if (!*str || !isdigit(*str)) + break; - if (!next) - break; - str = next; - } - return num; + switch (qualifier) { + case 'h': + if (is_sign) { + short *s = (short *) va_arg(args, short *); + *s = (short) strtol(str, &next, base); + } else { + unsigned short *s = (unsigned short *) va_arg(args, unsigned short *); + *s = (unsigned short) strtoul(str, &next, base); + } + break; + case 'l': + if (is_sign) { + long *l = (long *) va_arg(args, long *); + *l = strtol(str, &next, base); + } else { + unsigned long *l = (unsigned long*) va_arg(args, unsigned long*); + *l = strtoul(str, &next, base); + } + break; + case 'L': + if (is_sign) { + long long *l = (long long*) va_arg(args, long long *); + *l = strtoll(str, &next, base); + } else { + unsigned long long *l = (unsigned long long*) va_arg(args, unsigned long long*); + *l = strtoull(str, &next, base); + } + break; + case 'Z': { + unsigned long *s = (unsigned long*) va_arg(args, unsigned long*); + *s = (unsigned long) strtoul(str, &next, base); + } + break; + default: + if (is_sign) { + int *i = (int *) va_arg(args, int*); + *i = (int) strtol(str, &next, base); + } else { + unsigned int *i = (unsigned int*) va_arg(args, unsigned int*); + *i = (unsigned int) strtoul(str, &next, base); + } + break; + } + num++; + + if (!next) + break; + str = next; + } + return num; } /** @@ -316,7 +304,7 @@ int at_sscanf(const char * buf, const char * fmt, va_list args) * * @return -1 : parse arguments failed * 0 : parse without match - * >0 : The number of arguments successfully parsed + * >0 : The number of arguments successfully parsed */ int at_req_parse_args(const char *req_args, const char *req_expr, ...) { @@ -328,9 +316,9 @@ int at_req_parse_args(const char *req_args, const char *req_expr, ...) va_start(args, req_expr); - //req_args_num = vsscanf(req_args, req_expr, args); + //req_args_num = vsscanf(req_args, req_expr, args); req_args_num = at_sscanf(req_args, req_expr, args); - + va_end(args); @@ -339,34 +327,30 @@ int at_req_parse_args(const char *req_args, const char *req_expr, ...) void at_strip(char *str, const char patten) { - char *start, *end; - - start = str; - end = str + strlen(str) -1; - - if(*str == patten) - { - start++; - } + char *start, *end; - if(*end == patten) - { - *end-- = '\0'; - } + start = str; + end = str + strlen(str) - 1; - strcpy(str, start); + if (*str == patten) { + start++; + } + + if (*end == patten) { + *end-- = '\0'; + } + + strcpy(str, start); } void chr_strip(char *str, const char patten) { - char *end = str + strlen(str); - - while(*str != '\0') - { - if(*str == patten) - { - memmove(str, str+1, end - str); - } - str++; - } + char *end = str + strlen(str); + + while (*str != '\0') { + if (*str == patten) { + memmove(str, str + 1, end - str); + } + str++; + } } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c index 09a97a36..326bb321 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c @@ -32,119 +32,112 @@ int network_at_tcp_init(Network *pNetwork) { - int rc; - - /*at device init entry: at_client init, device driver register to at_socket*/ - rc = at_device_init(); - if(QCLOUD_RET_SUCCESS != rc) - { - Log_e("at device init fail,rc:%d",rc); - return rc; - } - - /*do after at device init*/ - rc = at_socket_init(); - if(QCLOUD_RET_SUCCESS != rc) - { - Log_e("at socket init fail,rc:%d",rc); - } + int rc; - return rc; + /*at device init entry: at_client init, device driver register to at_socket*/ + rc = at_device_init(); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("at device init fail,rc:%d", rc); + return rc; + } + + /*do after at device init*/ + rc = at_socket_init(); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("at socket init fail,rc:%d", rc); + } + + return rc; } int network_at_tcp_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - - int fd = at_socket_connect(pNetwork->host, pNetwork->port, eNET_TCP); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - if (fd < 0) { - Log_e("fail to connect with TCP server: %s:%u", pNetwork->host, pNetwork->port); - pNetwork->handle = AT_NO_CONNECTED_FD; - return -1; - } - else { - Log_d("connected with TCP server: %s:%u", pNetwork->host, pNetwork->port); - pNetwork->handle = fd; - return 0; - } + int fd = at_socket_connect(pNetwork->host, pNetwork->port, eNET_TCP); + + if (fd < 0) { + Log_e("fail to connect with TCP server: %s:%u", pNetwork->host, pNetwork->port); + pNetwork->handle = AT_NO_CONNECTED_FD; + return -1; + } else { + Log_d("connected with TCP server: %s:%u", pNetwork->host, pNetwork->port); + pNetwork->handle = fd; + return 0; + } } int network_at_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - int ret, err_code; - uint32_t len_recv; - Timer timer; - - InitTimer(&timer); - countdown_ms(&timer, timeout_ms); - - len_recv = 0; - err_code = 0; - - do { - if (expired(&timer)) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; - break; - } - - ret = at_socket_recv(pNetwork->handle, data + len_recv, datalen - len_recv); - - if (ret > 0) { - len_recv += ret; - } - else if (ret == 0) { - err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; - } - else {//ret < 0 - Log_e("recv fail\n"); - err_code = QCLOUD_ERR_TCP_READ_FAIL; - break; - } - - } while ((len_recv < datalen)); - - if (err_code == QCLOUD_ERR_TCP_READ_TIMEOUT && len_recv == 0) { - err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; - } - - *read_len = len_recv; - - return (datalen == len_recv) ? QCLOUD_RET_SUCCESS : err_code; -} - -int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) -{ - int ret; - uint32_t len_sent; - Timer timer; - int net_err = 0; + int ret, err_code; + uint32_t len_recv; + Timer timer; InitTimer(&timer); countdown_ms(&timer, timeout_ms); - len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ + len_recv = 0; + err_code = 0; - do { - ret = at_socket_send(pNetwork->handle, data + len_sent, datalen - len_sent); + do { + if (expired(&timer)) { + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + break; + } - if (ret > 0) { - len_sent += ret; - } - else if (0 == ret) { - Log_e("No data be sent\n"); - } - else { - Log_e("send fail, ret:%d\n", ret); - net_err = 1; - break; - } - } while (!net_err && (len_sent < datalen) && (!expired(&timer))); + ret = at_socket_recv(pNetwork->handle, data + len_recv, datalen - len_recv); - *written_len = (size_t)len_sent; + if (ret > 0) { + len_recv += ret; + } else if (ret == 0) { + err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; + } else { //ret < 0 + Log_e("recv fail\n"); + err_code = QCLOUD_ERR_TCP_READ_FAIL; + break; + } - return (len_sent > 0 && net_err == 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_TCP_WRITE_FAIL; + } while ((len_recv < datalen)); + + if (err_code == QCLOUD_ERR_TCP_READ_TIMEOUT && len_recv == 0) { + err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; + } + + *read_len = len_recv; + + return (datalen == len_recv) ? QCLOUD_RET_SUCCESS : err_code; +} + +int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) +{ + int ret; + uint32_t len_sent; + Timer timer; + int net_err = 0; + + InitTimer(&timer); + countdown_ms(&timer, timeout_ms); + + len_sent = 0; + ret = 1; /* send one time if timeout_ms is value 0 */ + + do { + ret = at_socket_send(pNetwork->handle, data + len_sent, datalen - len_sent); + + if (ret > 0) { + len_sent += ret; + } else if (0 == ret) { + Log_e("No data be sent\n"); + } else { + Log_e("send fail, ret:%d\n", ret); + net_err = 1; + break; + } + } while (!net_err && (len_sent < datalen) && (!expired(&timer))); + + *written_len = (size_t)len_sent; + + return (len_sent > 0 && net_err == 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_TCP_WRITE_FAIL; } void network_at_tcp_disconnect(Network *pNetwork) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/network_interface.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/network_interface.c index 1a88c45d..2b4dcb10 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/network_interface.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/network_interface.c @@ -21,13 +21,15 @@ extern "C" { #include "qcloud_iot_export_error.h" #include "utils_param_check.h" -int is_network_connected(Network *pNetwork) { - return pNetwork->handle; +int is_network_connected(Network *pNetwork) +{ + return pNetwork->handle; } #ifdef AT_TCP_ENABLED -int is_network_at_connected(Network *pNetwork) { - return pNetwork->handle== AT_NO_CONNECTED_FD ? 0: pNetwork->handle == AT_NO_CONNECTED_FD; +int is_network_at_connected(Network *pNetwork) +{ + return pNetwork->handle == AT_NO_CONNECTED_FD ? 0 : pNetwork->handle == AT_NO_CONNECTED_FD; } #endif @@ -36,20 +38,20 @@ int network_init(Network *pNetwork) POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); // to avoid process crash when writing to a broken socket -#if defined(__linux__) +#if defined(__linux__) signal(SIGPIPE, SIG_IGN); #endif - switch(pNetwork->type) { + switch (pNetwork->type) { case NETWORK_TCP: #ifdef AT_TCP_ENABLED - pNetwork->init = network_at_tcp_init; - pNetwork->connect = network_at_tcp_connect; - pNetwork->read = network_at_tcp_read; - pNetwork->write = network_at_tcp_write; - pNetwork->disconnect = network_at_tcp_disconnect; - pNetwork->is_connected = is_network_at_connected; - pNetwork->handle = AT_NO_CONNECTED_FD; + pNetwork->init = network_at_tcp_init; + pNetwork->connect = network_at_tcp_connect; + pNetwork->read = network_at_tcp_read; + pNetwork->write = network_at_tcp_write; + pNetwork->disconnect = network_at_tcp_disconnect; + pNetwork->is_connected = is_network_at_connected; + pNetwork->handle = AT_NO_CONNECTED_FD; #else pNetwork->init = network_tcp_init; pNetwork->connect = network_tcp_connect; @@ -98,7 +100,7 @@ int network_init(Network *pNetwork) #endif default: Log_e("unknown network type: %d", pNetwork->type); - return QCLOUD_ERR_INVAL; + return QCLOUD_ERR_INVAL; } return pNetwork->init(pNetwork); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/socket/network_socket.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/socket/network_socket.c index 39de6317..ade34c84 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/socket/network_socket.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/socket/network_socket.c @@ -21,7 +21,7 @@ /* * TCP/UDP socket API */ - + int network_tcp_init(Network *pNetwork) { return QCLOUD_RET_SUCCESS; @@ -56,7 +56,7 @@ int network_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, ui int rc = 0; - rc =HAL_TCP_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); + rc = HAL_TCP_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); return rc; } @@ -83,49 +83,49 @@ int network_udp_init(Network *pNetwork) int network_udp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = HAL_UDP_ReadTimeout(pNetwork->handle, data, datalen, timeout_ms); - if (ret > 0) { - *read_len = ret; - ret = 0; - } + int ret = HAL_UDP_ReadTimeout(pNetwork->handle, data, datalen, timeout_ms); + if (ret > 0) { + *read_len = ret; + ret = 0; + } - return ret; + return ret; } int network_udp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = HAL_UDP_Write(pNetwork->handle, data, datalen); - if (ret > 0) { - *written_len = ret; - ret = 0; - } + int ret = HAL_UDP_Write(pNetwork->handle, data, datalen); + if (ret > 0) { + *written_len = ret; + ret = 0; + } - return ret; + return ret; } void network_udp_disconnect(Network *pNetwork) { - POINTER_SANITY_CHECK_RTN(pNetwork); + POINTER_SANITY_CHECK_RTN(pNetwork); - HAL_UDP_Disconnect(pNetwork->handle); - pNetwork->handle = 0; + HAL_UDP_Disconnect(pNetwork->handle); + pNetwork->handle = 0; - return ; + return ; } int network_udp_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - pNetwork->handle = HAL_UDP_Connect(pNetwork->host, pNetwork->port); - if (0 == pNetwork->handle) { - return -1; - } - return 0; + pNetwork->handle = HAL_UDP_Connect(pNetwork->host, pNetwork->port); + if (0 == pNetwork->handle) { + return -1; + } + return 0; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/tls/network_tls.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/tls/network_tls.c index 2950fa71..43499a56 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/tls/network_tls.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/network/tls/network_tls.c @@ -21,7 +21,7 @@ /* * TLS/DTLS network API */ -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS int network_tls_init(Network *pNetwork) { @@ -31,14 +31,14 @@ int network_tls_init(Network *pNetwork) int network_tls_connect(Network *pNetwork) { POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - + int ret = QCLOUD_ERR_FAILURE; - + pNetwork->handle = (uintptr_t)HAL_TLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); if (pNetwork->handle != 0) { ret = QCLOUD_RET_SUCCESS; } - + return ret; } @@ -77,40 +77,40 @@ int network_dtls_init(Network *pNetwork) int network_dtls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - return HAL_DTLS_Read(pNetwork->handle, data, datalen, timeout_ms, read_len); + return HAL_DTLS_Read(pNetwork->handle, data, datalen, timeout_ms, read_len); } int network_dtls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - return HAL_DTLS_Write(pNetwork->handle, data, datalen, written_len); + return HAL_DTLS_Write(pNetwork->handle, data, datalen, written_len); } void network_dtls_disconnect(Network *pNetwork) { - POINTER_SANITY_CHECK_RTN(pNetwork); + POINTER_SANITY_CHECK_RTN(pNetwork); - HAL_DTLS_Disconnect(pNetwork->handle); - pNetwork->handle = 0; + HAL_DTLS_Disconnect(pNetwork->handle); + pNetwork->handle = 0; - return ; + return ; } int network_dtls_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = QCLOUD_ERR_FAILURE; + int ret = QCLOUD_ERR_FAILURE; - pNetwork->handle = (uintptr_t)HAL_DTLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); - if (pNetwork->handle != 0) { - ret = QCLOUD_RET_SUCCESS; - } + pNetwork->handle = (uintptr_t)HAL_DTLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); + if (pNetwork->handle != 0) { + ret = QCLOUD_RET_SUCCESS; + } - return ret; + return ret; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c index d3f7ce61..6d85ffcf 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c @@ -18,7 +18,7 @@ extern "C" { #endif - + #include #include #include @@ -41,13 +41,13 @@ extern "C" { #define HTTP_CLIENT_MAX_HOST_LEN 64 #define HTTP_CLIENT_MAX_URL_LEN 1024 - + #define HTTP_RETRIEVE_MORE_DATA (1) - + #if defined(MBEDTLS_DEBUG_C) - #define DEBUG_LEVEL 2 +#define DEBUG_LEVEL 2 #endif - + static void _http_client_base64enc(char *out, const char *in) { @@ -71,13 +71,13 @@ static void _http_client_base64enc(char *out, const char *in) } static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_scheme_len, char *host, uint32_t maxhost_len, - int *port, char *path, uint32_t max_path_len) + int *port, char *path, uint32_t max_path_len) { char *scheme_ptr = (char *) url; char *host_ptr = (char *) strstr(url, "://"); uint32_t host_len = 0; uint32_t path_len; - + char *path_ptr; char *fragment_ptr; @@ -103,38 +103,38 @@ static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_sc host_len = path_ptr - host_ptr; memcpy(host, host_ptr, host_len); host[host_len] = '\0'; - + memcpy(path, "/", 1); path[1] = '\0'; return QCLOUD_RET_SUCCESS; } - + if (host_len == 0) { host_len = path_ptr - host_ptr; } - + if (maxhost_len < host_len + 1) { Log_e("Host str is too long (host_len(%d) >= max_len(%d))", host_len + 1, maxhost_len); return QCLOUD_ERR_HTTP_PARSE; } memcpy(host, host_ptr, host_len); host[host_len] = '\0'; - + fragment_ptr = strchr(host_ptr, '#'); if (fragment_ptr != NULL) { path_len = fragment_ptr - path_ptr; } else { path_len = strlen(path_ptr); } - + if (max_path_len < path_len + 1) { Log_e("Path str is too small (%d >= %d)", max_path_len, path_len + 1); return QCLOUD_ERR_HTTP_PARSE; } - + memcpy(path, path_ptr, path_len); - + path[path_len] = '\0'; return QCLOUD_RET_SUCCESS; @@ -151,7 +151,7 @@ static int _http_client_parse_host(const char *url, char *host, uint32_t host_ma return QCLOUD_ERR_HTTP_PARSE; } host_ptr += 3; - + uint32_t pro_len = 0; pro_len = host_ptr - url; @@ -222,7 +222,7 @@ static int _http_client_send_auth(HTTPClient *client, unsigned char *send_buf, i return QCLOUD_RET_SUCCESS; } - + static int _http_client_send_header(HTTPClient *client, const char *url, HttpMethod method, HTTPClientData *client_data) { @@ -237,49 +237,49 @@ static int _http_client_send_header(HTTPClient *client, const char *url, HttpMet (method == HTTP_HEAD) ? "HEAD" : ""; int rc; int port; - + int res = _http_client_parse_url(url, scheme, sizeof(scheme), host, sizeof(host), &port, path, sizeof(path)); if (res != QCLOUD_RET_SUCCESS) { Log_e("httpclient_parse_url returned %d", res); return res; } - + if (strcmp(scheme, "http") == 0) { - + } else if (strcmp(scheme, "https") == 0) { - + } - + memset(send_buf, 0, HTTP_CLIENT_SEND_BUF_SIZE); len = 0; - + HAL_Snprintf(buf, sizeof(buf), "%s %s HTTP/1.1\r\nHost: %s\r\n", meth, path, host); rc = _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); if (rc) { Log_e("Could not write request"); return QCLOUD_ERR_HTTP_CONN; } - + if (client->auth_user) { _http_client_send_auth(client, send_buf, &len); } - + if (client->header) { _http_client_get_info(client, send_buf, &len, (char *) client->header, strlen(client->header)); } - + if (client_data->post_buf != NULL) { HAL_Snprintf(buf, sizeof(buf), "Content-Length: %d\r\n", client_data->post_buf_len); _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); - + if (client_data->post_content_type != NULL) { HAL_Snprintf(buf, sizeof(buf), "Content-Type: %s\r\n", client_data->post_content_type); _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); } } - + _http_client_get_info(client, send_buf, &len, "\r\n", 0); - + //Log_d("REQUEST:\n%s", send_buf); size_t written_len = 0; @@ -293,13 +293,13 @@ static int _http_client_send_header(HTTPClient *client, const char *url, HttpMet Log_e("Connection error (send returned %d)", rc); return QCLOUD_ERR_HTTP_CONN; } - + return QCLOUD_RET_SUCCESS; } - + static int _http_client_send_userdata(HTTPClient *client, HTTPClientData *client_data) -{ +{ if (client_data->post_buf && client_data->post_buf_len) { //Log_d("client_data->post_buf: %s", client_data->post_buf); { @@ -316,10 +316,10 @@ static int _http_client_send_userdata(HTTPClient *client, HTTPClientData *client } } } - + return QCLOUD_RET_SUCCESS; } - + static int _http_client_recv(HTTPClient *client, char *buf, int min_len, int max_len, int *p_read_len, uint32_t timeout_ms, HTTPClientData *client_data) { @@ -327,39 +327,37 @@ static int _http_client_recv(HTTPClient *client, char *buf, int min_len, int max int rc = 0; Timer timer; - + size_t recv_size = 0; + InitTimer(&timer); countdown_ms(&timer, (unsigned int)timeout_ms); - + *p_read_len = 0; - rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), (size_t *)p_read_len); - + rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), &recv_size); + *p_read_len = (int)recv_size; if (rc == QCLOUD_ERR_SSL_NOTHING_TO_READ || rc == QCLOUD_ERR_TCP_NOTHING_TO_READ) { Log_d("HTTP read nothing and timeout"); rc = QCLOUD_RET_SUCCESS; - } - else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_TCP_READ_TIMEOUT) { + } else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_TCP_READ_TIMEOUT) { if (*p_read_len == client_data->retrieve_len || client_data->retrieve_len == 0) rc = QCLOUD_RET_SUCCESS; else Log_e("network_stack read timeout"); - } - else if (rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN && *p_read_len > 0) { + } else if (rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN && *p_read_len > 0) { /* HTTP server give response and close this connection */ client->network_stack.disconnect(&client->network_stack); rc = QCLOUD_RET_SUCCESS; - } - else if (rc != QCLOUD_RET_SUCCESS) { + } else if (rc != QCLOUD_RET_SUCCESS) { Log_e("Connection error rc = %d (recv returned %d)", rc, *p_read_len); IOT_FUNC_EXIT_RC(rc); } - + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - + static int _http_client_retrieve_content(HTTPClient *client, char *data, int len, uint32_t timeout_ms, - HTTPClientData *client_data) + HTTPClientData *client_data) { IOT_FUNC_ENTRY; @@ -367,12 +365,12 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len int templen = 0; int crlf_pos; Timer timer; - + InitTimer(&timer); countdown_ms(&timer, (unsigned int)timeout_ms); - + client_data->is_more = IOT_TRUE; - + if (client_data->response_content_len == -1 && client_data->is_chunked == IOT_FALSE) { while (1) { int rc, max_len; @@ -385,13 +383,13 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->response_buf[client_data->response_buf_len - 1] = '\0'; return HTTP_RETRIEVE_MORE_DATA; } - + max_len = HTTP_CLIENT_MIN(HTTP_CLIENT_CHUNK_SIZE - 1, client_data->response_buf_len - 1 - count); rc = _http_client_recv(client, data, 1, max_len, &len, (uint32_t)left_ms(&timer), client_data); - + /* Receive data */ //Log_d("data len: %d %d", len, count); - + if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } @@ -399,7 +397,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len Log_e("HTTP read timeout!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_TIMEOUT); } - + if (len == 0) { /* read no more data */ Log_d("no more data, len == 0"); @@ -408,7 +406,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } } } - + while (1) { uint32_t readLen = 0; if (client_data->is_chunked && client_data->retrieve_len <= 0) { @@ -432,12 +430,12 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len if (len < HTTP_CLIENT_CHUNK_SIZE) { int new_trf_len, rc; rc = _http_client_recv(client, - data + len, - 0, - HTTP_CLIENT_CHUNK_SIZE - len - 1, - &new_trf_len, - left_ms(&timer), - client_data); + data + len, + 0, + HTTP_CLIENT_CHUNK_SIZE - len - 1, + &new_trf_len, + left_ms(&timer), + client_data); len += new_trf_len; if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); @@ -465,14 +463,14 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len Log_e("Could not read chunk length"); return QCLOUD_ERR_HTTP_UNRESOLVED_DNS; } - + memmove(data, &data[crlf_pos + 2], len - (crlf_pos + 2)); len -= (crlf_pos + 2); - + } else { readLen = client_data->retrieve_len; } - + do { templen = HTTP_CLIENT_MIN(len, readLen); if (count + templen < client_data->response_buf_len - 1) { @@ -486,7 +484,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->retrieve_len -= (client_data->response_buf_len - 1 - count); IOT_FUNC_EXIT_RC(HTTP_RETRIEVE_MORE_DATA); } - + if (len > readLen) { Log_d("memmove %d %d %d\n", readLen, len, client_data->retrieve_len); memmove(data, &data[readLen], len - readLen); /* chunk case, read between two chunks */ @@ -496,7 +494,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } else { readLen -= len; } - + if (readLen) { int rc; int max_len = HTTP_CLIENT_MIN(HTTP_CLIENT_CHUNK_SIZE - 1, client_data->response_buf_len - 1 - count); @@ -511,19 +509,19 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } } } while (readLen); - + if (client_data->is_chunked) { if (len < 2) { int new_trf_len, rc; /* Read missing chars to find end of chunk */ rc = _http_client_recv(client, data + len, 2 - len, HTTP_CLIENT_CHUNK_SIZE - len - 1, &new_trf_len, - left_ms(&timer), client_data); - if ((rc != QCLOUD_RET_SUCCESS )|| (0 == left_ms(&timer))) { + left_ms(&timer), client_data); + if ((rc != QCLOUD_RET_SUCCESS ) || (0 == left_ms(&timer))) { IOT_FUNC_EXIT_RC(rc); } len += new_trf_len; } - + if ((data[0] != '\r') || (data[1] != '\n')) { Log_e("Format error, %s", data); /* after memmove, the beginning of next chunk */ IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_UNRESOLVED_DNS); @@ -535,36 +533,36 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->is_more = IOT_FALSE; break; } - + } - + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - -static int _http_client_response_parse(HTTPClient *client, char *data, int len, uint32_t timeout_ms, + +static int _http_client_response_parse(HTTPClient *client, char *data, int len, uint32_t timeout_ms, HTTPClientData *client_data) { IOT_FUNC_ENTRY; - + int crlf_pos; Timer timer; char *tmp_ptr, *ptr_body_end; - + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - + client_data->response_content_len = -1; - + char *crlf_ptr = strstr(data, "\r\n"); if (crlf_ptr == NULL) { Log_e("\\r\\n not found"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_UNRESOLVED_DNS); } - + crlf_pos = crlf_ptr - data; data[crlf_pos] = '\0'; - + #if 0 if (sscanf(data, "HTTP/%*d.%*d %d %*[^\r\n]", &(client->response_code)) != 1) { Log_e("Not a correct HTTP answer : %s\n", data); @@ -573,23 +571,23 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, #endif client->response_code = atoi(data + 9); - + if ((client->response_code < 200) || (client->response_code >= 400)) { Log_w("Response code %d", client->response_code); - + if (client->response_code == 403) IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_AUTH); - + if (client->response_code == 404) IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_NOT_FOUND); } //Log_d("Reading headers : %s", data); - + // remove null character memmove(data, &data[crlf_pos + 2], len - (crlf_pos + 2) + 1); len -= (crlf_pos + 2); - + client_data->is_chunked = IOT_FALSE; if (NULL == (ptr_body_end = strstr(data, "\r\n\r\n"))) { @@ -623,7 +621,7 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, Log_e("Could not parse header"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP); } - + len = len - (ptr_body_end + 4 - data); memmove(data, ptr_body_end + 4, len + 1); int rc = _http_client_retrieve_content(client, data, len, left_ms(&timer), client_data); @@ -632,7 +630,7 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, static int _http_client_connect(HTTPClient *client) { - if (QCLOUD_RET_SUCCESS != client->network_stack.connect(&client->network_stack)) { + if (QCLOUD_RET_SUCCESS != client->network_stack.connect(&client->network_stack)) { return QCLOUD_ERR_HTTP_CONN; } @@ -640,7 +638,7 @@ static int _http_client_connect(HTTPClient *client) } static int _http_client_send_request(HTTPClient *client, const char *url, HttpMethod method, HTTPClientData *client_data) -{ +{ int rc; rc = _http_client_send_header(client, url, method, client_data); @@ -655,7 +653,7 @@ static int _http_client_send_request(HTTPClient *client, const char *url, HttpMe return rc; } - + static int _http_client_recv_response(HTTPClient *client, uint32_t timeout_ms, HTTPClientData *client_data) { @@ -664,37 +662,37 @@ static int _http_client_recv_response(HTTPClient *client, uint32_t timeout_ms, H int reclen = 0, rc = QCLOUD_ERR_HTTP_CONN; char buf[HTTP_CLIENT_CHUNK_SIZE] = { 0 }; Timer timer; - + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - + if (0 == client->network_stack.handle) { Log_e("Connection has not been established"); IOT_FUNC_EXIT_RC(rc); } - + if (client_data->is_more) { client_data->response_buf[0] = '\0'; rc = _http_client_retrieve_content(client, buf, reclen, left_ms(&timer), client_data); } else { client_data->is_more = IOT_TRUE; - rc = _http_client_recv(client, buf, 1, HTTP_CLIENT_CHUNK_SIZE - 1, &reclen, left_ms(&timer), client_data); - + rc = _http_client_recv(client, buf, 1, HTTP_CLIENT_CHUNK_SIZE - 1, &reclen, left_ms(&timer), client_data); + if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } //else if(0 == left_ms(&timer)){ // IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_TIMEOUT); //} - + buf[reclen] = '\0'; - + if (reclen) { //HAL_Printf("RESPONSE:\n%s", buf); rc = _http_client_response_parse(client, buf, reclen, left_ms(&timer), client_data); } } - + IOT_FUNC_EXIT_RC(rc); } @@ -717,7 +715,7 @@ static int _http_network_init(Network *pNetwork, const char *host, int port, con pNetwork->port = port; rc = network_init(pNetwork); - + return rc; } @@ -765,7 +763,7 @@ int qcloud_http_client_common(HTTPClient *client, const char *url, int port, con if (client->network_stack.handle == 0) { rc = qcloud_http_client_connect(client, url, port, ca_crt); if (rc != QCLOUD_RET_SUCCESS) return rc; - } + } rc = _http_client_send_request(client, url, method, client_data); if (rc != QCLOUD_RET_SUCCESS) { @@ -773,7 +771,7 @@ int qcloud_http_client_common(HTTPClient *client, const char *url, int port, con qcloud_http_client_close(client); return rc; } - + return QCLOUD_RET_SUCCESS; } @@ -786,7 +784,7 @@ int qcloud_http_recv_data(HTTPClient *client, uint32_t timeout_ms, HTTPClientDat InitTimer(&timer); countdown_ms(&timer, (unsigned int) timeout_ms); - + if ((NULL != client_data->response_buf) && (0 != client_data->response_buf_len)) { rc = _http_client_recv_response(client, left_ms(&timer), client_data); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c index 71008ae6..723917b7 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c @@ -66,73 +66,72 @@ int IOT_MQTT_GetErrCode(void) void* IOT_MQTT_Construct(MQTTInitParams *pParams) { g_last_err_code = QCLOUD_ERR_INVAL; - POINTER_SANITY_CHECK(pParams, NULL); - STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); - STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); + POINTER_SANITY_CHECK(pParams, NULL); + STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); + STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); int rc = iot_device_info_set(pParams->product_id, pParams->device_name); - if ( rc != QCLOUD_RET_SUCCESS) { + if ( rc != QCLOUD_RET_SUCCESS) { Log_e("failed to set device info: %d", rc); g_last_err_code = rc; return NULL; } - Qcloud_IoT_Client* mqtt_client = NULL; + Qcloud_IoT_Client* mqtt_client = NULL; - // create and init MQTTClient - if ((mqtt_client = (Qcloud_IoT_Client*) HAL_Malloc (sizeof(Qcloud_IoT_Client))) == NULL) { - Log_e("malloc MQTTClient failed"); - g_last_err_code = QCLOUD_ERR_MALLOC; - return NULL; - } + // create and init MQTTClient + if ((mqtt_client = (Qcloud_IoT_Client*) HAL_Malloc (sizeof(Qcloud_IoT_Client))) == NULL) { + Log_e("malloc MQTTClient failed"); + g_last_err_code = QCLOUD_ERR_MALLOC; + return NULL; + } - rc = qcloud_iot_mqtt_init(mqtt_client, pParams); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("mqtt init failed: %d", rc); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } + rc = qcloud_iot_mqtt_init(mqtt_client, pParams); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("mqtt init failed: %d", rc); + HAL_Free(mqtt_client); + g_last_err_code = rc; + return NULL; + } - MQTTConnectParams connect_params = DEFAULT_MQTTCONNECT_PARAMS; - connect_params.client_id = iot_device_info_get()->client_id; + MQTTConnectParams connect_params = DEFAULT_MQTTCONNECT_PARAMS; + connect_params.client_id = iot_device_info_get()->client_id; // Upper limit of keep alive interval is (11.5 * 60) seconds - connect_params.keep_alive_interval = Min(pParams->keep_alive_interval_ms / 1000, 690); - connect_params.clean_session = pParams->clean_session; - connect_params.auto_connect_enable = pParams->auto_connect_enable; + connect_params.keep_alive_interval = Min(pParams->keep_alive_interval_ms / 1000, 690); + connect_params.clean_session = pParams->clean_session; + connect_params.auto_connect_enable = pParams->auto_connect_enable; #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - size_t src_len = strlen(pParams->device_secret); - size_t len; - memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); - rc = qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); - connect_params.device_secret = (char *)sg_psk_str; - connect_params.device_secret_len = len; - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Device secret decode err, secret:%s", pParams->device_secret); - qcloud_iot_mqtt_deinit(mqtt_client); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } -#endif - - rc = qcloud_iot_mqtt_connect(mqtt_client, &connect_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("mqtt connect with id: %s failed: %d", mqtt_client->options.conn_id, rc); + size_t src_len = strlen(pParams->device_secret); + size_t len; + memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); + rc = qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); + connect_params.device_secret = (char *)sg_psk_str; + connect_params.device_secret_len = len; + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Device secret decode err, secret:%s", pParams->device_secret); qcloud_iot_mqtt_deinit(mqtt_client); HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } - else { - Log_i("mqtt connect with id: %s success", mqtt_client->options.conn_id); - g_last_err_code = QCLOUD_RET_SUCCESS; - } + g_last_err_code = rc; + return NULL; + } +#endif -#ifdef LOG_UPLOAD - //log subscribe topics - if (is_log_uploader_init()) { - int log_level; + rc = qcloud_iot_mqtt_connect(mqtt_client, &connect_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("mqtt connect with id: %s failed: %d", mqtt_client->options.conn_id, rc); + qcloud_iot_mqtt_deinit(mqtt_client); + HAL_Free(mqtt_client); + g_last_err_code = rc; + return NULL; + } else { + Log_i("mqtt connect with id: %s success", mqtt_client->options.conn_id); + g_last_err_code = QCLOUD_RET_SUCCESS; + } + +#ifdef LOG_UPLOAD + //log subscribe topics + if (is_log_uploader_init()) { + int log_level; rc = qcloud_get_log_level(mqtt_client, &log_level); //rc = qcloud_log_topic_subscribe(mqtt_client); if (rc < 0) { @@ -144,22 +143,23 @@ void* IOT_MQTT_Construct(MQTTInitParams *pParams) } #endif - return mqtt_client; + return mqtt_client; } -int IOT_MQTT_Destroy(void **pClient) { - POINTER_SANITY_CHECK(*pClient, QCLOUD_ERR_INVAL); +int IOT_MQTT_Destroy(void **pClient) +{ + POINTER_SANITY_CHECK(*pClient, QCLOUD_ERR_INVAL); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)(*pClient); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)(*pClient); - int rc = qcloud_iot_mqtt_disconnect(mqtt_client); + int rc = qcloud_iot_mqtt_disconnect(mqtt_client); - int i = 0; + int i = 0; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { /* notify this event to topic subscriber */ if (NULL != mqtt_client->sub_handles[i].sub_event_handler) - mqtt_client->sub_handles[i].sub_event_handler(mqtt_client, - MQTT_EVENT_CLIENT_DESTROY, mqtt_client->sub_handles[i].handler_user_data); + mqtt_client->sub_handles[i].sub_event_handler(mqtt_client, + MQTT_EVENT_CLIENT_DESTROY, mqtt_client->sub_handles[i].handler_user_data); if (NULL != mqtt_client->sub_handles[i].topic_filter) { HAL_Free((void *)mqtt_client->sub_handles[i].topic_filter); @@ -173,7 +173,7 @@ int IOT_MQTT_Destroy(void **pClient) { #endif HAL_MutexDestroy(mqtt_client->lock_generic); - HAL_MutexDestroy(mqtt_client->lock_write_buf); + HAL_MutexDestroy(mqtt_client->lock_write_buf); HAL_MutexDestroy(mqtt_client->lock_list_sub); HAL_MutexDestroy(mqtt_client->lock_list_pub); @@ -183,15 +183,16 @@ int IOT_MQTT_Destroy(void **pClient) { HAL_Free(*pClient); *pClient = NULL; -#ifdef LOG_UPLOAD +#ifdef LOG_UPLOAD set_log_mqtt_client(NULL); -#endif +#endif Log_i("mqtt release!"); - return rc; + return rc; } -int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) { +int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) +{ Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; int rc = qcloud_iot_mqtt_yield(mqtt_client, timeout_ms); @@ -204,7 +205,7 @@ int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) { IOT_Log_Upload(true); #endif - return rc; + return rc; } int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams) @@ -214,21 +215,24 @@ int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams) return qcloud_iot_mqtt_publish(mqtt_client, topicName, pParams); } -int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParams) { +int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParams) +{ - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - return qcloud_iot_mqtt_subscribe(mqtt_client, topicFilter, pParams); + return qcloud_iot_mqtt_subscribe(mqtt_client, topicFilter, pParams); } -int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter) { +int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter) +{ - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - return qcloud_iot_mqtt_unsubscribe(mqtt_client, topicFilter); + return qcloud_iot_mqtt_unsubscribe(mqtt_client, topicFilter); } -bool IOT_MQTT_IsConnected(void *pClient) { +bool IOT_MQTT_IsConnected(void *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -239,27 +243,27 @@ bool IOT_MQTT_IsConnected(void *pClient) { } static inline void _strlowr(char *str) -{ - while(*str != '\0') - { - *str = tolower(*str); +{ + while (*str != '\0') { + *str = tolower(*str); str++; - } + } } -int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { +int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); - memset(pClient, 0x0, sizeof(Qcloud_IoT_Client)); - + memset(pClient, 0x0, sizeof(Qcloud_IoT_Client)); + int size = HAL_Snprintf(s_qcloud_iot_host, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_MQTT_DIRECT_DOMAIN); if (size < 0 || size > HOST_STR_LENGTH - 1) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + _strlowr(s_qcloud_iot_host); int i = 0; @@ -272,9 +276,9 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { } if (pParams->command_timeout < MIN_COMMAND_TIMEOUT) - pParams->command_timeout = MIN_COMMAND_TIMEOUT; + pParams->command_timeout = MIN_COMMAND_TIMEOUT; if (pParams->command_timeout > MAX_COMMAND_TIMEOUT) - pParams->command_timeout = MAX_COMMAND_TIMEOUT; + pParams->command_timeout = MAX_COMMAND_TIMEOUT; pClient->command_timeout_ms = pParams->command_timeout; // packet id, random from [1 - 65536] @@ -284,7 +288,7 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { pClient->is_ping_outstanding = 0; pClient->was_manually_disconnected = 0; pClient->counter_network_disconnected = 0; - + pClient->event_handle = pParams->event_handle; pClient->lock_generic = HAL_MutexCreate(); @@ -295,29 +299,29 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { set_client_conn_state(pClient, NOTCONNECTED); if ((pClient->lock_write_buf = HAL_MutexCreate()) == NULL) { - Log_e("create write buf lock failed."); - goto error; + Log_e("create write buf lock failed."); + goto error; } if ((pClient->lock_list_sub = HAL_MutexCreate()) == NULL) { - Log_e("create sub list lock failed."); - goto error; + Log_e("create sub list lock failed."); + goto error; } if ((pClient->lock_list_pub = HAL_MutexCreate()) == NULL) { - Log_e("create pub list lock failed."); - goto error; + Log_e("create pub list lock failed."); + goto error; } if ((pClient->list_pub_wait_ack = list_new()) == NULL) { - Log_e("create pub wait list failed."); - goto error; - } - pClient->list_pub_wait_ack->free = HAL_Free; - - if ((pClient->list_sub_wait_ack = list_new()) == NULL) { - Log_e("create sub wait list failed."); + Log_e("create pub wait list failed."); goto error; } - pClient->list_sub_wait_ack->free = HAL_Free; + pClient->list_pub_wait_ack->free = HAL_Free; + + if ((pClient->list_sub_wait_ack = list_new()) == NULL) { + Log_e("create sub wait list failed."); + goto error; + } + pClient->list_sub_wait_ack->free = HAL_Free; #ifndef AUTH_WITH_NOTLS // device param for TLS connection @@ -357,8 +361,8 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { pClient->network_stack.host = s_qcloud_iot_host; pClient->network_stack.port = s_qcloud_iot_port; - pClient->network_stack.ssl_connect_params.timeout_ms = - pClient->command_timeout_ms > QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT ? pClient->command_timeout_ms:QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT; + pClient->network_stack.ssl_connect_params.timeout_ms = + pClient->command_timeout_ms > QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT ? pClient->command_timeout_ms : QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT; #else pClient->network_stack.host = s_qcloud_iot_host; @@ -375,56 +379,57 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); error: - if (pClient->list_pub_wait_ack) { - pClient->list_pub_wait_ack->free(pClient->list_pub_wait_ack); - pClient->list_pub_wait_ack = NULL; - } - if (pClient->list_sub_wait_ack) { - pClient->list_sub_wait_ack->free(pClient->list_sub_wait_ack); - pClient->list_sub_wait_ack = NULL; - } - if (pClient->lock_generic) { - HAL_MutexDestroy(pClient->lock_generic); - pClient->lock_generic = NULL; - } - if (pClient->lock_list_sub) { - HAL_MutexDestroy(pClient->lock_list_sub); - pClient->lock_list_sub = NULL; - } - if (pClient->lock_list_pub) { - HAL_MutexDestroy(pClient->lock_list_pub); - pClient->lock_list_pub = NULL; - } - if (pClient->lock_write_buf) { - HAL_MutexDestroy(pClient->lock_write_buf); - pClient->lock_write_buf = NULL; - } + if (pClient->list_pub_wait_ack) { + pClient->list_pub_wait_ack->free(pClient->list_pub_wait_ack); + pClient->list_pub_wait_ack = NULL; + } + if (pClient->list_sub_wait_ack) { + pClient->list_sub_wait_ack->free(pClient->list_sub_wait_ack); + pClient->list_sub_wait_ack = NULL; + } + if (pClient->lock_generic) { + HAL_MutexDestroy(pClient->lock_generic); + pClient->lock_generic = NULL; + } + if (pClient->lock_list_sub) { + HAL_MutexDestroy(pClient->lock_list_sub); + pClient->lock_list_sub = NULL; + } + if (pClient->lock_list_pub) { + HAL_MutexDestroy(pClient->lock_list_pub); + pClient->lock_list_pub = NULL; + } + if (pClient->lock_write_buf) { + HAL_MutexDestroy(pClient->lock_write_buf); + pClient->lock_write_buf = NULL; + } - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) } -int qcloud_iot_mqtt_deinit(Qcloud_IoT_Client *mqtt_client) +int qcloud_iot_mqtt_deinit(Qcloud_IoT_Client *mqtt_client) { IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(mqtt_client, QCLOUD_ERR_INVAL); HAL_MutexDestroy(mqtt_client->lock_generic); - HAL_MutexDestroy(mqtt_client->lock_write_buf); + HAL_MutexDestroy(mqtt_client->lock_write_buf); HAL_MutexDestroy(mqtt_client->lock_list_sub); HAL_MutexDestroy(mqtt_client->lock_list_pub); list_destroy(mqtt_client->list_pub_wait_ack); list_destroy(mqtt_client->list_sub_wait_ack); - + Log_i("release mqtt client resources"); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) { +int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -434,7 +439,8 @@ int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) { +bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -447,7 +453,8 @@ bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(is_enabled); } -int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -455,7 +462,8 @@ int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(pClient->counter_network_disconnected); } -int qcloud_iot_mqtt_reset_network_disconnected_count(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_reset_network_disconnected_count(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c index 64627f07..a502a1fd 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c @@ -27,7 +27,7 @@ extern "C" { #include "utils_list.h" /* remain waiting time after MQTT header is received (unit: ms) */ -#define QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS (2000) +#define QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS (2000) #define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 @@ -59,7 +59,8 @@ static int _check_handle_is_identical(SubTopicHandle *sub_handle1, SubTopicHandl return 0; } -uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) { +uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -71,25 +72,26 @@ uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(pClient->next_packet_id); } -void get_next_conn_id(char *conn_id) { - int i; - srand((unsigned)HAL_GetTimeMs()); - for (i = 0; i < MAX_CONN_ID_LEN - 1; i++) { - int flag = rand() % 3; - switch(flag) { - case 0: - conn_id[i] = (rand() % 26) + 'a'; - break; - case 1: - conn_id[i] = (rand() % 26) + 'A'; - break; - case 2: - conn_id[i] = (rand() % 10) + '0'; - break; - } - } +void get_next_conn_id(char *conn_id) +{ + int i; + srand((unsigned)HAL_GetTimeMs()); + for (i = 0; i < MAX_CONN_ID_LEN - 1; i++) { + int flag = rand() % 3; + switch (flag) { + case 0: + conn_id[i] = (rand() % 26) + 'a'; + break; + case 1: + conn_id[i] = (rand() % 26) + 'A'; + break; + case 2: + conn_id[i] = (rand() % 10) + '0'; + break; + } + } - conn_id[MAX_CONN_ID_LEN - 1] = '\0'; + conn_id[MAX_CONN_ID_LEN - 1] = '\0'; } /** @@ -98,7 +100,8 @@ void get_next_conn_id(char *conn_id) { * @param length the length to be encoded * @return the number of bytes written to buffer */ -size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) { +size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) +{ IOT_FUNC_ENTRY; size_t outLen = 0; @@ -117,7 +120,8 @@ size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) { IOT_FUNC_EXIT_RC((int)outLen); } -size_t get_mqtt_packet_len(size_t rem_len) { +size_t get_mqtt_packet_len(size_t rem_len) +{ rem_len += 1; /* header byte */ /* now remaining_length field */ @@ -141,7 +145,8 @@ size_t get_mqtt_packet_len(size_t rem_len) { * @return the number of bytes read from the socket */ static int _decode_packet_rem_len_from_buf_read(uint32_t (*getcharfn)(unsigned char *, uint32_t), uint32_t *value, - uint32_t *readBytesLen) { + uint32_t *readBytesLen) +{ IOT_FUNC_ENTRY; unsigned char c; @@ -168,7 +173,8 @@ static int _decode_packet_rem_len_from_buf_read(uint32_t (*getcharfn)(unsigned c } static unsigned char *bufptr; -uint32_t bufchar(unsigned char *c, uint32_t count) { +uint32_t bufchar(unsigned char *c, uint32_t count) +{ uint32_t i; for (i = 0; i < count; ++i) { @@ -178,7 +184,8 @@ uint32_t bufchar(unsigned char *c, uint32_t count) { return count; } -int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint32_t *readBytesLen) { +int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint32_t *readBytesLen) +{ bufptr = buf; return _decode_packet_rem_len_from_buf_read(bufchar, value, readBytesLen); } @@ -188,7 +195,8 @@ int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint3 * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned * @return the value calculated */ -uint16_t mqtt_read_uint16_t(unsigned char **pptr) { +uint16_t mqtt_read_uint16_t(unsigned char **pptr) +{ unsigned char *ptr = *pptr; uint8_t firstByte = (uint8_t) (*ptr); uint8_t secondByte = (uint8_t) (*(ptr + 1)); @@ -202,7 +210,8 @@ uint16_t mqtt_read_uint16_t(unsigned char **pptr) { * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned * @return the character read */ -unsigned char mqtt_read_char(unsigned char **pptr) { +unsigned char mqtt_read_char(unsigned char **pptr) +{ unsigned char c = **pptr; (*pptr)++; return c; @@ -213,7 +222,8 @@ unsigned char mqtt_read_char(unsigned char **pptr) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param c the character to write */ -void mqtt_write_char(unsigned char **pptr, unsigned char c) { +void mqtt_write_char(unsigned char **pptr, unsigned char c) +{ **pptr = c; (*pptr)++; } @@ -223,7 +233,8 @@ void mqtt_write_char(unsigned char **pptr, unsigned char c) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param anInt the integer to write */ -void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) { +void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) +{ **pptr = (unsigned char) (anInt / 256); (*pptr)++; **pptr = (unsigned char) (anInt % 256); @@ -235,7 +246,8 @@ void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param string the C string to write */ -void mqtt_write_utf8_string(unsigned char **pptr, const char *string) { +void mqtt_write_utf8_string(unsigned char **pptr, const char *string) +{ size_t len = strlen(string); mqtt_write_uint_16(pptr, (uint16_t) len); memcpy(*pptr, string, len); @@ -319,10 +331,10 @@ int mqtt_init_packet_header(unsigned char *header, MessageTypes message_type, } /* Generate the final protocol header by using bitwise operator */ - *header = ((type<>MQTT_HEADER_TYPE_SHIFT); - *dup = ((header&MQTT_HEADER_DUP_MASK)>>MQTT_HEADER_DUP_SHIFT); + header = mqtt_read_char(&curdata); + *packet_type = ((header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT); + *dup = ((header & MQTT_HEADER_DUP_MASK) >> MQTT_HEADER_DUP_SHIFT); /* read remaining length */ rc = mqtt_read_packet_rem_len_form_buf(curdata, &decodedLen, &readBytesLen); @@ -372,7 +385,7 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ } *packet_id = mqtt_read_uint16_t(&curdata); - + if (enddata - curdata >= 1) { unsigned char ack_code = mqtt_read_char(&curdata); if (ack_code != 0) { @@ -395,7 +408,7 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ * @return error code. 1 is success, 0 is failure */ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t *count, - QoS *grantedQoSs, unsigned char *buf, size_t buf_len) + QoS *grantedQoSs, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -416,12 +429,12 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t } // read 1st byte in fixed header header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; if (type != SUBACK) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - // read remain part in fixed header + // read remain part in fixed header decodeRc = mqtt_read_packet_rem_len_form_buf(curdata, &decodedLen, &readBytesLen); if (decodeRc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(decodeRc); @@ -455,7 +468,7 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t * @param buf_len the length in bytes of the data in the supplied buffer * @return int indicating function execution status */ -int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len) +int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -482,7 +495,8 @@ int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t * @param serialized length * @return int indicating function execution status */ -int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, uint32_t *serialized_len) { +int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -512,7 +526,8 @@ int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, Messa IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { +int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -544,7 +559,8 @@ int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { } -static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint32_t *value, uint32_t timeout) { +static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint32_t *value, uint32_t timeout) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -591,7 +607,8 @@ static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint * @param packet_type MQTT packet type * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type) { +static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -601,9 +618,9 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * uint32_t rem_len = 0; size_t read_len = 0; int rc; - int timer_left_ms = left_ms(timer); - - if (timer_left_ms <= 0) { + int timer_left_ms = left_ms(timer); + + if (timer_left_ms <= 0) { timer_left_ms = 1; } @@ -618,12 +635,12 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * len = 1; // 2. read the remaining length - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - + rc = _decode_packet_rem_len_with_net_read(pClient, &rem_len, timer_left_ms); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); @@ -635,7 +652,7 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * size_t bytes_to_be_read; int32_t ret_val = 0; - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } @@ -644,7 +661,7 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * bytes_to_be_read = pClient->read_buf_size; do { ret_val = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, bytes_to_be_read, timer_left_ms, - &read_len); + &read_len); if (ret_val == QCLOUD_RET_SUCCESS) { total_bytes_read += read_len; if ((rem_len - total_bytes_read) >= pClient->read_buf_size) { @@ -663,33 +680,32 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * // 3. read payload according to remaining length if (rem_len > 0 && ((len + rem_len) > pClient->read_buf_size)) { - - timer_left_ms = left_ms(timer); + + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - - pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, rem_len, timer_left_ms, &read_len); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); - } - else { + + pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, rem_len, timer_left_ms, &read_len); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); + } else { if (rem_len > 0) { - timer_left_ms = left_ms(timer); - if (timer_left_ms <= 0) { - timer_left_ms = 1; - } - timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - rc = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf + len, rem_len, timer_left_ms, &read_len); - if (rc != QCLOUD_RET_SUCCESS) { - IOT_FUNC_EXIT_RC(rc); - } + timer_left_ms = left_ms(timer); + if (timer_left_ms <= 0) { + timer_left_ms = 1; + } + timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; + rc = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf + len, rem_len, timer_left_ms, &read_len); + if (rc != QCLOUD_RET_SUCCESS) { + IOT_FUNC_EXIT_RC(rc); + } } } - *packet_type = (pClient->read_buf[0]&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; - + *packet_type = (pClient->read_buf[0] & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } @@ -700,7 +716,8 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * * @param topicName * @return */ -static uint8_t _is_topic_equals(char *topic_filter, char *topicName) { +static uint8_t _is_topic_equals(char *topic_filter, char *topicName) +{ return (uint8_t) (strlen(topic_filter) == strlen(topicName) && !strcmp(topic_filter, topicName)); } @@ -716,7 +733,8 @@ static uint8_t _is_topic_equals(char *topic_filter, char *topicName) { * @param topicNameLen length of topic name * @return */ -static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t topicNameLen) { +static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t topicNameLen) +{ char *curf; char *curn; char *curn_end; @@ -769,7 +787,8 @@ static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t t * @param message * @return */ -static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_t topicNameLen, MQTTMessage *message) { +static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_t topicNameLen, MQTTMessage *message) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -781,13 +800,12 @@ static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_ uint32_t i; int flag_matched = 0; - + HAL_MutexLock(pClient->lock_generic); for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((pClient->sub_handles[i].topic_filter != NULL) && (_is_topic_equals(topicName, (char *) pClient->sub_handles[i].topic_filter) || - _is_topic_matched((char *) pClient->sub_handles[i].topic_filter, topicName, topicNameLen))) - { + _is_topic_matched((char *) pClient->sub_handles[i].topic_filter, topicName, topicNameLen))) { HAL_MutexUnlock(pClient->lock_generic); if (pClient->sub_handles[i].message_handler != NULL) { pClient->sub_handles[i].message_handler(pClient, message, pClient->sub_handles[i].handler_user_data); @@ -904,7 +922,7 @@ static int _mask_sub_info_from(Qcloud_IoT_Client *c, unsigned int msgId, SubTopi if (sub_info->msg_id == msgId) { *messageHandler = sub_info->handler; /* return handle */ sub_info->node_state = MQTT_NODE_STATE_INVALID; /* mark as invalid node */ - } + } } list_iterator_destroy(iter); @@ -956,7 +974,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q QoS grantedQoS[3] = {QOS0, QOS0, QOS0}; int rc; bool sub_nack = false; - + rc = deserialize_suback_packet(&packet_id, 1, &count, grantedQoS, pClient->read_buf, pClient->read_buf_size); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); @@ -965,7 +983,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q int flag_dup = 0, i_free = -1; // check return code in SUBACK packet: 0x00(QOS0, SUCCESS),0x01(QOS1, SUCCESS),0x02(QOS2, SUCCESS),0x80(Failure) if (grantedQoS[0] == 0x80) { - MQTTEventMsg msg; + MQTTEventMsg msg; msg.event_type = MQTT_EVENT_SUBCRIBE_NACK; msg.msg = (void *)(uintptr_t)packet_id; @@ -975,7 +993,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q } HAL_MutexLock(pClient->lock_generic); - + SubTopicHandle sub_handle; memset(&sub_handle, 0, sizeof(SubTopicHandle)); (void)_mask_sub_info_from(pClient, (unsigned int)packet_id, &sub_handle); @@ -992,25 +1010,25 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q /* notify this event to topic subscriber */ if (NULL != sub_handle.sub_event_handler) sub_handle.sub_event_handler(pClient, MQTT_EVENT_SUBCRIBE_NACK, sub_handle.handler_user_data); - + HAL_Free((void *)sub_handle.topic_filter); - sub_handle.topic_filter = NULL; + sub_handle.topic_filter = NULL; IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_SUB); } int i; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((NULL != pClient->sub_handles[i].topic_filter)) { - if (0 == _check_handle_is_identical(&pClient->sub_handles[i], &sub_handle)) { + if (0 == _check_handle_is_identical(&pClient->sub_handles[i], &sub_handle)) { flag_dup = 1; Log_w("Identical topic found: %s", sub_handle.topic_filter); if (pClient->sub_handles[i].handler_user_data != sub_handle.handler_user_data) { - Log_w("Update handler_user_data %p -> %p!", - pClient->sub_handles[i].handler_user_data, sub_handle.handler_user_data); + Log_w("Update handler_user_data %p -> %p!", + pClient->sub_handles[i].handler_user_data, sub_handle.handler_user_data); pClient->sub_handles[i].handler_user_data = sub_handle.handler_user_data; } HAL_Free((void *)sub_handle.topic_filter); - sub_handle.topic_filter = NULL; + sub_handle.topic_filter = NULL; break; } } else { @@ -1033,7 +1051,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q pClient->sub_handles[i_free].handler_user_data = sub_handle.handler_user_data; } } - + HAL_MutexUnlock(pClient->lock_generic); /* notify this event to user callback */ @@ -1074,18 +1092,18 @@ static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) HAL_MutexLock(pClient->lock_generic); /* actually below code is nonsense as unsub handle is different with sub handle even the same topic_filter*/ - #if 0 +#if 0 int i; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((pClient->sub_handles[i].topic_filter != NULL) - && (0 == _check_handle_is_identical(&pClient->sub_handles[i], &messageHandler))) { + && (0 == _check_handle_is_identical(&pClient->sub_handles[i], &messageHandler))) { memset(&pClient->sub_handles[i], 0, sizeof(SubTopicHandle)); /* NOTE: in case of more than one register(subscribe) with different callback function, * so we must keep continuously searching related message handle. */ } } - #endif +#endif /* Free the topic filter malloced in qcloud_iot_mqtt_unsubscribe */ if (messageHandler.topic_filter) { @@ -1115,10 +1133,8 @@ static uint16_t sg_repeat_packet_id_buf[MQTT_MAX_REPEAT_BUF_LEN]; static int _get_packet_id_in_repeat_buf(uint16_t packet_id) { int i; - for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) - { - if (packet_id == sg_repeat_packet_id_buf[i]) - { + for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) { + if (packet_id == sg_repeat_packet_id_buf[i]) { return packet_id; } } @@ -1140,8 +1156,7 @@ static void _add_packet_id_to_repeat_buf(uint16_t packet_id) void reset_repeat_packet_id_buffer(void) { int i; - for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) - { + for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) { sg_repeat_packet_id_buf[i] = 0; } } @@ -1149,7 +1164,8 @@ void reset_repeat_packet_id_buffer(void) #endif -static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { +static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) +{ IOT_FUNC_ENTRY; char *topic_name; uint16_t topic_len; @@ -1162,18 +1178,17 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); } - + // topicName from packet is NOT null terminated char fix_topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - - if(topic_len > MAX_SIZE_OF_CLOUD_TOPIC){ - topic_len = MAX_SIZE_OF_CLOUD_TOPIC - 1; - Log_e("topic len exceed buffer len"); - } + + if (topic_len > MAX_SIZE_OF_CLOUD_TOPIC) { + topic_len = MAX_SIZE_OF_CLOUD_TOPIC - 1; + Log_e("topic len exceed buffer len"); + } memcpy(fix_topic, topic_name, topic_len); - if (QOS0 == msg.qos) - { + if (QOS0 == msg.qos) { rc = _deliver_message(pClient, fix_topic, topic_len, &msg); if (QCLOUD_RET_SUCCESS != rc) IOT_FUNC_EXIT_RC(rc); @@ -1187,8 +1202,7 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { int repeat_id = _get_packet_id_in_repeat_buf(msg.id); // deliver to msg callback - if (repeat_id < 0) - { + if (repeat_id < 0) { #endif rc = _deliver_message(pClient, fix_topic, topic_len, &msg); if (QCLOUD_RET_SUCCESS != rc) @@ -1198,7 +1212,7 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { _add_packet_id_to_repeat_buf(msg.id); #endif } - + HAL_MutexLock(pClient->lock_write_buf); if (QOS1 == msg.qos) { rc = serialize_pub_ack_packet(pClient->write_buf, pClient->write_buf_size, PUBACK, 0, msg.id, &len); @@ -1222,7 +1236,8 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { } -static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) { +static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) +{ IOT_FUNC_ENTRY; uint16_t packet_id; unsigned char dup, type; @@ -1254,7 +1269,8 @@ static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) { } -static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) { +static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; HAL_MutexLock(pClient->lock_generic); @@ -1265,7 +1281,8 @@ static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT; } -int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos) { +int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -1309,29 +1326,29 @@ int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_typ } case PUBCOMP: break; - case PINGRESP: + case PINGRESP: break; default: { /* Either unknown packet type or Failure occurred * Should not happen */ - + IOT_FUNC_EXIT_RC(QCLOUD_ERR_RX_MESSAGE_INVAL); break; } } - switch (*packet_type) { + switch (*packet_type) { /* Recv below msgs are all considered as PING OK */ case PUBACK: case SUBACK: - case UNSUBACK: + case UNSUBACK: case PINGRESP: { _handle_pingresp_packet(pClient); break; } /* Recv downlink pub means link is OK but we still need to send PING request */ case PUBLISH: { - HAL_MutexLock(pClient->lock_generic); + HAL_MutexLock(pClient->lock_generic); pClient->is_ping_outstanding = 0; HAL_MutexUnlock(pClient->lock_generic); break; @@ -1341,37 +1358,40 @@ int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_typ IOT_FUNC_EXIT_RC(rc); } -int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, QoS qos) { - IOT_FUNC_ENTRY; - int rc; - uint8_t read_packet_type = 0; +int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, QoS qos) +{ + IOT_FUNC_ENTRY; + int rc; + uint8_t read_packet_type = 0; - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); - do { - if (expired(timer)) { - rc = QCLOUD_ERR_MQTT_REQUEST_TIMEOUT; - break; - } - rc = cycle_for_read(pClient, timer, &read_packet_type, qos); - } while (QCLOUD_RET_SUCCESS == rc && read_packet_type != packet_type ); + do { + if (expired(timer)) { + rc = QCLOUD_ERR_MQTT_REQUEST_TIMEOUT; + break; + } + rc = cycle_for_read(pClient, timer, &read_packet_type, qos); + } while (QCLOUD_RET_SUCCESS == rc && read_packet_type != packet_type ); - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected) { +void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected) +{ HAL_MutexLock(pClient->lock_generic); pClient->is_connected = connected; HAL_MutexUnlock(pClient->lock_generic); } -uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) { +uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; - uint8_t is_connected = 0; - HAL_MutexLock(pClient->lock_generic); - is_connected = pClient->is_connected; - HAL_MutexUnlock(pClient->lock_generic); + uint8_t is_connected = 0; + HAL_MutexLock(pClient->lock_generic); + is_connected = pClient->is_connected; + HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(is_connected); } @@ -1381,7 +1401,7 @@ uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) { * return: 0, success; NOT 0, fail; */ int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, MessageTypes type, - SubTopicHandle *handler, ListNode **node) + SubTopicHandle *handler, ListNode **node) { IOT_FUNC_ENTRY; if (!c || !handler || !node) { @@ -1398,13 +1418,13 @@ int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, Messag } QcloudIotSubInfo *sub_info = (QcloudIotSubInfo *)HAL_Malloc(sizeof( - QcloudIotSubInfo) + len); + QcloudIotSubInfo) + len); if (NULL == sub_info) { HAL_MutexUnlock(c->lock_list_sub); Log_e("malloc failed!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - + sub_info->node_state = MQTT_NODE_STATE_NORMANL; sub_info->msg_id = msgId; sub_info->len = len; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c index 184ee040..c8c15aaf 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c @@ -55,7 +55,8 @@ typedef enum { * @param the length of buffer needed to contain the serialized version of the packet * @return int indicating function execution status */ -static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) { +static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) +{ size_t len = 0; /* variable depending on MQTT or MQIsdp */ if (3 == options->mqtt_version) { @@ -77,10 +78,16 @@ static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) { return (uint32_t) len; } -static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectParams *source) { +static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectParams *source) +{ - POINTER_SANITY_CHECK_RTN(destination); - POINTER_SANITY_CHECK_RTN(source); + POINTER_SANITY_CHECK_RTN(destination); + POINTER_SANITY_CHECK_RTN(source); + + /* In case of reconnecting, source == destination */ + if (source == destination) { + return; + } destination->mqtt_version = source->mqtt_version; destination->client_id = source->client_id; @@ -102,7 +109,8 @@ static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectPara * @param serialized length * @return int indicating function execution status */ -static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTConnectParams *options, uint32_t *serialized_len) { +static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTConnectParams *options, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -118,28 +126,28 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon long cur_timesec = HAL_Timer_current_sec() + MAX_ACCESS_EXPIRE_TIMEOUT / 1000; if (cur_timesec <= 0 || MAX_ACCESS_EXPIRE_TIMEOUT <= 0) { - cur_timesec = LONG_MAX; + cur_timesec = LONG_MAX; } long cur_timesec_bak = cur_timesec; int cur_timesec_len = 0; - while(cur_timesec_bak != 0) { - cur_timesec_bak /= 10; - ++cur_timesec_len; - } + while (cur_timesec_bak != 0) { + cur_timesec_bak /= 10; + ++cur_timesec_len; + } int username_len = strlen(options->client_id) + strlen(QCLOUD_IOT_DEVICE_SDK_APPID) + MAX_CONN_ID_LEN + cur_timesec_len + 4; options->username = (char*)HAL_Malloc(username_len); get_next_conn_id(options->conn_id); - HAL_Snprintf(options->username, username_len, "%s;%s;%s;%ld", options->client_id, QCLOUD_IOT_DEVICE_SDK_APPID, options->conn_id, cur_timesec); + HAL_Snprintf(options->username, username_len, "%s;%s;%s;%ld", options->client_id, QCLOUD_IOT_DEVICE_SDK_APPID, options->conn_id, cur_timesec); #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - if (options->device_secret != NULL && options->username != NULL) { - char sign[41] = {0}; - utils_hmac_sha1(options->username, strlen(options->username), sign, options->device_secret, options->device_secret_len); - options->password = (char*) HAL_Malloc (51); - if (options->password == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - HAL_Snprintf(options->password, 51, "%s;hmacsha1", sign); - } + if (options->device_secret != NULL && options->username != NULL) { + char sign[41] = {0}; + utils_hmac_sha1(options->username, strlen(options->username), sign, options->device_secret, options->device_secret_len); + options->password = (char*) HAL_Malloc (51); + if (options->password == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + HAL_Snprintf(options->password, 51, "%s;hmacsha1", sign); + } #endif rem_len = _get_packet_connect_rem_len(options); @@ -172,7 +180,7 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon flags |= (options->username != NULL) ? MQTT_CONNECT_FLAG_USERNAME : 0; #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - flags |= MQTT_CONNECT_FLAG_PASSWORD; + flags |= MQTT_CONNECT_FLAG_PASSWORD; #endif mqtt_write_char(&ptr, flags); @@ -190,9 +198,9 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon } if ((flags & MQTT_CONNECT_FLAG_PASSWORD) && options->password != NULL) { - mqtt_write_utf8_string(&ptr, options->password); - HAL_Free(options->password); - options->password = NULL; + mqtt_write_utf8_string(&ptr, options->password); + HAL_Free(options->password); + options->password = NULL; } *serialized_len = (uint32_t) (ptr - buf); @@ -208,7 +216,8 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon * @param buflen the length in bytes of the data in the supplied buffer * @return int indicating function execution status */ -static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, unsigned char *buf, size_t buflen) { +static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, unsigned char *buf, size_t buflen) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(sessionPresent, QCLOUD_ERR_INVAL); @@ -229,7 +238,7 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, } header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; if (CONNACK != type) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -284,7 +293,8 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, * @param options * @return */ -static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) { +static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) +{ IOT_FUNC_ENTRY; @@ -294,8 +304,7 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) uint32_t len = 0; InitTimer(&connect_timer); - // if we have log in console, we need a longer timeout - countdown_ms(&connect_timer, pClient->command_timeout_ms + 10 * 1000); + countdown_ms(&connect_timer, pClient->command_timeout_ms); if (NULL != options) { _copy_connect_params(&(pClient->options), options); @@ -311,14 +320,14 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) // serialize CONNECT packet rc = _serialize_connect_packet(pClient->write_buf, pClient->write_buf_size, &(pClient->options), &len); if (QCLOUD_RET_SUCCESS != rc || 0 == len) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } // send CONNECT packet rc = send_mqtt_packet(pClient, len, &connect_timer); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } HAL_MutexUnlock(pClient->lock_write_buf); @@ -349,7 +358,8 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pParams) { +int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pParams) +{ IOT_FUNC_ENTRY; int rc; @@ -371,7 +381,8 @@ int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pPara IOT_FUNC_EXIT_RC(rc); } -int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; @@ -398,7 +409,8 @@ int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(QCLOUD_RET_MQTT_RECONNECTED); } -int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c index 84b835df..e02d26d2 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c @@ -19,14 +19,15 @@ extern "C" { #include "mqtt_client_net.h" -//TODO: how to implement +//TODO: how to implement /** * @brief Check if TLS connection is valid * * @param pNetwork * @return */ -int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) { +int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) +{ return 1; } @@ -37,13 +38,14 @@ int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) { * @param pConnectParams * @return */ -int qcloud_iot_mqtt_network_init(Network *pNetwork) { +int qcloud_iot_mqtt_network_init(Network *pNetwork) +{ int rc; /* first choice: TLS */ pNetwork->type = NETWORK_TLS; -#ifdef AUTH_WITH_NOTLS +#ifdef AUTH_WITH_NOTLS pNetwork->type = NETWORK_TCP; #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c index 5e24165f..9b13dc5c 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c @@ -31,19 +31,20 @@ extern "C" { * @param enddata pointer to the end of the data: do not read beyond * @return SUCCESS if successful, FAILURE if not */ -static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned char **pptr, unsigned char *enddata) { +static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned char **pptr, unsigned char *enddata) +{ int rc = QCLOUD_ERR_FAILURE; /* the first two bytes are the length of the string */ /* enough length to read the integer? */ if (enddata - (*pptr) > 1) { *stringLen = mqtt_read_uint16_t(pptr); /* increments pptr to point past length */ - - if(*stringLen > QCLOUD_IOT_MQTT_RX_BUF_LEN){ - Log_e("stringLen exceed QCLOUD_IOT_MQTT_RX_BUF_LEN"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - + + if (*stringLen > QCLOUD_IOT_MQTT_RX_BUF_LEN) { + Log_e("stringLen exceed QCLOUD_IOT_MQTT_RX_BUF_LEN"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + if (&(*pptr)[*stringLen] <= enddata) { *string = (char *) *pptr; *pptr += *stringLen; @@ -57,11 +58,12 @@ static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned ch /** * Determines the length of the MQTT publish packet that would be produced using the supplied parameters * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) - * @param topicName the topic name to be used in the publish + * @param topicName the topic name to be used in the publish * @param payload_len the length of the payload to be sent * @return the length of buffer needed to contain the serialized version of the packet */ -static uint32_t _get_publish_packet_len(uint8_t qos, char *topicName, size_t payload_len) { +static uint32_t _get_publish_packet_len(uint8_t qos, char *topicName, size_t payload_len) +{ size_t len = 0; len += 2 + strlen(topicName) + payload_len; @@ -138,7 +140,7 @@ static int _mask_push_pubInfo_to(Qcloud_IoT_Client *c, int len, unsigned short m * @return error code. 1 is success */ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16_t *packet_id, char **topicName, - uint16_t *topicNameLen,unsigned char **payload, size_t *payload_len, unsigned char *buf, size_t buf_len) + uint16_t *topicNameLen, unsigned char **payload, size_t *payload_len, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -165,11 +167,11 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 } header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; - *dup = (header&MQTT_HEADER_DUP_MASK)>>MQTT_HEADER_DUP_SHIFT; - *qos = (QoS)((header&MQTT_HEADER_QOS_MASK)>>MQTT_HEADER_QOS_SHIFT); - *retained = header&MQTT_HEADER_RETAIN_MASK; - + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; + *dup = (header & MQTT_HEADER_DUP_MASK) >> MQTT_HEADER_DUP_SHIFT; + *qos = (QoS)((header & MQTT_HEADER_QOS_MASK) >> MQTT_HEADER_QOS_SHIFT); + *retained = header & MQTT_HEADER_RETAIN_MASK; + if (PUBLISH != type) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -208,7 +210,8 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 */ int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes packet_type, uint8_t dup, uint16_t packet_id, - uint32_t *serialized_len) { + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); @@ -253,7 +256,8 @@ int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes pa static int _serialize_publish_packet(unsigned char *buf, size_t buf_len, uint8_t dup, QoS qos, uint8_t retained, uint16_t packet_id, char *topicName, unsigned char *payload, size_t payload_len, - uint32_t *serialized_len) { + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); @@ -292,7 +296,8 @@ static int _serialize_publish_packet(unsigned char *buf, size_t buf_len, uint8_t IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, PublishParams *pParams) { +int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, PublishParams *pParams) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -304,7 +309,7 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish int rc; ListNode *node = NULL; - + size_t topicLen = strlen(topicName); if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); @@ -326,25 +331,22 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish if (pParams->qos == QOS1) { pParams->id = get_next_packet_id(pClient); if (IOT_Log_Get_Level() <= eLOG_DEBUG) { - Log_d("publish topic seq=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + Log_d("publish topic seq=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + } else { + Log_i("publish topic seq=%d|topicName=%s", pParams->id, topicName); } - else { - Log_i("publish topic seq=%d|topicName=%s", pParams->id, topicName); + } else { + if (IOT_Log_Get_Level() <= eLOG_DEBUG) { + Log_d("publish packetID=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + } else { + Log_i("publish packetID=%d|topicName=%s", pParams->id, topicName); } } - else { - if (IOT_Log_Get_Level() <= eLOG_DEBUG) { - Log_d("publish packetID=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); - } - else { - Log_i("publish packetID=%d|topicName=%s", pParams->id, topicName); - } - } rc = _serialize_publish_packet(pClient->write_buf, pClient->write_buf_size, 0, pParams->qos, pParams->retained, pParams->id, topicName, (unsigned char *) pParams->payload, pParams->payload_len, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } @@ -359,20 +361,20 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish /* send the publish packet */ rc = send_mqtt_packet(pClient, len, &timer); - if (QCLOUD_RET_SUCCESS != rc) { - if (pParams->qos > QOS0) { - HAL_MutexLock(pClient->lock_list_pub); - list_remove(pClient->list_pub_wait_ack, node); - HAL_MutexUnlock(pClient->lock_list_pub); - } + if (QCLOUD_RET_SUCCESS != rc) { + if (pParams->qos > QOS0) { + HAL_MutexLock(pClient->lock_list_pub); + list_remove(pClient->list_pub_wait_ack, node); + HAL_MutexUnlock(pClient->lock_list_pub); + } - HAL_MutexUnlock(pClient->lock_write_buf); - IOT_FUNC_EXIT_RC(rc); - } + HAL_MutexUnlock(pClient->lock_write_buf); + IOT_FUNC_EXIT_RC(rc); + } - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); - IOT_FUNC_EXIT_RC(pParams->id); + IOT_FUNC_EXIT_RC(pParams->id); } #ifdef __cplusplus diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c index 0fbf0591..0d906f06 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c @@ -28,7 +28,8 @@ extern "C" { * @param topicFilters the array of topic filter strings to be used in the publish * @return the length of buffer needed to contain the serialized version of the packet */ -static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilters) { +static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilters) +{ size_t i; size_t len = 2; /* packetid */ @@ -51,7 +52,8 @@ static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilter * @return the length of the serialized data. <= 0 indicates error */ static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8_t dup, uint16_t packet_id, uint32_t count, - char **topicFilters, QoS *requestedQoSs, uint32_t *serialized_len) { + char **topicFilters, QoS *requestedQoSs, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -90,7 +92,8 @@ static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8 IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, SubscribeParams *pParams) { +int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, SubscribeParams *pParams) +{ IOT_FUNC_ENTRY; int rc; @@ -105,7 +108,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub uint16_t packet_id = 0; ListNode *node = NULL; - + size_t topicLen = strlen(topicFilter); if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); @@ -115,7 +118,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub Log_e("QoS2 is not supported currently"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_QOS_NOT_SUPPORT); } - + if (!get_client_conn_state(pClient)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN) } @@ -126,10 +129,10 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub Log_e("malloc failed"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - + strcpy(topic_filter_stored, topicFilter); topic_filter_stored[topicLen] = 0; - + InitTimer(&timer); countdown_ms(&timer, pClient->command_timeout_ms); @@ -140,8 +143,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub rc = _serialize_subscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, &topic_filter_stored, &pParams->qos, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -160,7 +163,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } - + // send SUBSCRIBE packet rc = send_mqtt_packet(pClient, len, &timer); if (QCLOUD_RET_SUCCESS != rc) { @@ -168,8 +171,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub list_remove(pClient->list_sub_wait_ack, node); HAL_MutexUnlock(pClient->lock_list_sub); - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -178,7 +181,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub IOT_FUNC_EXIT_RC(packet_id); } -int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; @@ -208,7 +212,7 @@ int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { rc = qcloud_iot_mqtt_subscribe(pClient, topic, &temp_param); if (rc < 0) { - Log_e("resubscribe failed %d, topic: %s", rc, topic); + Log_e("resubscribe failed %d, topic: %s", rc, topic); IOT_FUNC_EXIT_RC(rc); } } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c index 75357f13..3b11d2de 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c @@ -28,7 +28,8 @@ extern "C" { * @param topicFilters the array of topic filter strings to be used in the publish * @return the length of buffer needed to contain the serialized version of the packet */ -static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilters) { +static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilters) +{ size_t i; size_t len = 2; /* packetid */ @@ -51,9 +52,10 @@ static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilt * @return int indicating function execution status */ static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, - uint8_t dup, uint16_t packet_id, - uint32_t count, char **topicFilters, - uint32_t *serialized_len) { + uint8_t dup, uint16_t packet_id, + uint32_t count, char **topicFilters, + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -89,7 +91,8 @@ static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { +int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) +{ IOT_FUNC_ENTRY; int rc; @@ -108,12 +111,12 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); } - + /* Remove from message handler array */ HAL_MutexLock(pClient->lock_generic); - for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((pClient->sub_handles[i].topic_filter != NULL && !strcmp(pClient->sub_handles[i].topic_filter, topicFilter)) - || strstr(topicFilter,"/#") != NULL || strstr(topicFilter,"/+") != NULL) { + || strstr(topicFilter, "/#") != NULL || strstr(topicFilter, "/+") != NULL) { /* notify this event to topic subscriber */ if (NULL != pClient->sub_handles[i].sub_event_handler) pClient->sub_handles[i].sub_event_handler( @@ -156,8 +159,8 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { rc = _serialize_unsubscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, &topic_filter_stored, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -182,8 +185,8 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { list_remove(pClient->list_sub_wait_ack, node); HAL_MutexUnlock(pClient->lock_list_sub); - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c index 107a4512..cbad49b0 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c @@ -27,7 +27,7 @@ static uint32_t _get_random_interval(void) { srand((unsigned)HAL_GetTimeMs()); /* range: 1000 - 2000 ms, in 10ms unit */ - return (rand() % 100 + 100)*10; + return (rand() % 100 + 100) * 10; } @@ -43,7 +43,7 @@ static void _iot_disconnect_callback(Qcloud_IoT_Client *pClient) } } -static void _reconnect_callback(Qcloud_IoT_Client* pClient) +static void _reconnect_callback(Qcloud_IoT_Client* pClient) { if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; @@ -60,10 +60,11 @@ static void _reconnect_callback(Qcloud_IoT_Client* pClient) * @param pClient * @return */ -static int _handle_disconnect(Qcloud_IoT_Client *pClient) { +static int _handle_disconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; - + if (0 == get_client_conn_state(pClient)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } @@ -76,7 +77,7 @@ static int _handle_disconnect(Qcloud_IoT_Client *pClient) { } Log_e("disconnect MQTT for some reasons.."); - + _iot_disconnect_callback(pClient); // exceptional disconnection @@ -90,7 +91,8 @@ static int _handle_disconnect(Qcloud_IoT_Client *pClient) { * @param pClient * @return */ -static int _handle_reconnect(Qcloud_IoT_Client *pClient) { +static int _handle_reconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int8_t isPhysicalLayerConnected = 1; @@ -102,7 +104,7 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { } if (NULL != pClient->network_stack.is_connected) { - isPhysicalLayerConnected = (int8_t) pClient->network_stack.is_connected(&(pClient->network_stack)); // always return 1 + isPhysicalLayerConnected = (int8_t) pClient->network_stack.is_connected(&(pClient->network_stack)); // always return 1 } if (isPhysicalLayerConnected) { @@ -112,15 +114,14 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { _reconnect_callback(pClient); #ifdef LOG_UPLOAD if (is_log_uploader_init()) { - int log_level; + int log_level; if (qcloud_get_log_level(pClient, &log_level) < 0) { Log_e("client get log topic failed: %d", rc); } } -#endif +#endif IOT_FUNC_EXIT_RC(rc); - } - else { + } else { Log_e("attempt to reconnect failed, errCode: %d", rc); rc = QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT; } @@ -167,7 +168,7 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) IOT_FUNC_EXIT_RC(rc); } - /* there is no ping outstanding - send one */ + /* there is no ping outstanding - send one */ HAL_MutexLock(pClient->lock_write_buf); rc = serialize_packet_with_zero_payload(pClient->write_buf, pClient->write_buf_size, PINGREQ, &serialized_len); if (QCLOUD_RET_SUCCESS != rc) { @@ -177,25 +178,25 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) /* send the ping packet */ int i = 0; - InitTimer(&timer); + InitTimer(&timer); do { countdown_ms(&timer, pClient->command_timeout_ms); rc = send_mqtt_packet(pClient, serialized_len, &timer); } while (QCLOUD_RET_SUCCESS != rc && (i++ < 3)); - + if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); //If sending a PING fails, propably the connection is not OK and we decide to disconnect and begin reconnection attempts Log_e("Fail to send PING request. Something wrong with the connection."); rc = _handle_disconnect(pClient); IOT_FUNC_EXIT_RC(rc); } HAL_MutexUnlock(pClient->lock_write_buf); - + HAL_MutexLock(pClient->lock_generic); pClient->is_ping_outstanding++; /* start a timer to wait for PINGRESP from server */ - countdown(&pClient->ping_timer, Min(5, pClient->options.keep_alive_interval/2)); + countdown(&pClient->ping_timer, Min(5, pClient->options.keep_alive_interval / 2)); HAL_MutexUnlock(pClient->lock_generic); Log_d("PING request %u has been sent...", pClient->is_ping_outstanding); @@ -210,7 +211,8 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) * * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for failure */ -int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { +int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) +{ IOT_FUNC_ENTRY; int rc = QCLOUD_RET_SUCCESS; @@ -234,8 +236,8 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { countdown_ms(&timer, timeout_ms); // 3. main loop for packet reading/handling and keep alive maintainance - while (!expired(&timer)) { - + while (!expired(&timer)) { + if (!get_client_conn_state(pClient)) { if (pClient->current_reconnect_wait_interval > MAX_RECONNECT_WAIT_INTERVAL) { rc = QCLOUD_ERR_MQTT_RECONNECT_TIMEOUT; @@ -244,7 +246,7 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { rc = _handle_reconnect(pClient); continue; - } + } rc = cycle_for_read(pClient, &timer, &packet_type, QOS0); @@ -256,11 +258,10 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { qcloud_iot_mqtt_sub_info_proc(pClient); rc = _mqtt_keep_alive(pClient); - } - else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_SSL_READ || - rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN || rc == QCLOUD_ERR_TCP_READ_FAIL){ - Log_e("network read failed, rc: %d. MQTT Disconnect.", rc); - rc = _handle_disconnect(pClient); + } else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_SSL_READ || + rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN || rc == QCLOUD_ERR_TCP_READ_FAIL) { + Log_e("network read failed, rc: %d. MQTT Disconnect.", rc); + rc = _handle_disconnect(pClient); } if (rc == QCLOUD_ERR_MQTT_NO_CONN) { @@ -453,10 +454,10 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) /* notify this event to topic subscriber */ if (NULL != sub_info->handler.sub_event_handler) - sub_info->handler.sub_event_handler(pClient, - MQTT_EVENT_SUBCRIBE_TIMEOUT, sub_info->handler.handler_user_data); - - } else { + sub_info->handler.sub_event_handler(pClient, + MQTT_EVENT_SUBCRIBE_TIMEOUT, sub_info->handler.handler_user_data); + + } else { /* unsubscribe timeout */ msg.event_type = MQTT_EVENT_UNSUBCRIBE_TIMEOUT; msg.msg = (void *)(uintptr_t)packet_id; @@ -467,7 +468,7 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) if (NULL != sub_info->handler.topic_filter) HAL_Free((void *)(sub_info->handler.topic_filter)); - + temp_node = node; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_aciton.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_aciton.c index 4c4be1df..42a495aa 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_aciton.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_aciton.c @@ -28,51 +28,51 @@ #include "data_template_client_json.h" #include "qcloud_iot_export_data_template.h" -//Action Subscribe -static int _parse_action_input(DeviceAction *pAction, char *pInput) -{ - int i; - char *temp; - DeviceProperty *pActionInput = pAction->pInput; +//Action Subscribe +static int _parse_action_input(DeviceAction *pAction, char *pInput) +{ + int i; + char *temp; + DeviceProperty *pActionInput = pAction->pInput; - //check and copy - for (i = 0; i < pAction->input_num; i++) { - if (JSTRING == pActionInput[i].type) { - pActionInput[i].data = LITE_json_value_of(pActionInput[i].key, pInput); - if(NULL == pActionInput[i].data) { - Log_e("action input data [%s] not found!", pActionInput[i].key); - return -1; - } - } else { - temp = LITE_json_value_of(pActionInput[i].key, pInput); - if(NULL == temp) { - Log_e("action input data [%s] not found!", pActionInput[i].key); - return -1; - } - if(JINT32 == pActionInput[i].type) { - if (sscanf(temp, "%" SCNi32, (int32_t *)pActionInput[i].data) != 1) { - HAL_Free(temp); - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - return -1; - } - } else if( JFLOAT == pActionInput[i].type) { - if (sscanf(temp, "%f", (float *)pActionInput[i].data) != 1) { - HAL_Free(temp); - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - return -1; - } - } else if( JUINT32 == pActionInput[i].type) { - if (sscanf(temp, "%" SCNu32, (uint32_t *) pActionInput[i].data) != 1) { - HAL_Free(temp); - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - return -1; - } - } - HAL_Free(temp); - } - } + //check and copy + for (i = 0; i < pAction->input_num; i++) { + if (JSTRING == pActionInput[i].type) { + pActionInput[i].data = LITE_json_value_of(pActionInput[i].key, pInput); + if (NULL == pActionInput[i].data) { + Log_e("action input data [%s] not found!", pActionInput[i].key); + return -1; + } + } else { + temp = LITE_json_value_of(pActionInput[i].key, pInput); + if (NULL == temp) { + Log_e("action input data [%s] not found!", pActionInput[i].key); + return -1; + } + if (JINT32 == pActionInput[i].type) { + if (sscanf(temp, "%" SCNi32, (int32_t *)pActionInput[i].data) != 1) { + HAL_Free(temp); + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + return -1; + } + } else if ( JFLOAT == pActionInput[i].type) { + if (sscanf(temp, "%f", (float *)pActionInput[i].data) != 1) { + HAL_Free(temp); + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + return -1; + } + } else if ( JUINT32 == pActionInput[i].type) { + if (sscanf(temp, "%" SCNu32, (uint32_t *) pActionInput[i].data) != 1) { + HAL_Free(temp); + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + return -1; + } + } + HAL_Free(temp); + } + } - return 0; + return 0; } static void _handle_aciton(Qcloud_IoT_Template *pTemplate, List *list, const char *pClientToken, const char *pActionId, uint32_t timestamp, char *pInput) @@ -100,18 +100,18 @@ static void _handle_aciton(Qcloud_IoT_Template *pTemplate, List *list, const cha Log_e("node's value is invalid!"); continue; } - - ActionHandler *pActionHandle = (ActionHandler *)node->val; - // check action id and call callback - if(0 == strcmp(pActionId,((DeviceAction*)pActionHandle->action)->pActionId)){ - if(NULL != pActionHandle->callback) { - if(!_parse_action_input(pActionHandle->action, pInput)) { - ((DeviceAction*)pActionHandle->action)->timestamp = timestamp; - pActionHandle->callback(pTemplate, pClientToken, pActionHandle->action); - } - } - } + ActionHandler *pActionHandle = (ActionHandler *)node->val; + + // check action id and call callback + if (0 == strcmp(pActionId, ((DeviceAction*)pActionHandle->action)->pActionId)) { + if (NULL != pActionHandle->callback) { + if (!_parse_action_input(pActionHandle->action, pInput)) { + ((DeviceAction*)pActionHandle->action)->timestamp = timestamp; + pActionHandle->callback(pTemplate, pClientToken, pActionHandle->action); + } + } + } } list_iterator_destroy(iter); } @@ -119,93 +119,92 @@ static void _handle_aciton(Qcloud_IoT_Template *pTemplate, List *list, const cha IOT_FUNC_EXIT; } -static void _on_action_handle_callback(void *pClient, MQTTMessage *message, void *pUserData) +static void _on_action_handle_callback(void *pClient, MQTTMessage *message, void *pUserData) { - POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + POINTER_SANITY_CHECK_RTN(message); +// Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; +// Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)pUserData; - char *type_str = NULL; + char *type_str = NULL; char* client_token = NULL; char* action_id = NULL; - char *pInput = NULL; - int timestamp = 0; - - Log_d("recv:%.*s",(int) message->payload_len, (char *) message->payload); + char *pInput = NULL; + int timestamp = 0; - // prase_method - if (!parse_template_method_type((char *) message->payload, &type_str)) - { + Log_d("recv:%.*s", (int) message->payload_len, (char *) message->payload); + + // prase_method + if (!parse_template_method_type((char *) message->payload, &type_str)) { Log_e("Fail to parse method!"); goto EXIT; } if (strcmp(type_str, CALL_ACTION)) { - goto EXIT; - } + goto EXIT; + } - // prase client Token + // prase client Token if (!parse_client_token((char *) message->payload, &client_token)) { Log_e("fail to parse client token!"); goto EXIT; } - // prase action ID - if (!parse_action_id((char *) message->payload, &action_id)) { + // prase action ID + if (!parse_action_id((char *) message->payload, &action_id)) { Log_e("fail to parse action id!"); goto EXIT; } - // prase timestamp - if (!parse_time_stamp((char *) message->payload, ×tamp)) { + // prase timestamp + if (!parse_time_stamp((char *) message->payload, ×tamp)) { Log_e("fail to parse timestamp!"); goto EXIT; } - // prase action input - if (!parse_action_input((char *) message->payload, &pInput)) { + // prase action input + if (!parse_action_input((char *) message->payload, &pInput)) { Log_e("fail to parse action input!"); goto EXIT; - } + } - //find action ID in register list and call handle - if (template_client != NULL) + //find action ID in register list and call handle + if (template_client != NULL) _handle_aciton(template_client, template_client->inner_data.action_handle_list, client_token, action_id, timestamp, pInput); EXIT: - HAL_Free(type_str); - HAL_Free(client_token); - HAL_Free(pInput); - return; + HAL_Free(type_str); + HAL_Free(client_token); + HAL_Free(pInput); + return; } int IOT_Action_Init(void *c) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; - static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; + static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - - if (size < 0 || size > sizeof(topic_name) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } + int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _on_action_handle_callback; - - return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _on_action_handle_callback; + sub_params.user_data = pTemplate; + + return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); } -//Action register +//Action register static int _add_action_handle_to_template_list(Qcloud_IoT_Template *pTemplate, DeviceAction *pAction, OnActionHandleCallback callback) { IOT_FUNC_ENTRY; ActionHandler *action_handle = (ActionHandler *)HAL_Malloc(sizeof(ActionHandler)); - if (NULL == action_handle) - { + if (NULL == action_handle) { Log_e("run memory malloc is error!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -236,14 +235,14 @@ int IOT_Action_Register(void *pTemplate, DeviceAction *pAction, OnActionHandleCa { IOT_FUNC_ENTRY; - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; POINTER_SANITY_CHECK(pTemplate, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(pAction, QCLOUD_ERR_INVAL); - if (_check_action_existence(ptemplate, pAction)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_ACTION_EXIST); + if (_check_action_existence(ptemplate, pAction)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_ACTION_EXIST); int rc; HAL_MutexLock(ptemplate->mutex); @@ -255,9 +254,9 @@ int IOT_Action_Register(void *pTemplate, DeviceAction *pAction, OnActionHandleCa int IOT_Action_Remove(void *pTemplate, DeviceAction *pAction) { - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; - if (!_check_action_existence(ptemplate, pAction)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_NOT_ACTION_EXIST); + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; + if (!_check_action_existence(ptemplate, pAction)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_NOT_ACTION_EXIST); int rc = QCLOUD_RET_SUCCESS; @@ -271,130 +270,129 @@ int IOT_Action_Remove(void *pTemplate, DeviceAction *pAction) list_remove(ptemplate->inner_data.action_handle_list, node); } HAL_MutexUnlock(ptemplate->mutex); - + return rc; } //Action post to server -static int _iot_action_json_init(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction) +static int _iot_action_json_init(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction) { - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - int32_t rc_of_snprintf; - memset(jsonBuffer, 0, sizeOfBuffer); - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", REPORT_ACTION, pClientToken); + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + int32_t rc_of_snprintf; + memset(jsonBuffer, 0, sizeOfBuffer); + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", REPORT_ACTION, pClientToken); return check_snprintf_return(rc_of_snprintf, sizeOfBuffer); } -static int _iot_construct_action_json(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction, sReplyPara *replyPara) -{ - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - uint8_t i; - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAction, QCLOUD_ERR_INVAL); +static int _iot_construct_action_json(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction, sReplyPara *replyPara) +{ + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + uint8_t i; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - int rc = _iot_action_json_init(ptemplate, jsonBuffer, sizeOfBuffer, pClientToken, pAction); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("event json init failed: %d", rc); - return rc; - } + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAction, QCLOUD_ERR_INVAL); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } + int rc = _iot_action_json_init(ptemplate, jsonBuffer, sizeOfBuffer, pClientToken, pAction); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("event json init failed: %d", rc); + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"code\":%d, \"status\":\"%s\", \"response\":{",\ - replyPara->code, replyPara->status_msg); + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"code\":%d, \"status\":\"%s\", \"response\":{", \ + replyPara->code, replyPara->status_msg); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } - DeviceProperty *pJsonNode = pAction->pOutput; - for (i = 0; i < pAction->output_num; i++) { - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + DeviceProperty *pJsonNode = pAction->pOutput; + for (i = 0; i < pAction->output_num; i++) { + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - Log_e("%dth/%d null event property data", i, pAction->output_num); - return QCLOUD_ERR_INVAL; - } - pJsonNode++; - } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + Log_e("%dth/%d null event property data", i, pAction->output_num); + return QCLOUD_ERR_INVAL; + } + pJsonNode++; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); - //finish json - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); - - return check_snprintf_return(rc_of_snprintf, remain_size); -} + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + //finish json + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); + + return check_snprintf_return(rc_of_snprintf, remain_size); +} static int _publish_action_to_cloud(void *c, char *pJsonDoc) { - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; - int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > sizeof(topic) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); - return QCLOUD_ERR_FAILURE; - } + int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (size < 0 || size > sizeof(topic) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); + return QCLOUD_ERR_FAILURE; + } - PublishParams pubParams = DEFAULT_PUB_PARAMS; - pubParams.qos = QOS1; - pubParams.payload_len = strlen(pJsonDoc); - pubParams.payload = (char *) pJsonDoc; + PublishParams pubParams = DEFAULT_PUB_PARAMS; + pubParams.qos = QOS1; + pubParams.payload_len = strlen(pJsonDoc); + pubParams.payload = (char *) pJsonDoc; - rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); + rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -int IOT_ACTION_REPLY(void *pClient, const char *pClientToken, char *pJsonDoc, size_t sizeOfBuffer, DeviceAction *pAction, sReplyPara *replyPara) +int IOT_ACTION_REPLY(void *pClient, const char *pClientToken, char *pJsonDoc, size_t sizeOfBuffer, DeviceAction *pAction, sReplyPara *replyPara) { - int rc; - - rc = _iot_construct_action_json(pClient, pJsonDoc, sizeOfBuffer, pClientToken, pAction, replyPara); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("construct action json fail, %d",rc); - return rc; - } - - rc = _publish_action_to_cloud(pClient, pJsonDoc); - if (rc < 0) { - Log_e("publish action to cloud fail, %d",rc); - } + int rc; - return rc; + rc = _iot_construct_action_json(pClient, pJsonDoc, sizeOfBuffer, pClientToken, pAction, replyPara); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("construct action json fail, %d", rc); + return rc; + } + + rc = _publish_action_to_cloud(pClient, pJsonDoc); + if (rc < 0) { + Log_e("publish action to cloud fail, %d", rc); + } + + return rc; } -#endif +#endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client.c index 93df146c..4eb86397 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client.c @@ -31,95 +31,96 @@ extern "C" { #include "data_template_client_common.h" -static void _init_request_params(RequestParams *pParams, Method method, OnReplyCallback callback, void *userContext, uint8_t timeout_sec) { - pParams->method = method; - pParams->user_context = userContext; - pParams->timeout_sec = timeout_sec; - pParams->request_callback = callback; +static void _init_request_params(RequestParams *pParams, Method method, OnReplyCallback callback, void *userContext, uint8_t timeout_sec) +{ + pParams->method = method; + pParams->user_context = userContext; + pParams->timeout_sec = timeout_sec; + pParams->request_callback = callback; } -int IOT_Template_Publish(void *handle, char *topicName, PublishParams *pParams) +int IOT_Template_Publish(void *handle, char *topicName, PublishParams *pParams) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; - return qcloud_iot_mqtt_publish(template_client->mqtt, topicName, pParams); + return qcloud_iot_mqtt_publish(template_client->mqtt, topicName, pParams); } -int IOT_Template_Subscribe(void *handle, char *topicFilter, SubscribeParams *pParams) +int IOT_Template_Subscribe(void *handle, char *topicFilter, SubscribeParams *pParams) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; - return qcloud_iot_mqtt_subscribe(template_client->mqtt, topicFilter, pParams); + return qcloud_iot_mqtt_subscribe(template_client->mqtt, topicFilter, pParams); } -int IOT_Template_Unsubscribe(void *handle, char *topicFilter) +int IOT_Template_Unsubscribe(void *handle, char *topicFilter) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; - return qcloud_iot_mqtt_unsubscribe(template_client->mqtt, topicFilter); + return qcloud_iot_mqtt_unsubscribe(template_client->mqtt, topicFilter); } bool IOT_Template_IsConnected(void *handle) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - IOT_FUNC_EXIT_RC(IOT_MQTT_IsConnected(template_client->mqtt)) + IOT_FUNC_EXIT_RC(IOT_MQTT_IsConnected(template_client->mqtt)) } -int IOT_Template_Register_Property(void *handle, DeviceProperty *pProperty, OnPropRegCallback callback) +int IOT_Template_Register_Property(void *handle, DeviceProperty *pProperty, OnPropRegCallback callback) { IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - int rc; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + int rc; if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (template_common_check_property_existence(ptemplate, pProperty)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_PROPERTY_EXIST); + if (template_common_check_property_existence(ptemplate, pProperty)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_PROPERTY_EXIST); rc = template_common_register_property_on_delta(ptemplate, pProperty, callback); IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_UnRegister_Property(void *handle, DeviceProperty *pProperty) +int IOT_Template_UnRegister_Property(void *handle, DeviceProperty *pProperty) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { + if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (!template_common_check_property_existence(ptemplate, pProperty)) { + if (!template_common_check_property_existence(ptemplate, pProperty)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_NOT_PROPERTY_EXIST); } - int rc = template_common_remove_property(ptemplate, pProperty); - IOT_FUNC_EXIT_RC(rc); + int rc = template_common_remove_property(ptemplate, pProperty); + IOT_FUNC_EXIT_RC(rc); } #ifdef ACTION_ENABLED -int IOT_Template_Register_Action(void *handle, DeviceAction *pAction, OnActionHandleCallback callback) +int IOT_Template_Register_Action(void *handle, DeviceAction *pAction, OnActionHandleCallback callback) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - int rc; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + int rc; if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); @@ -129,43 +130,43 @@ int IOT_Template_Register_Action(void *handle, DeviceAction *pAction, OnActionHa IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_UnRegister_Action(void *handle, DeviceAction *pAction) +int IOT_Template_UnRegister_Action(void *handle, DeviceAction *pAction) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { + if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - int rc = IOT_Action_Remove(ptemplate, pAction); - IOT_FUNC_EXIT_RC(rc); + int rc = IOT_Action_Remove(ptemplate, pAction); + IOT_FUNC_EXIT_RC(rc); } #endif static void _copy_template_init_params_to_mqtt(MQTTInitParams *pMqttInitParams, TemplateInitParams *templateInitParams) { - pMqttInitParams->device_name = templateInitParams->device_name; + pMqttInitParams->device_name = templateInitParams->device_name; pMqttInitParams->product_id = templateInitParams->product_id; #ifdef AUTH_MODE_CERT - pMqttInitParams->cert_file = templateInitParams->cert_file; - pMqttInitParams->key_file = templateInitParams->key_file; + pMqttInitParams->cert_file = templateInitParams->cert_file; + pMqttInitParams->key_file = templateInitParams->key_file; #else - pMqttInitParams->device_secret = templateInitParams->device_secret; + pMqttInitParams->device_secret = templateInitParams->device_secret; #endif - pMqttInitParams->command_timeout = templateInitParams->command_timeout; + pMqttInitParams->command_timeout = templateInitParams->command_timeout; pMqttInitParams->keep_alive_interval_ms = templateInitParams->keep_alive_interval_ms; pMqttInitParams->clean_session = templateInitParams->clean_session; pMqttInitParams->auto_connect_enable = templateInitParams->auto_connect_enable; } -static void _reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) +static void _reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) { - Request *request = (Request *)pUserdata; - Log_d("replyAck=%d", replyAck); + Request *request = (Request *)pUserdata; + Log_d("replyAck=%d", replyAck); if (NULL != pReceivedJsonDocument) { Log_d("Received Json Document=%s", pReceivedJsonDocument); @@ -173,117 +174,117 @@ static void _reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const Log_d("Received Json Document is NULL"); } - *((ReplyAck *)(request->user_context))= replyAck; + *((ReplyAck *)(request->user_context)) = replyAck; } /*control data may be for get status replay*/ -static void _get_status_reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) +static void _get_status_reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) { - Request *request = (Request *)pUserdata; - - Log_d("replyAck=%d", replyAck); - if (NULL == pReceivedJsonDocument) { + Request *request = (Request *)pUserdata; + + Log_d("replyAck=%d", replyAck); + if (NULL == pReceivedJsonDocument) { Log_d("Received Json Document is NULL"); + } else { + Log_d("Received Json Document=%s", pReceivedJsonDocument); } - if (*((ReplyAck *)request->user_context) == ACK_ACCEPTED){ - Log_d("Received Json Document=%s", pReceivedJsonDocument); - IOT_Template_ClearControl(pClient, request->client_token, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - }else{ - *((ReplyAck *)request->user_context)= replyAck; - } + if (*((ReplyAck *)request->user_context) == ACK_ACCEPTED) { + IOT_Template_ClearControl(pClient, request->client_token, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + } else { + *((ReplyAck *)request->user_context) = replyAck; + } } -static int _template_ConstructControlReply(char *jsonBuffer, size_t sizeOfBuffer, sReplyPara *replyPara) +static int _template_ConstructControlReply(char *jsonBuffer, size_t sizeOfBuffer, sReplyPara *replyPara) { - - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - int rc; - size_t remain_size = 0; - int32_t rc_of_snprintf; + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + + int rc; + size_t remain_size = 0; + int32_t rc_of_snprintf; if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } - rc_of_snprintf = HAL_Snprintf(jsonBuffer , remain_size, "{\"code\":%d, \"clientToken\":\"%s\",", replyPara->code, get_control_clientToken()); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - + rc_of_snprintf = HAL_Snprintf(jsonBuffer, remain_size, "{\"code\":%d, \"clientToken\":\"%s\",", replyPara->code, get_control_clientToken()); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { return rc; } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } - if(strlen(replyPara->status_msg) > 0){ - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"status\":\"%s\"}", replyPara->status_msg); - }else{ - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}"); - } + if (strlen(replyPara->status_msg) > 0) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"status\":\"%s\"}", replyPara->status_msg); + } else { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}"); + } - rc = check_snprintf_return(rc_of_snprintf, remain_size); - - return rc; + rc = check_snprintf_return(rc_of_snprintf, remain_size); + + return rc; } -static void _template_mqtt_event_handler(void *pclient, void *context, MQTTEventMsg *msg) +static void _template_mqtt_event_handler(void *pclient, void *context, MQTTEventMsg *msg) { - uintptr_t packet_id = (uintptr_t)msg->msg; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)context; - MQTTMessage* topic_info = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)context; + MQTTMessage* topic_info = (MQTTMessage*)msg->msg; - switch (msg->event_type) { - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_d("template subscribe success, packet-id=%u", packet_id); - if (template_client->inner_data.sync_status > 0) - template_client->inner_data.sync_status = 0; - break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_d("template subscribe wait ack timeout, packet-id=%u", packet_id); - if (template_client->inner_data.sync_status > 0) - template_client->inner_data.sync_status = -1; - break; - case MQTT_EVENT_SUBCRIBE_NACK: - Log_d("template subscribe nack, packet-id=%u", packet_id); - if (template_client->inner_data.sync_status > 0) - template_client->inner_data.sync_status = -1; - break; - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_d("template topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - topic_info->topic_len, - topic_info->ptopic, - topic_info->payload_len, - topic_info->payload); - break; - default: - /* Log_i("Should NOT arrive here."); */ - break; - } - if (template_client->event_handle.h_fp != NULL) - { - template_client->event_handle.h_fp(template_client, template_client->event_handle.context, msg); - } + switch (msg->event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_d("template subscribe success, packet-id=%u", packet_id); + if (template_client->inner_data.sync_status > 0) + template_client->inner_data.sync_status = 0; + break; + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_d("template subscribe wait ack timeout, packet-id=%u", packet_id); + if (template_client->inner_data.sync_status > 0) + template_client->inner_data.sync_status = -1; + break; + case MQTT_EVENT_SUBCRIBE_NACK: + Log_d("template subscribe nack, packet-id=%u", packet_id); + if (template_client->inner_data.sync_status > 0) + template_client->inner_data.sync_status = -1; + break; + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_d("template topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + topic_info->topic_len, + topic_info->ptopic, + topic_info->payload_len, + topic_info->payload); + break; + default: + /* Log_i("Should NOT arrive here."); */ + break; + } + if (template_client->event_handle.h_fp != NULL) { + template_client->event_handle.h_fp(template_client, template_client->event_handle.context, msg); + } } -int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, DeviceProperty *pDeviceProperties[]) -{ - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pDeviceProperties, QCLOUD_ERR_INVAL); +int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, DeviceProperty *pDeviceProperties[]) +{ + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pDeviceProperties, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - size_t remain_size = 0; int32_t rc_of_snprintf = 0; - int rc; + int rc; int8_t i; - build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } @@ -295,7 +296,7 @@ int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_ } for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode = pDeviceProperties[i]; + DeviceProperty *pJsonNode = pDeviceProperties[i]; if (pJsonNode != NULL && pJsonNode->key != NULL) { rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); @@ -313,140 +314,141 @@ int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_ rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}}"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("construct datatemplate report array failed: %d", rc); - return rc; - } + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("construct datatemplate report array failed: %d", rc); + return rc; + } - return rc; + return rc; } -int IOT_Template_ClearControl(void *handle, char *pClientToken, OnReplyCallback callback, uint32_t timeout_ms) +int IOT_Template_ClearControl(void *handle, char *pClientToken, OnReplyCallback callback, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; - char JsonDoc[MAX_CLEAE_DOC_LEN]; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); + int rc; + char JsonDoc[MAX_CLEAE_DOC_LEN]; - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - memset(JsonDoc, 0, MAX_CLEAE_DOC_LEN); - int rc_of_snprintf = HAL_Snprintf(JsonDoc, MAX_CLEAE_DOC_LEN, "{\"clientToken\":\"%s\"}", pClientToken); - rc = check_snprintf_return(rc_of_snprintf, MAX_CLEAE_DOC_LEN); + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + memset(JsonDoc, 0, MAX_CLEAE_DOC_LEN); + int rc_of_snprintf = HAL_Snprintf(JsonDoc, MAX_CLEAE_DOC_LEN, "{\"clientToken\":\"%s\"}", pClientToken); + rc = check_snprintf_return(rc_of_snprintf, MAX_CLEAE_DOC_LEN); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, CLEAR, callback, NULL, timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, JsonDoc, MAX_CLEAE_DOC_LEN); - IOT_FUNC_EXIT_RC(rc); + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, CLEAR, callback, NULL, timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, JsonDoc, MAX_CLEAE_DOC_LEN); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_Report(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) +int IOT_Template_Report(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; + int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - //Log_d("Report Document: %s", pJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, REPORT, callback, userContext, timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Template_Report_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) -{ - - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; - - if (IOT_MQTT_IsConnected(template->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - ReplyAck ack_report = ACK_NONE; - rc = IOT_Template_Report(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - - while (ACK_NONE == ack_report) { - IOT_Template_Yield(handle, 200); + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (ACK_ACCEPTED == ack_report) { + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + //Log_d("Report Document: %s", pJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, REPORT, callback, userContext, timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Template_Report_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) +{ + + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; + + if (IOT_MQTT_IsConnected(template->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + ReplyAck ack_report = ACK_NONE; + rc = IOT_Template_Report(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); + if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + while (ACK_NONE == ack_report) { +#ifndef MULTITHREAD_ENABLED + IOT_Template_Yield(handle, 200); +#else + IOT_Template_Yield_Without_MQTT_Yield(handle, 200); +#endif + } + + if (ACK_ACCEPTED == ack_report) { rc = QCLOUD_RET_SUCCESS; } else if (ACK_TIMEOUT == ack_report) { rc = QCLOUD_ERR_REPORT_TIMEOUT; } else if (ACK_REJECTED == ack_report) { rc = QCLOUD_ERR_REPORT_REJECTED; } - - IOT_FUNC_EXIT_RC(rc); + + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t sizeOfBuffer, DeviceProperty *pPlatInfo, DeviceProperty *pSelfInfo) -{ - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pPlatInfo, QCLOUD_ERR_INVAL); +int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t sizeOfBuffer, DeviceProperty *pPlatInfo, DeviceProperty *pSelfInfo) +{ + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pPlatInfo, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - size_t remain_size = 0; int32_t rc_of_snprintf = 0; - int rc; + int rc; - build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } @@ -457,13 +459,13 @@ int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t si return rc; } - DeviceProperty *pJsonNode = pPlatInfo; - while((NULL != pJsonNode)&&(NULL != pJsonNode->key)) { + DeviceProperty *pJsonNode = pPlatInfo; + while ((NULL != pJsonNode) && (NULL != pJsonNode->key)) { rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - pJsonNode++; + pJsonNode++; } if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { @@ -472,183 +474,188 @@ int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t si rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } - pJsonNode = pSelfInfo; - if((NULL == pJsonNode)||(NULL == pJsonNode->key)){ - Log_d("No self define info"); - goto end; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 2, remain_size, ", \"device_label\":{"); + pJsonNode = pSelfInfo; + if ((NULL == pJsonNode) || (NULL == pJsonNode->key)) { + Log_d("No self define info"); + goto end; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 2, remain_size, ", \"device_label\":{"); rc = check_snprintf_return(rc_of_snprintf, remain_size); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - while((NULL != pJsonNode)&&(NULL != pJsonNode->key)) { + while ((NULL != pJsonNode) && (NULL != pJsonNode->key)) { rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - pJsonNode++; + pJsonNode++; } rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}},"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } end: - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - return rc; + return rc; } -int IOT_Template_Report_SysInfo(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) +int IOT_Template_Report_SysInfo(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; + int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - //Log_d("eLOG_INFO Document: %s", pJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, RINFO, callback, userContext, timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Template_Report_SysInfo_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) -{ - - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; - - if (IOT_MQTT_IsConnected(template->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - ReplyAck ack_report = ACK_NONE; - rc = IOT_Template_Report_SysInfo(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - - while (ACK_NONE == ack_report) { - IOT_Template_Yield(handle, 200); + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (ACK_ACCEPTED == ack_report) { + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + //Log_d("eLOG_INFO Document: %s", pJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, RINFO, callback, userContext, timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Template_Report_SysInfo_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) +{ + + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; + + if (IOT_MQTT_IsConnected(template->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + ReplyAck ack_report = ACK_NONE; + rc = IOT_Template_Report_SysInfo(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); + + if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + while (ACK_NONE == ack_report) { +#ifndef MULTITHREAD_ENABLED + IOT_Template_Yield(handle, 200); +#else + IOT_Template_Yield_Without_MQTT_Yield(handle, 200); +#endif + } + + if (ACK_ACCEPTED == ack_report) { rc = QCLOUD_RET_SUCCESS; } else if (ACK_TIMEOUT == ack_report) { rc = QCLOUD_ERR_REPORT_TIMEOUT; } else if (ACK_REJECTED == ack_report) { rc = QCLOUD_ERR_REPORT_REJECTED; } - - IOT_FUNC_EXIT_RC(rc); + + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_GetStatus(void *handle, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) +int IOT_Template_GetStatus(void *handle, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; + int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - char getRequestJsonDoc[MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN]; - build_empty_json(&(template_client->inner_data.token_num), getRequestJsonDoc); - - //Log_d("GET Status Document: %s", getRequestJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, GET, callback, userContext, timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, getRequestJsonDoc, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Template_GetStatus_sync(void *handle, uint32_t timeout_ms) -{ - - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* pTemplate = (Qcloud_IoT_Template*)handle; - - if (IOT_MQTT_IsConnected(pTemplate->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - ReplyAck ack_request = ACK_NONE; - rc = IOT_Template_GetStatus(handle, _get_status_reply_ack_cb, &ack_request, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - - while (ACK_NONE == ack_request) { - IOT_Template_Yield(handle, 200); + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (ACK_ACCEPTED == ack_request) { + + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + char getRequestJsonDoc[MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN]; + build_empty_json(&(template_client->inner_data.token_num), getRequestJsonDoc); + + //Log_d("GET Status Document: %s", getRequestJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, GET, callback, userContext, timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, getRequestJsonDoc, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Template_GetStatus_sync(void *handle, uint32_t timeout_ms) +{ + + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* pTemplate = (Qcloud_IoT_Template*)handle; + + if (IOT_MQTT_IsConnected(pTemplate->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + ReplyAck ack_request = ACK_NONE; + rc = IOT_Template_GetStatus(handle, _get_status_reply_ack_cb, &ack_request, timeout_ms); + if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + while (ACK_NONE == ack_request) { +#ifndef MULTITHREAD_ENABLED + IOT_Template_Yield(handle, 200); +#else + IOT_Template_Yield_Without_MQTT_Yield(handle, 200); +#endif + } + + if (ACK_ACCEPTED == ack_request) { rc = QCLOUD_RET_SUCCESS; } else if (ACK_TIMEOUT == ack_request) { rc = QCLOUD_ERR_GET_TIMEOUT; @@ -656,168 +663,178 @@ int IOT_Template_GetStatus_sync(void *handle, uint32_t timeout_ms) rc = QCLOUD_ERR_GET_REJECTED; } - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_ControlReply(void *handle, char *pJsonDoc, size_t sizeOfBuffer, sReplyPara *replyPara) +int IOT_Template_ControlReply(void *handle, char *pJsonDoc, size_t sizeOfBuffer, sReplyPara *replyPara) { - IOT_FUNC_ENTRY; - int rc; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - rc = _template_ConstructControlReply(pJsonDoc, sizeOfBuffer, replyPara); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Construct ControlReply fail,rc=%d",rc); - return rc; - } - Log_d("Report Document: %s", pJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, REPLY, NULL, NULL, replyPara->timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Template_Yield(void *handle, uint32_t timeout_ms) { - IOT_FUNC_ENTRY; int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)handle; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + rc = _template_ConstructControlReply(pJsonDoc, sizeOfBuffer, replyPara); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Construct ControlReply fail,rc=%d", rc); + return rc; + } + Log_d("Report Document: %s", pJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, REPLY, NULL, NULL, replyPara->timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Template_Yield(void *handle, uint32_t timeout_ms) +{ + + IOT_FUNC_ENTRY; + int rc; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); handle_template_expired_reply(ptemplate); - -#ifdef EVENT_POST_ENABLED - handle_template_expired_event(ptemplate); + +#ifdef EVENT_POST_ENABLED + handle_template_expired_event(ptemplate); #endif rc = IOT_MQTT_Yield(ptemplate->mqtt, timeout_ms); IOT_FUNC_EXIT_RC(rc); } -void* IOT_Template_Construct(TemplateInitParams *pParams) +void* IOT_Template_Construct(TemplateInitParams *pParams, void *pMqttClient) { - POINTER_SANITY_CHECK(pParams, NULL); - int rc; + POINTER_SANITY_CHECK(pParams, NULL); + int rc; - Qcloud_IoT_Template *template_client = NULL; - if ((template_client = (Qcloud_IoT_Template *)HAL_Malloc(sizeof(Qcloud_IoT_Template))) == NULL) { - Log_e("memory not enough to malloc TemplateClient"); - } + Qcloud_IoT_Template *template_client = NULL; + if ((template_client = (Qcloud_IoT_Template *)HAL_Malloc(sizeof(Qcloud_IoT_Template))) == NULL) { + Log_e("memory not enough to malloc TemplateClient"); + } - MQTTInitParams mqtt_init_params; - _copy_template_init_params_to_mqtt(&mqtt_init_params, pParams); + MQTTInitParams mqtt_init_params; + _copy_template_init_params_to_mqtt(&mqtt_init_params, pParams); - mqtt_init_params.event_handle.h_fp = _template_mqtt_event_handler; - mqtt_init_params.event_handle.context = template_client; + mqtt_init_params.event_handle.h_fp = _template_mqtt_event_handler; + mqtt_init_params.event_handle.context = template_client; - void *mqtt_client = NULL; - if ((mqtt_client = IOT_MQTT_Construct(&mqtt_init_params)) == NULL) { - HAL_Free(template_client); - goto End; - } + void *mqtt_client = NULL; + if (NULL == pMqttClient) { + if ((mqtt_client = IOT_MQTT_Construct(&mqtt_init_params)) == NULL) { + HAL_Free(template_client); + goto End; + } + } else { + mqtt_client = pMqttClient; + //TO DO: change device info handle logic + rc = iot_device_info_set(pParams->product_id, pParams->device_name); + if ( rc != QCLOUD_RET_SUCCESS) { + Log_e("failed to set device info: %d", rc); + } + } - template_client->mqtt = mqtt_client; - template_client->event_handle = pParams->event_handle; - template_client->inner_data.upstream_topic = NULL; - template_client->inner_data.downstream_topic = NULL; - template_client->inner_data.token_num = 0; - template_client->inner_data.eventflags = 0; - - rc = qcloud_iot_template_init(template_client); - if (rc != QCLOUD_RET_SUCCESS) { - IOT_MQTT_Destroy(&(template_client->mqtt)); - HAL_Free(template_client); - goto End; - } - - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - else { - template_client->inner_data.sync_status = rc; - while (rc == template_client->inner_data.sync_status) { - IOT_Template_Yield(template_client, 100); - } - if (0 == template_client->inner_data.sync_status) { - Log_i("Sync device data successfully"); - } else { - Log_e("Sync device data failed"); - } - } + template_client->mqtt = mqtt_client; + template_client->event_handle = pParams->event_handle; + template_client->inner_data.upstream_topic = NULL; + template_client->inner_data.downstream_topic = NULL; + template_client->inner_data.token_num = 0; + template_client->inner_data.eventflags = 0; + + rc = qcloud_iot_template_init(template_client); + if (rc != QCLOUD_RET_SUCCESS) { + IOT_MQTT_Destroy(&(template_client->mqtt)); + HAL_Free(template_client); + goto End; + } + + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } else { +#ifndef MULTITHREAD_ENABLED + template_client->inner_data.sync_status = rc; + while (rc == template_client->inner_data.sync_status) { + IOT_Template_Yield(template_client, 100); + } + + if (0 == template_client->inner_data.sync_status) { + Log_i("Sync device data successfully"); + } else { + Log_e("Sync device data failed"); + } +#else + template_client->inner_data.sync_status = 0; +#endif + } #ifdef EVENT_POST_ENABLED - rc = IOT_Event_Init(template_client); - if (rc < 0) - { - Log_e("event init failed: %d", rc); - IOT_Template_Destroy(&(template_client->mqtt)); - HAL_Free(template_client); - goto End; - } + rc = IOT_Event_Init(template_client); + if (rc < 0) { + Log_e("event init failed: %d", rc); + IOT_Template_Destroy(&(template_client->mqtt)); + HAL_Free(template_client); + goto End; + } #endif #ifdef ACTION_ENABLED - rc = IOT_Action_Init(template_client); - if (rc < 0) - { - Log_e("action init failed: %d", rc); - IOT_Template_Destroy(&(template_client->mqtt)); - HAL_Free(template_client); - goto End; - } + rc = IOT_Action_Init(template_client); + if (rc < 0) { + Log_e("action init failed: %d", rc); + IOT_Template_Destroy(&(template_client->mqtt)); + HAL_Free(template_client); + goto End; + } #endif - return template_client; + return template_client; End: - return NULL; + return NULL; } int IOT_Template_Destroy(void *handle) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - qcloud_iot_template_reset(handle); + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + qcloud_iot_template_reset(handle); - IOT_MQTT_Destroy(&template_client->mqtt); + IOT_MQTT_Destroy(&template_client->mqtt); if (NULL != template_client->mutex) { HAL_MutexDestroy(template_client->mutex); } - if (NULL != template_client->inner_data.downstream_topic) { + if (NULL != template_client->inner_data.downstream_topic) { HAL_Free(template_client->inner_data.downstream_topic); - template_client->inner_data.downstream_topic = NULL; + template_client->inner_data.downstream_topic = NULL; } HAL_Free(handle); @@ -825,6 +842,53 @@ int IOT_Template_Destroy(void *handle) IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) } + +#ifdef MULTITHREAD_ENABLED +int IOT_Template_Yield_Without_MQTT_Yield(void *handle, uint32_t timeout_ms) +{ + + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + + handle_template_expired_reply(ptemplate); + +#ifdef EVENT_POST_ENABLED + handle_template_expired_event(ptemplate); +#endif + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int IOT_Template_Destroy_Except_MQTT(void *handle) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + qcloud_iot_template_reset(handle); + + if (NULL != template_client->mutex) { + HAL_MutexDestroy(template_client->mutex); + } + + if (NULL != template_client->inner_data.downstream_topic) { + HAL_Free(template_client->inner_data.downstream_topic); + template_client->inner_data.downstream_topic = NULL; + } + + HAL_Free(handle); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +#endif + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_common.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_common.c index 4def22f3..cee382bc 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_common.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_common.c @@ -28,8 +28,7 @@ static int _add_property_handle_to_template_list(Qcloud_IoT_Template *pTemplate, IOT_FUNC_ENTRY; PropertyHandler *property_handle = (PropertyHandler *)HAL_Malloc(sizeof(PropertyHandler)); - if (NULL == property_handle) - { + if (NULL == property_handle) { Log_e("run memory malloc is error!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -72,7 +71,7 @@ int template_common_remove_property(Qcloud_IoT_Template *ptemplate, DeviceProper list_remove(ptemplate->inner_data.property_handle_list, node); } HAL_MutexUnlock(ptemplate->mutex); - + return rc; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_json.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_json.c index 19ceb467..7eefa4b5 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_json.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_json.c @@ -29,7 +29,8 @@ extern "C" { #include "qcloud_iot_export_method.h" -int check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) { +int check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) +{ if (returnCode >= maxSizeOfWrite) { return QCLOUD_ERR_JSON_BUFFER_TRUNCATED; @@ -40,7 +41,8 @@ int check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) { return QCLOUD_RET_SUCCESS; } -void insert_str(char *pDestStr, char *pSourceStr, int pos) { +void insert_str(char *pDestStr, char *pSourceStr, int pos) +{ int len = strlen(pDestStr); int nlen = strlen(pSourceStr); int i; @@ -55,35 +57,36 @@ void insert_str(char *pDestStr, char *pSourceStr, int pos) { } -static int _direct_update_value(char *value, DeviceProperty *pProperty) { +static int _direct_update_value(char *value, DeviceProperty *pProperty) +{ int rc = QCLOUD_RET_SUCCESS; if (pProperty->type == JBOOL) { - rc = LITE_get_boolean(pProperty->data, value); + rc = LITE_get_boolean(pProperty->data, value); } else if (pProperty->type == JINT32) { - rc = LITE_get_int32(pProperty->data, value); + rc = LITE_get_int32(pProperty->data, value); } else if (pProperty->type == JINT16) { - rc = LITE_get_int16(pProperty->data, value); + rc = LITE_get_int16(pProperty->data, value); } else if (pProperty->type == JINT8) { - rc = LITE_get_int8(pProperty->data, value); + rc = LITE_get_int8(pProperty->data, value); } else if (pProperty->type == JUINT32) { - rc = LITE_get_uint32(pProperty->data, value); + rc = LITE_get_uint32(pProperty->data, value); } else if (pProperty->type == JUINT16) { - rc = LITE_get_uint16(pProperty->data, value); + rc = LITE_get_uint16(pProperty->data, value); } else if (pProperty->type == JUINT8) { - rc = LITE_get_uint8(pProperty->data, value); + rc = LITE_get_uint8(pProperty->data, value); } else if (pProperty->type == JFLOAT) { - rc = LITE_get_float(pProperty->data, value); + rc = LITE_get_float(pProperty->data, value); } else if (pProperty->type == JDOUBLE) { - rc = LITE_get_double(pProperty->data, value); - }else if(pProperty->type == JSTRING){ - rc = LITE_get_string(pProperty->data, value, pProperty->data_buff_len); - }else if(pProperty->type == JOBJECT){ - Log_d("Json type wait to be deal,%s",value); - }else{ - Log_e("pProperty type unknow,%d",pProperty->type); - } + rc = LITE_get_double(pProperty->data, value); + } else if (pProperty->type == JSTRING) { + rc = LITE_get_string(pProperty->data, value, pProperty->data_buff_len); + } else if (pProperty->type == JOBJECT) { + Log_d("Json type wait to be deal,%s", value); + } else { + Log_e("pProperty type unknow,%d", pProperty->type); + } return rc; } @@ -95,14 +98,16 @@ static int _direct_update_value(char *value, DeviceProperty *pProperty) { * @param maxSizeOfJsonDocument max size of JSON string * @return length after adding */ -static int32_t _add_client_token(char *pJsonDocument, size_t maxSizeOfJsonDocument, uint32_t *tokenNumber) { +static int32_t _add_client_token(char *pJsonDocument, size_t maxSizeOfJsonDocument, uint32_t *tokenNumber) +{ int32_t rc_of_snprintf = HAL_Snprintf(pJsonDocument, maxSizeOfJsonDocument, "%s-%u", iot_device_info_get()->product_id, (*tokenNumber)++); return rc_of_snprintf; } -int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) { +int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) +{ int rc; int32_t rc_of_snprintf = 0; @@ -127,35 +132,35 @@ int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void } else { if (type == JINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi32 - ",", *(int32_t *) (pData)); + PRIi32 + ",", *(int32_t *) (pData)); } else if (type == JINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi16 - ",", *(int16_t *) (pData)); + PRIi16 + ",", *(int16_t *) (pData)); } else if (type == JINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi8 - ",", *(int8_t *) (pData)); + PRIi8 + ",", *(int8_t *) (pData)); } else if (type == JUINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu32 - ",", *(uint32_t *) (pData)); + PRIu32 + ",", *(uint32_t *) (pData)); } else if (type == JUINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu16 - ",", *(uint16_t *) (pData)); + PRIu16 + ",", *(uint16_t *) (pData)); } else if (type == JUINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu8 - ",", *(uint8_t *) (pData)); + PRIu8 + ",", *(uint8_t *) (pData)); } else if (type == JDOUBLE) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *) (pData)); } else if (type == JFLOAT) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *) (pData)); - } else if (type == JBOOL) { + } else if (type == JBOOL) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", - *(bool *) (pData) ? "true" : "false"); + *(bool *) (pData) ? "true" : "false"); } else if (type == JSTRING) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *) (pData)); } else if (type == JOBJECT) { @@ -168,7 +173,8 @@ int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void return rc; } -int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) { +int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) +{ int rc; int32_t rc_of_snprintf = 0; @@ -193,35 +199,35 @@ int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pK } else { if (type == JINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi32 - ",", *(int32_t *) (pData)); + PRIi32 + ",", *(int32_t *) (pData)); } else if (type == JINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi16 - ",", *(int16_t *) (pData)); + PRIi16 + ",", *(int16_t *) (pData)); } else if (type == JINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi8 - ",", *(int8_t *) (pData)); + PRIi8 + ",", *(int8_t *) (pData)); } else if (type == JUINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu32 - ",", *(uint32_t *) (pData)); + PRIu32 + ",", *(uint32_t *) (pData)); } else if (type == JUINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu16 - ",", *(uint16_t *) (pData)); + PRIu16 + ",", *(uint16_t *) (pData)); } else if (type == JUINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu8 - ",", *(uint8_t *) (pData)); + PRIu8 + ",", *(uint8_t *) (pData)); } else if (type == JDOUBLE) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *) (pData)); } else if (type == JFLOAT) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *) (pData)); - } else if (type == JBOOL) { + } else if (type == JBOOL) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%u,", - *(bool *) (pData) ? 1 : 0); + *(bool *) (pData) ? 1 : 0); } else if (type == JSTRING) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *) (pData)); } else if (type == JOBJECT) { @@ -234,106 +240,111 @@ int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pK return rc; } -int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber) { +int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber) +{ return _add_client_token(pStrBuffer, sizeOfBuffer, tokenNumber); } -void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer) { - HAL_Snprintf(pJsonBuffer, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN, "{\"clientToken\":\"%s-%u\"}", iot_device_info_get()->product_id, (*tokenNumber)++); +void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer) +{ + HAL_Snprintf(pJsonBuffer, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN, "{\"clientToken\":\"%s-%u\"}", iot_device_info_get()->product_id, (*tokenNumber)++); } -bool parse_client_token(char *pJsonDoc, char **pClientToken) { - *pClientToken = LITE_json_value_of(CLIENT_TOKEN_FIELD, pJsonDoc); - return *pClientToken == NULL ? false : true; +bool parse_client_token(char *pJsonDoc, char **pClientToken) +{ + *pClientToken = LITE_json_value_of(CLIENT_TOKEN_FIELD, pJsonDoc); + return *pClientToken == NULL ? false : true; } -bool parse_action_id(char *pJsonDoc, char **pActionID) { - *pActionID = LITE_json_value_of(ACTION_ID_FIELD, pJsonDoc); - return *pActionID == NULL ? false : true; +bool parse_action_id(char *pJsonDoc, char **pActionID) +{ + *pActionID = LITE_json_value_of(ACTION_ID_FIELD, pJsonDoc); + return *pActionID == NULL ? false : true; } -bool parse_time_stamp(char *pJsonDoc, int32_t *pTimestamp) { +bool parse_time_stamp(char *pJsonDoc, int32_t *pTimestamp) +{ - bool ret = false; + bool ret = false; - char *timestamp = LITE_json_value_of(TIME_STAMP_FIELD, pJsonDoc); - if (timestamp == NULL) return false; + char *timestamp = LITE_json_value_of(TIME_STAMP_FIELD, pJsonDoc); + if (timestamp == NULL) return false; - if (sscanf(timestamp, "%" SCNu32, pTimestamp) != 1) { - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } + if (sscanf(timestamp, "%" SCNu32, pTimestamp) != 1) { + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } - HAL_Free(timestamp); + HAL_Free(timestamp); - return ret; + return ret; } bool parse_action_input(char *pJsonDoc, char **pActionInput) { *pActionInput = LITE_json_value_of(CMD_CONTROL_PARA, pJsonDoc); - return *pActionInput == NULL ? false : true; + return *pActionInput == NULL ? false : true; } -bool parse_code_return(char *pJsonDoc, int32_t *pCode) { +bool parse_code_return(char *pJsonDoc, int32_t *pCode) +{ - bool ret = false; + bool ret = false; - char *code = LITE_json_value_of(REPLY_CODE, pJsonDoc); - if (code == NULL) return false; + char *code = LITE_json_value_of(REPLY_CODE, pJsonDoc); + if (code == NULL) return false; - if (sscanf(code, "%" SCNi32, pCode) != 1) { - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } + if (sscanf(code, "%" SCNi32, pCode) != 1) { + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } - HAL_Free(code); + HAL_Free(code); - return ret; + return ret; } -bool parse_status_return(char *pJsonDoc, char **pStatus) { - *pStatus = LITE_json_value_of(REPLY_STATUS, pJsonDoc); - return *pStatus == NULL ? false : true; +bool parse_status_return(char *pJsonDoc, char **pStatus) +{ + *pStatus = LITE_json_value_of(REPLY_STATUS, pJsonDoc); + return *pStatus == NULL ? false : true; } -bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty) { +bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty) +{ - bool ret = false; + bool ret = false; - char* property_data = LITE_json_value_of(pProperty->key, pJsonDoc); - if ((property_data == NULL) || !(strncmp(property_data, "null", 4)) - ||!(strncmp(property_data, "NULL", 4))) { - } - else { - _direct_update_value(property_data, pProperty); - ret = true; - HAL_Free(property_data); - } + char* property_data = LITE_json_value_of(pProperty->key, pJsonDoc); + if ((property_data == NULL) || !(strncmp(property_data, "null", 4)) + || !(strncmp(property_data, "NULL", 4))) { + } else { + _direct_update_value(property_data, pProperty); + ret = true; + HAL_Free(property_data); + } - return ret; + return ret; } bool parse_template_method_type(char *pJsonDoc, char **pMethod) { - *pMethod = LITE_json_value_of(METHOD_FIELD, pJsonDoc); - return *pMethod == NULL ? false : true; + *pMethod = LITE_json_value_of(METHOD_FIELD, pJsonDoc); + return *pMethod == NULL ? false : true; } bool parse_template_get_control(char *pJsonDoc, char **control) { *control = LITE_json_value_of(GET_CONTROL_PARA, pJsonDoc); - return *control == NULL ? false : true; + return *control == NULL ? false : true; } bool parse_template_cmd_control(char *pJsonDoc, char **control) { *control = LITE_json_value_of(CMD_CONTROL_PARA, pJsonDoc); - return *control == NULL ? false : true; + return *control == NULL ? false : true; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_manager.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_manager.c index 3c2ffd82..ee6aede9 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_manager.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_client_manager.c @@ -46,8 +46,7 @@ static int _unsubscribe_template_downstream_topic(void* pClient) char downstream_topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; int size = HAL_Snprintf(downstream_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -63,14 +62,13 @@ static int _unsubscribe_template_downstream_topic(void* pClient) /** * @brief add request to data_template request wait for reply list -*/ +*/ static int _add_request_to_template_list(Qcloud_IoT_Template *pTemplate, const char *pClientToken, RequestParams *pParams) { IOT_FUNC_ENTRY; HAL_MutexLock(pTemplate->mutex); - if (pTemplate->inner_data.reply_list->len >= MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME) - { + if (pTemplate->inner_data.reply_list->len >= MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME) { HAL_MutexUnlock(pTemplate->mutex); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_APPENDING_REQUEST); } @@ -112,20 +110,19 @@ static int _add_request_to_template_list(Qcloud_IoT_Template *pTemplate, const c * @param method method type * @param pJsonDoc JSON to publish * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ + */ int _publish_to_template_upstream_topic(Qcloud_IoT_Template *pTemplate, Method method, char *pJsonDoc) { IOT_FUNC_ENTRY; int rc = QCLOUD_RET_SUCCESS; char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - int size; - + int size; - size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -153,25 +150,25 @@ static int _set_template_json_type(char *pJsonDoc, size_t sizeOfBuffer, Method m POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); char *method_str = NULL; switch (method) { - case GET: - method_str = GET_STATUS; - break; - case REPORT: - method_str = REPORT_CMD; - break; - case RINFO: - method_str = INFO_CMD; - break; - case REPLY: - method_str = CONTROL_CMD_REPLY; - break; - case CLEAR: - method_str = CLEAR_CONTROL; - break; - default: - Log_e("unexpected method!"); - rc = QCLOUD_ERR_INVAL; - break; + case GET: + method_str = GET_STATUS; + break; + case REPORT: + method_str = REPORT_CMD; + break; + case RINFO: + method_str = INFO_CMD; + break; + case REPLY: + method_str = CONTROL_CMD_REPLY; + break; + case CLEAR: + method_str = CLEAR_CONTROL; + break; + default: + Log_e("unexpected method!"); + rc = QCLOUD_ERR_INVAL; + break; } if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); @@ -242,8 +239,7 @@ static void _handle_template_expired_reply_callback(Qcloud_IoT_Template *pTempla if (NULL == request) IOT_FUNC_EXIT; - if (expired(&request->timer)) - { + if (expired(&request->timer)) { if (request->callback != NULL) { request->callback(pTemplate, request->method, ACK_TIMEOUT, sg_template_cloud_rcv_buf, request); } @@ -257,13 +253,13 @@ static void _handle_template_expired_reply_callback(Qcloud_IoT_Template *pTempla static void _set_control_clientToken(const char *pClientToken) { - memset(sg_template_clientToken, '\0', MAX_SIZE_OF_CLIENT_TOKEN); - strncpy(sg_template_clientToken, pClientToken, MAX_SIZE_OF_CLIENT_TOKEN); + memset(sg_template_clientToken, '\0', MAX_SIZE_OF_CLIENT_TOKEN); + strncpy(sg_template_clientToken, pClientToken, MAX_SIZE_OF_CLIENT_TOKEN); } char * get_control_clientToken(void) { - return sg_template_clientToken; + return sg_template_clientToken; } void qcloud_iot_template_reset(void *pClient) @@ -277,20 +273,18 @@ void qcloud_iot_template_reset(void *pClient) _unsubscribe_template_downstream_topic(template_client->mqtt); - if (template_client->inner_data.reply_list) - { + if (template_client->inner_data.reply_list) { list_destroy(template_client->inner_data.reply_list); } - if (template_client->inner_data.event_list) - { + if (template_client->inner_data.event_list) { list_destroy(template_client->inner_data.event_list); } } -int qcloud_iot_template_init(Qcloud_IoT_Template *pTemplate) +int qcloud_iot_template_init(Qcloud_IoT_Template *pTemplate) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pTemplate, QCLOUD_ERR_INVAL); @@ -299,46 +293,41 @@ int qcloud_iot_template_init(Qcloud_IoT_Template *pTemplate) IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); pTemplate->inner_data.property_handle_list = list_new(); - if (pTemplate->inner_data.property_handle_list) - { + if (pTemplate->inner_data.property_handle_list) { pTemplate->inner_data.property_handle_list->free = HAL_Free; - } - else { - Log_e("no memory to allocate property_handle_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } else { + Log_e("no memory to allocate property_handle_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - pTemplate->inner_data.reply_list = list_new(); - if (pTemplate->inner_data.reply_list) - { - pTemplate->inner_data.reply_list->free = HAL_Free; - } else { - Log_e("no memory to allocate reply_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - pTemplate->inner_data.event_list = list_new(); - if (pTemplate->inner_data.event_list) - { - pTemplate->inner_data.event_list->free = HAL_Free; - } else { - Log_e("no memory to allocate event_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } + pTemplate->inner_data.reply_list = list_new(); + if (pTemplate->inner_data.reply_list) { + pTemplate->inner_data.reply_list->free = HAL_Free; + } else { + Log_e("no memory to allocate reply_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } - pTemplate->inner_data.action_handle_list = list_new(); - if (pTemplate->inner_data.action_handle_list) - { - pTemplate->inner_data.action_handle_list->free = HAL_Free; - } else { - Log_e("no memory to allocate action_handle_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } + pTemplate->inner_data.event_list = list_new(); + if (pTemplate->inner_data.event_list) { + pTemplate->inner_data.event_list->free = HAL_Free; + } else { + Log_e("no memory to allocate event_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + pTemplate->inner_data.action_handle_list = list_new(); + if (pTemplate->inner_data.action_handle_list) { + pTemplate->inner_data.action_handle_list->free = HAL_Free; + } else { + Log_e("no memory to allocate action_handle_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -void handle_template_expired_reply(Qcloud_IoT_Template *pTemplate) +void handle_template_expired_reply(Qcloud_IoT_Template *pTemplate) { IOT_FUNC_ENTRY; @@ -410,11 +399,9 @@ static void _handle_control(Qcloud_IoT_Template *pTemplate, char* control_str) } if (property_handle->property != NULL) { - if (update_value_if_key_match(control_str, property_handle->property)) - { - - if (property_handle->callback != NULL) - { + if (update_value_if_key_match(control_str, property_handle->property)) { + + if (property_handle->callback != NULL) { property_handle->callback(pTemplate, control_str, strlen(control_str), property_handle->property); } node = NULL; @@ -439,42 +426,39 @@ static void _handle_template_reply_callback(Qcloud_IoT_Template *pTemplate, List if (NULL == request) IOT_FUNC_EXIT; - if (strcmp(request->client_token, pClientToken) == 0) - { + if (strcmp(request->client_token, pClientToken) == 0) { ReplyAck status = ACK_NONE; // check operation success or not according to code field of reply message int32_t reply_code = 0; - + bool parse_success = parse_code_return(sg_template_cloud_rcv_buf, &reply_code); if (parse_success) { - if (reply_code == 0) { - status = ACK_ACCEPTED; - } else { - status = ACK_REJECTED; - } + if (reply_code == 0) { + status = ACK_ACCEPTED; + } else { + status = ACK_REJECTED; + } - if (strcmp(pType, GET_STATUS_REPLY) == 0 && status == ACK_ACCEPTED) - { - char* control_str = NULL; - if (parse_template_get_control(sg_template_cloud_rcv_buf, &control_str)) { - Log_d("control data from get_status_reply"); - _set_control_clientToken(pClientToken); - _handle_control(pTemplate, control_str); - HAL_Free(control_str); - *((ReplyAck *)request->user_context) = ACK_ACCEPTED; //prepare for clear_control - } - } - - - if (request->callback != NULL) { - request->callback(pTemplate, request->method, status, sg_template_cloud_rcv_buf, request); - } + if (strcmp(pType, GET_STATUS_REPLY) == 0 && status == ACK_ACCEPTED) { + char* control_str = NULL; + if (parse_template_get_control(sg_template_cloud_rcv_buf, &control_str)) { + Log_d("control data from get_status_reply"); + _set_control_clientToken(pClientToken); + _handle_control(pTemplate, control_str); + HAL_Free(control_str); + *((ReplyAck *)request->user_context) = ACK_ACCEPTED; //prepare for clear_control + } + } + + + if (request->callback != NULL) { + request->callback(pTemplate, request->method, status, sg_template_cloud_rcv_buf, request); + } + } else { + Log_e("parse template operation result code failed."); } - else { - Log_e("parse template operation result code failed."); - } - + list_remove(list, *node); *node = NULL; @@ -490,8 +474,10 @@ static void _on_template_downstream_topic_handler(void *pClient, MQTTMessage *me POINTER_SANITY_CHECK_RTN(pClient); POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; +// Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; +// Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)pUserdata; + const char *topic = message->ptopic; size_t topic_len = message->topic_len; @@ -508,38 +494,37 @@ static void _on_template_downstream_topic_handler(void *pClient, MQTTMessage *me } int cloud_rcv_len = min(CLOUD_IOT_JSON_RX_BUF_LEN - 1, message->payload_len); - memset(sg_template_cloud_rcv_buf, 0, sizeof(sg_template_cloud_rcv_buf)); + memset(sg_template_cloud_rcv_buf, 0, sizeof(sg_template_cloud_rcv_buf)); memcpy(sg_template_cloud_rcv_buf, message->payload, cloud_rcv_len + 1); sg_template_cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string - //Log_d("recv:%s", sg_template_cloud_rcv_buf); + //Log_d("recv:%s", sg_template_cloud_rcv_buf); - //parse the message type from topic $thing/down/property - if (!parse_template_method_type(sg_template_cloud_rcv_buf, &type_str)) - { + //parse the message type from topic $thing/down/property + if (!parse_template_method_type(sg_template_cloud_rcv_buf, &type_str)) { Log_e("Fail to parse method!"); goto End; } if (!parse_client_token(sg_template_cloud_rcv_buf, &client_token)) { - Log_e("Fail to parse client token! Json=%s", sg_template_cloud_rcv_buf); - goto End; + Log_e("Fail to parse client token! Json=%s", sg_template_cloud_rcv_buf); + goto End; + } + + //handle control message + if (!strcmp(type_str, CONTROL_CMD)) { + HAL_MutexLock(template_client->mutex); + char* control_str = NULL; + if (parse_template_cmd_control(sg_template_cloud_rcv_buf, &control_str)) { + Log_d("control_str:%s", control_str); + _set_control_clientToken(client_token); + _handle_control(template_client, control_str); + HAL_Free(control_str); + } + + HAL_MutexUnlock(template_client->mutex); + goto End; } - - //handle control message - if (!strcmp(type_str, CONTROL_CMD)) { - HAL_MutexLock(template_client->mutex); - char* control_str = NULL; - if (parse_template_cmd_control(sg_template_cloud_rcv_buf, &control_str)) { - Log_d("control_str:%s", control_str); - _set_control_clientToken(client_token); - _handle_control(template_client, control_str); - HAL_Free(control_str); - } - HAL_MutexUnlock(template_client->mutex); - goto End; - } - if (template_client != NULL) _traverse_template_list(template_client, template_client->inner_data.reply_list, client_token, type_str, _handle_template_reply_callback); @@ -555,16 +540,15 @@ int subscribe_template_downstream_topic(Qcloud_IoT_Template *pTemplate) IOT_FUNC_ENTRY; int rc; - int size; - + int size; + if (pTemplate->inner_data.downstream_topic == NULL) { char *downstream_topic = (char *)HAL_Malloc(MAX_SIZE_OF_CLOUD_TOPIC * sizeof(char)); if (downstream_topic == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); memset(downstream_topic, 0x0, MAX_SIZE_OF_CLOUD_TOPIC); - size = HAL_Snprintf(downstream_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + size = HAL_Snprintf(downstream_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); HAL_Free(downstream_topic); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); @@ -575,6 +559,7 @@ int subscribe_template_downstream_topic(Qcloud_IoT_Template *pTemplate) SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; subscribe_params.on_message_handler = _on_template_downstream_topic_handler; subscribe_params.qos = QOS0; + subscribe_params.user_data = pTemplate; rc = IOT_MQTT_Subscribe(pTemplate->mqtt, pTemplate->inner_data.downstream_topic, &subscribe_params); if (rc < 0) { diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_event.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_event.c index 4dc7dead..45200f42 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_event.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/data_template/data_template_event.c @@ -13,7 +13,7 @@ * */ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -61,26 +61,26 @@ static void _traverse_event_list(Qcloud_IoT_Template *pTemplate, List *list, con Log_e("node's value is invalid!"); continue; } - - sEventReply *pReply = (sEventReply *)node->val; - /*timeout check*/ - if(eDEAL_EXPIRED == eDealType){ - if(expired(&pReply->timer)){ - Log_e("eventToken[%s] timeout",pReply->client_token); - list_remove(list, node); - node = NULL; - } - } - /*match event wait for reply by clientToken*/ - if((eDEAL_REPLY_CB == eDealType) && (0 == strcmp(pClientToken, pReply->client_token))){ - if(NULL != pReply->callback){ - pReply->callback(pTemplate, message); - Log_d("eventToken[%s] released",pReply->client_token); - list_remove(list, node); - node = NULL; - } - } + sEventReply *pReply = (sEventReply *)node->val; + /*timeout check*/ + if (eDEAL_EXPIRED == eDealType) { + if (expired(&pReply->timer)) { + Log_e("eventToken[%s] timeout", pReply->client_token); + list_remove(list, node); + node = NULL; + } + } + + /*match event wait for reply by clientToken*/ + if ((eDEAL_REPLY_CB == eDealType) && (0 == strcmp(pClientToken, pReply->client_token))) { + if (NULL != pReply->callback) { + pReply->callback(pTemplate, message); + Log_d("eventToken[%s] released", pReply->client_token); + list_remove(list, node); + node = NULL; + } + } } list_iterator_destroy(iter); @@ -90,44 +90,46 @@ static void _traverse_event_list(Qcloud_IoT_Template *pTemplate, List *list, con IOT_FUNC_EXIT; } -static void _on_event_reply_callback(void *pClient, MQTTMessage *message, void *userData) +static void _on_event_reply_callback(void *pClient, MQTTMessage *message, void *userData) { - POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + POINTER_SANITY_CHECK_RTN(message); +// Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; +// Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)userData; - int32_t code; + + int32_t code; char* client_token = NULL; - char* status = NULL; + char* status = NULL; - Log_d("recv:%.*s",(int) message->payload_len, (char *) message->payload); - - // parse clientToken from payload + Log_d("recv:%.*s", (int) message->payload_len, (char *) message->payload); + + // parse clientToken from payload if (!parse_client_token((char *) message->payload, &client_token)) { Log_e("fail to parse client token!"); return; } - // parse code from payload - if(!parse_code_return((char *) message->payload, &code)){ + // parse code from payload + if (!parse_code_return((char *) message->payload, &code)) { Log_e("fail to parse code"); return; } - if(!parse_status_return((char *) message->payload, &status)){ - // Log_d("no status return"); + if (!parse_status_return((char *) message->payload, &status)) { + // Log_d("no status return"); } - Log_d("eventToken:%s code:%d status:%s", client_token, code, status); + Log_d("eventToken:%s code:%d status:%s", client_token, code, status); if (template_client != NULL) _traverse_event_list(template_client, template_client->inner_data.event_list, client_token, message, eDEAL_REPLY_CB); HAL_Free(client_token); - HAL_Free(status); + HAL_Free(status); - return; + return; } /** @@ -138,10 +140,9 @@ static sEventReply * _create_event_add_to_list(Qcloud_IoT_Template *pTemplate, O IOT_FUNC_ENTRY; HAL_MutexLock(pTemplate->mutex); - if (pTemplate->inner_data.event_list->len >= MAX_EVENT_WAIT_REPLY) - { + if (pTemplate->inner_data.event_list->len >= MAX_EVENT_WAIT_REPLY) { HAL_MutexUnlock(pTemplate->mutex); - Log_e("Too many event wait for reply"); + Log_e("Too many event wait for reply"); IOT_FUNC_EXIT_RC(NULL); } @@ -153,18 +154,18 @@ static sEventReply * _create_event_add_to_list(Qcloud_IoT_Template *pTemplate, O } pReply->callback = replyCb; - pReply->user_context = pTemplate; - + pReply->user_context = pTemplate; + InitTimer(&(pReply->timer)); countdown(&(pReply->timer), reply_timeout_ms); - HAL_Snprintf(pReply->client_token, EVENT_TOKEN_MAX_LEN, "%s-%u", iot_device_info_get()->product_id, pTemplate->inner_data.token_num++); - + HAL_Snprintf(pReply->client_token, EVENT_TOKEN_MAX_LEN, "%s-%u", iot_device_info_get()->product_id, pTemplate->inner_data.token_num++); + ListNode *node = list_node_new(pReply); if (NULL == node) { HAL_MutexUnlock(pTemplate->mutex); Log_e("run list_node_new is error!"); - HAL_Free(pReply); + HAL_Free(pReply); IOT_FUNC_EXIT_RC(NULL); } @@ -173,218 +174,217 @@ static sEventReply * _create_event_add_to_list(Qcloud_IoT_Template *pTemplate, O HAL_MutexUnlock(pTemplate->mutex); IOT_FUNC_EXIT_RC(pReply); -} +} static int _iot_event_json_init(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t event_count, OnEventReplyCallback replyCb, uint32_t reply_timeout_ms) { - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - int32_t rc_of_snprintf; - sEventReply *pReply; - - pReply = _create_event_add_to_list(ptemplate, replyCb, reply_timeout_ms); - if(!pReply){ - Log_e("create event failed"); - return QCLOUD_ERR_FAILURE; - } + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - memset(jsonBuffer, 0, sizeOfBuffer); - if(event_count > SIGLE_EVENT){ - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ - POST_EVENTS, pReply->client_token); - }else{ - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ - POST_EVENT, pReply->client_token); - } + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; + int32_t rc_of_snprintf; + sEventReply *pReply; + + pReply = _create_event_add_to_list(ptemplate, replyCb, reply_timeout_ms); + if (!pReply) { + Log_e("create event failed"); + return QCLOUD_ERR_FAILURE; + } + + memset(jsonBuffer, 0, sizeOfBuffer); + if (event_count > SIGLE_EVENT) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ + POST_EVENTS, pReply->client_token); + } else { + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ + POST_EVENT, pReply->client_token); + } return check_snprintf_return(rc_of_snprintf, sizeOfBuffer); } - + static int _iot_construct_event_json(void *handle, char *jsonBuffer, size_t sizeOfBuffer, - uint8_t event_count, - sEvent *pEventArry[], - OnEventReplyCallback replyCb, - uint32_t reply_timeout_ms) -{ - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - uint8_t i,j; - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pEventArry, QCLOUD_ERR_INVAL); - - int rc = _iot_event_json_init(ptemplate, jsonBuffer, sizeOfBuffer, event_count, replyCb, reply_timeout_ms); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("event json init failed: %d", rc); - return rc; - } - //Log_d("event_count:%d, Doc_init:%s",event_count, jsonBuffer); - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - if(event_count > SIGLE_EVENT){//mutlti event - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"events\":["); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - for(i = 0; i < event_count; i++){ - sEvent *pEvent = pEventArry[i]; - if(NULL == pEvent){ - Log_e("%dth/%d null event", i, event_count); - return QCLOUD_ERR_INVAL; - } - - if(0 == pEvent->timestamp){ //no accurate UTC time, set 0 - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{",\ - pEvent->event_name, pEvent->type); - }else{ // accurate UTC time is second,change to ms - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{",\ - pEvent->event_name, pEvent->type, pEvent->timestamp); - - } - - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - DeviceProperty *pJsonNode = pEvent->pEventData; - for (j = 0; j < pEvent->eventDataNum; j++) { - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); - return QCLOUD_ERR_INVAL; - } - pJsonNode++; - } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer)-1, remain_size, "}}," ); - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - pEvent++; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "]"); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - }else{ //single - sEvent *pEvent = pEventArry[0]; - if(0 == pEvent->timestamp){ //no accurate UTC time, set 0 - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{",\ - pEvent->event_name, pEvent->type); - }else{ // accurate UTC time is second,change to ms - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{",\ - pEvent->event_name, pEvent->type, pEvent->timestamp); - } - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - DeviceProperty *pJsonNode = pEvent->pEventData; - for (i = 0; i < pEvent->eventDataNum; i++) { - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); - return QCLOUD_ERR_INVAL; - } - pJsonNode++; - } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } - - //finish json - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); - - return check_snprintf_return(rc_of_snprintf, remain_size); -} - -static int _publish_event_to_cloud(void *c, char *pJsonDoc) + uint8_t event_count, + sEvent *pEventArry[], + OnEventReplyCallback replyCb, + uint32_t reply_timeout_ms) { - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + uint8_t i, j; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; + + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pEventArry, QCLOUD_ERR_INVAL); + + int rc = _iot_event_json_init(ptemplate, jsonBuffer, sizeOfBuffer, event_count, replyCb, reply_timeout_ms); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("event json init failed: %d", rc); + return rc; + } + //Log_d("event_count:%d, Doc_init:%s",event_count, jsonBuffer); + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + if (event_count > SIGLE_EVENT) { //mutlti event + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"events\":["); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + for (i = 0; i < event_count; i++) { + sEvent *pEvent = pEventArry[i]; + if (NULL == pEvent) { + Log_e("%dth/%d null event", i, event_count); + return QCLOUD_ERR_INVAL; + } + + if (0 == pEvent->timestamp) { //no accurate UTC time, set 0 + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{", \ + pEvent->event_name, pEvent->type); + } else { // accurate UTC time is second,change to ms + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{", \ + pEvent->event_name, pEvent->type, pEvent->timestamp); + + } - int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > sizeof(topic) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); - return QCLOUD_ERR_FAILURE; - } + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } - PublishParams pubParams = DEFAULT_PUB_PARAMS; - pubParams.qos = QOS0; - pubParams.payload_len = strlen(pJsonDoc); - pubParams.payload = (char *) pJsonDoc; + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } - rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); + DeviceProperty *pJsonNode = pEvent->pEventData; + for (j = 0; j < pEvent->eventDataNum; j++) { + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - IOT_FUNC_EXIT_RC(rc); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); + return QCLOUD_ERR_INVAL; + } + pJsonNode++; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}}," ); + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + pEvent++; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "]"); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + } else { //single + sEvent *pEvent = pEventArry[0]; + if (0 == pEvent->timestamp) { //no accurate UTC time, set 0 + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{", \ + pEvent->event_name, pEvent->type); + } else { // accurate UTC time is second,change to ms + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{", \ + pEvent->event_name, pEvent->type, pEvent->timestamp); + } + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + DeviceProperty *pJsonNode = pEvent->pEventData; + for (i = 0; i < pEvent->eventDataNum; i++) { + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); + return QCLOUD_ERR_INVAL; + } + pJsonNode++; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } + + //finish json + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); + + return check_snprintf_return(rc_of_snprintf, remain_size); } -void handle_template_expired_event(void *client) +static int _publish_event_to_cloud(void *c, char *pJsonDoc) { IOT_FUNC_ENTRY; - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + int rc = QCLOUD_RET_SUCCESS; + char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; + + + int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (size < 0 || size > sizeof(topic) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); + return QCLOUD_ERR_FAILURE; + } + + PublishParams pubParams = DEFAULT_PUB_PARAMS; + pubParams.qos = QOS1; + pubParams.payload_len = strlen(pJsonDoc); + pubParams.payload = (char *) pJsonDoc; + + rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); + + IOT_FUNC_EXIT_RC(rc); +} + +void handle_template_expired_event(void *client) +{ + IOT_FUNC_ENTRY; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; _traverse_event_list(pTemplate, pTemplate->inner_data.event_list, NULL, NULL, eDEAL_EXPIRED); @@ -393,98 +393,98 @@ void handle_template_expired_event(void *client) void IOT_Event_setFlag(void *client, uint32_t flag) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; - - pTemplate->inner_data.eventflags |= flag&0xffffffff; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + + pTemplate->inner_data.eventflags |= flag & 0xffffffff; } void IOT_Event_clearFlag(void *client, uint32_t flag) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; - pTemplate->inner_data.eventflags &= (~flag)&0xffffffff; + pTemplate->inner_data.eventflags &= (~flag) & 0xffffffff; } uint32_t IOT_Event_getFlag(void *client) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; - return pTemplate->inner_data.eventflags; -} + return pTemplate->inner_data.eventflags; +} int IOT_Event_Init(void *c) { - static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; + static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; - int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - - if (size < 0 || size > sizeof(topic_name) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _on_event_reply_callback; - - return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _on_event_reply_callback; + sub_params.user_data = pTemplate; + + return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); } -int IOT_Post_Event(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, uint8_t event_count, sEvent *pEventArry[], OnEventReplyCallback replyCb) +int IOT_Post_Event(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, uint8_t event_count, sEvent *pEventArry[], OnEventReplyCallback replyCb) { - int rc; - - rc = _iot_construct_event_json(pClient, pJsonDoc, sizeOfBuffer, event_count, pEventArry, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("construct event json fail, %d",rc); - return rc; - } - - rc = _publish_event_to_cloud(pClient, pJsonDoc); - if (rc < 0) { - Log_e("publish event to cloud fail, %d",rc); - } + int rc; - return rc; + rc = _iot_construct_event_json(pClient, pJsonDoc, sizeOfBuffer, event_count, pEventArry, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("construct event json fail, %d", rc); + return rc; + } + + rc = _publish_event_to_cloud(pClient, pJsonDoc); + if (rc < 0) { + Log_e("publish event to cloud fail, %d", rc); + } + + return rc; } -int IOT_Post_Event_Raw(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, char *pEventMsg, OnEventReplyCallback replyCb) +int IOT_Post_Event_Raw(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, char *pEventMsg, OnEventReplyCallback replyCb) { - int rc; - size_t remain_size = 0; - int32_t rc_of_snprintf; + int rc; + size_t remain_size = 0; + int32_t rc_of_snprintf; - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)pClient; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)pClient; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pEventMsg, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pEventMsg, QCLOUD_ERR_INVAL); - rc = _iot_event_json_init(ptemplate, pJsonDoc, sizeOfBuffer, MUTLTI_EVENTS, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("event json init failed: %d", rc); - return rc; - } + rc = _iot_event_json_init(ptemplate, pJsonDoc, sizeOfBuffer, MUTLTI_EVENTS, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("event json init failed: %d", rc); + return rc; + } - if ((remain_size = sizeOfBuffer - strlen(pJsonDoc)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } + if ((remain_size = sizeOfBuffer - strlen(pJsonDoc)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } - rc_of_snprintf = HAL_Snprintf(pJsonDoc + strlen(pJsonDoc), remain_size, "\"events\":[%s]}", pEventMsg); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } + rc_of_snprintf = HAL_Snprintf(pJsonDoc + strlen(pJsonDoc), remain_size, "\"events\":[%s]}", pEventMsg); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } - Log_d("JsonDoc:%s", pJsonDoc); - - rc = _publish_event_to_cloud(pClient, pJsonDoc); - if (rc < 0 ) { - Log_e("publish event raw to cloud fail, %d",rc); - } + Log_d("JsonDoc:%s", pJsonDoc); - return rc; + rc = _publish_event_to_cloud(pClient, pJsonDoc); + if (rc < 0 ) { + Log_e("publish event raw to cloud fail, %d", rc); + } + + return rc; } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c new file mode 100644 index 00000000..4617bab4 --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c @@ -0,0 +1,303 @@ +#include + +#include "utils_param_check.h" + +#include "gateway_common.h" +#include "mqtt_client.h" + + +static Gateway sg_gateway = {0}; + +void _gateway_event_handler(void *client, void *context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + Gateway* gateway = (Gateway*)context; + + POINTER_SANITY_CHECK_RTN(context); + POINTER_SANITY_CHECK_RTN(msg); + MQTTMessage* topic_info = (MQTTMessage*)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_d("gateway sub|unsub(%d) success, packet-id=%u", msg->event_type, (unsigned int)packet_id); + if (gateway->gateway_data.sync_status == packet_id) { + gateway->gateway_data.sync_status = 0; + return; + } + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_d("gateway timeout|nack(%d) event, packet-id=%u", msg->event_type, (unsigned int)packet_id); + if (gateway->gateway_data.sync_status == packet_id) { + gateway->gateway_data.sync_status = -1; + return; + } + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_d("gateway topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + topic_info->topic_len, + topic_info->ptopic, + topic_info->payload_len, + topic_info->payload); + break; + + default: + break; + } + + if (gateway->event_handle.h_fp != NULL) { + gateway->event_handle.h_fp(client, gateway->event_handle.context, msg); + } + + return; +} + + +void* IOT_Gateway_Construct(GatewayInitParam* init_param) +{ + int rc = 0; + GatewayParam param = DEFAULT_GATEWAY_PARAMS; + POINTER_SANITY_CHECK(init_param, NULL); + + if (sg_gateway.is_construct) { + Log_e("gateway have been construct"); + IOT_FUNC_EXIT_RC(NULL); + } + + memset(&sg_gateway, 0, sizeof(Gateway)); + + /* replace user event handle */ + sg_gateway.event_handle.h_fp = init_param->init_param.event_handle.h_fp; + sg_gateway.event_handle.context = init_param->init_param.event_handle.context; + + /* set _gateway_event_handler as mqtt event handle */ + init_param->init_param.event_handle.h_fp = _gateway_event_handler; + init_param->init_param.event_handle.context = &sg_gateway; + + /* construct MQTT client */ + sg_gateway.mqtt = IOT_MQTT_Construct(&init_param->init_param); + if (NULL == sg_gateway.mqtt) { + Log_e("construct MQTT failed"); + IOT_FUNC_EXIT_RC(NULL); + } + + /* subscribe default topic */ + param.product_id = init_param->init_param.product_id; + param.device_name = init_param->init_param.device_name; + rc = gateway_subscribe_unsubscribe_default(&sg_gateway, ¶m); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("subscribe default topic failed"); + IOT_Gateway_Destroy((void*)&sg_gateway); + IOT_FUNC_EXIT_RC(NULL); + } + + sg_gateway.is_construct = 1; + + return &sg_gateway; +} + + +int IOT_Gateway_Subdev_Online(void *client, GatewayParam* param) +{ + int rc = 0; + char topic[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + char payload[GATEWAY_PAYLOAD_BUFFER_LEN + 1] = {0}; + int size = 0; + SubdevSession* session = NULL; + PublishParams params = DEFAULT_PUB_PARAMS; + Gateway* gateway = (Gateway*)client; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); + + session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_d("there is no session, create a new session"); + + /* create subdev session */ + session = subdev_add_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_e("create session error!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_CREATE_SESSION_FAIL); + } + } else { + if (SUBDEV_SEESION_STATUS_ONLINE == session->session_status) { + Log_i("device have online"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_ONLINE); + } + } + + + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + + size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN + 1, GATEWAY_PAYLOAD_STATUS_FMT, "online", param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) { + Log_e("buf size < payload length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(gateway->gateway_data.online.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("buf size < client_id length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + gateway->gateway_data.online.result = -2; + + params.qos = QOS0; + params.payload_len = strlen(payload); + params.payload = (char *) payload; + + + /* publish packet */ + rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.online.result); + if (QCLOUD_RET_SUCCESS != rc) { + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + IOT_FUNC_EXIT_RC(rc); + } + + session->session_status = SUBDEV_SEESION_STATUS_ONLINE; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + + +int IOT_Gateway_Subdev_Offline(void *client, GatewayParam* param) +{ + int rc = 0; + char topic[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + char payload[GATEWAY_PAYLOAD_BUFFER_LEN + 1] = {0}; + int size = 0; + SubdevSession* session = NULL; + Gateway* gateway = (Gateway*)client; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); + + session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_d("no session, can not offline"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_NO_EXIST); + + } + if (SUBDEV_SEESION_STATUS_OFFLINE == session->session_status) { + Log_i("device have offline"); + /* free session */ + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_OFFLINE); + } + + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + + size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN + 1, GATEWAY_PAYLOAD_STATUS_FMT, "offline", param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) { + Log_e("buf size < payload length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(gateway->gateway_data.offline.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("buf size < client_id length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + gateway->gateway_data.offline.result = -2; + + + + PublishParams params = DEFAULT_PUB_PARAMS; + params.qos = QOS0; + params.payload_len = strlen(payload); + params.payload = (char *) payload; + + /* publish packet */ + rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.offline.result); + if (QCLOUD_RET_SUCCESS != rc) { + IOT_FUNC_EXIT_RC(rc); + } + + session->session_status = SUBDEV_SEESION_STATUS_OFFLINE; + + /* free session */ + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + + +int IOT_Gateway_Destroy(void *client) +{ + int ret; + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + ret = IOT_MQTT_Destroy(&gateway->mqtt); + gateway->is_construct = 0; + + return ret; +} + +void *IOT_Gateway_Get_MQTT_Client(void *client) +{ + Gateway* gateway = (Gateway*)client; + + return (NULL == gateway) ? NULL : (gateway->mqtt); +} + +int IOT_Gateway_Yield(void *client, uint32_t timeout_ms) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Yield(gateway->mqtt, timeout_ms); +} + +int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); +} + + +int IOT_Gateway_Unsubscribe(void *client, char *topic_filter) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); +} + + +int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Publish(gateway->mqtt, topic_name, params); + +} + diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c new file mode 100644 index 00000000..d659febf --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c @@ -0,0 +1,351 @@ + +#include "lite-utils.h" +#include "mqtt_client.h" +#include "gateway_common.h" + + +static char cloud_rcv_buf[GATEWAY_RECEIVE_BUFFER_LEN]; + + +static bool get_json_type(char *json, char **v) +{ + *v = LITE_json_value_of("type", json); + return *v == NULL ? false : true; +} + +static bool get_json_devices(char *json, char **v) +{ + *v = LITE_json_value_of("payload.devices", json); + return *v == NULL ? false : true; +} + +static bool get_json_result(char *json, int32_t* res) +{ + char *v = LITE_json_value_of("result", json); + if (v == NULL) { + return false; + } + if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { + HAL_Free(v); + return false; + } + HAL_Free(v); + return true; +} + +static bool get_json_product_id(char *json, char **v) +{ + *v = LITE_json_value_of("product_id", json); + return *v == NULL ? false : true; +} + + +static bool get_json_device_name(char *json, char **v) +{ + *v = LITE_json_value_of("device_name", json); + return *v == NULL ? false : true; +} + +static void _gateway_message_handler(void *client, MQTTMessage *message, void *user_data) +{ + Qcloud_IoT_Client *mqtt = NULL; + Gateway *gateway = NULL; + char *topic = NULL; + size_t topic_len = 0; + int cloud_rcv_len = 0; + char *type = NULL; + char *devices = NULL, *devices_strip = NULL; + char *product_id = NULL; + char *device_name = NULL; + int32_t result = 0; + char client_id[MAX_SIZE_OF_CLIENT_ID + 1] = {0}; + int size = 0; + + POINTER_SANITY_CHECK_RTN(client); + POINTER_SANITY_CHECK_RTN(message); + + mqtt = (Qcloud_IoT_Client *)client; + gateway = (Gateway*)mqtt->event_handle.context; + POINTER_SANITY_CHECK_RTN(gateway); + + topic = (char *)message->ptopic; + topic_len = message->topic_len; + if (NULL == topic || topic_len <= 0) { + Log_e("topic == NULL or topic_len <= 0."); + return; + } + + if (message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN) { + Log_e("message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN."); + return; + } + + cloud_rcv_len = Min(GATEWAY_RECEIVE_BUFFER_LEN - 1, message->payload_len); + memcpy(cloud_rcv_buf, message->payload, cloud_rcv_len + 1); + cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string +// Log_d("recv:%s", cloud_rcv_buf); + + if (!get_json_type(cloud_rcv_buf, &type)) { + Log_e("Fail to parse type from msg: %s", cloud_rcv_buf); + return; + } + + if (!get_json_devices(cloud_rcv_buf, &devices)) { + Log_e("Fail to parse devices from msg: %s", cloud_rcv_buf); + HAL_Free(type); + return; + } + + if (devices[0] == '[') { + devices_strip = devices + 1; + } else { + devices_strip = devices; + } + + if (!get_json_result(devices_strip, &result)) { + Log_e("Fail to parse result from msg: %s", cloud_rcv_buf); + HAL_Free(type); + HAL_Free(devices); + return; + } + if (!get_json_product_id(devices_strip, &product_id)) { + Log_e("Fail to parse product_id from msg: %s", cloud_rcv_buf); + HAL_Free(type); + HAL_Free(devices); + return; + } + if (!get_json_device_name(devices_strip, &device_name)) { + Log_e("Fail to parse device_name from msg: %s", cloud_rcv_buf); + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + return; + } + + size = HAL_Snprintf(client_id, MAX_SIZE_OF_CLIENT_ID + 1, GATEWAY_CLIENT_ID_FMT, product_id, device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("generate client_id fail."); + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + HAL_Free(device_name); + return; + } + + + if (strncmp(type, "online", sizeof("online") - 1) == 0) { + if (strncmp(client_id, gateway->gateway_data.online.client_id, size) == 0) { + Log_i("client_id(%s), online result %d", client_id, result); + gateway->gateway_data.online.result = result; + } + } else if (strncmp(type, "offline", sizeof("offline") - 1) == 0) { + if (strncmp(client_id, gateway->gateway_data.offline.client_id, size) == 0) { + Log_i("client_id(%s), offline result %d", client_id, result); + gateway->gateway_data.offline.result = result; + } + } + + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + HAL_Free(device_name); + return; + +} + +int gateway_subscribe_unsubscribe_topic(Gateway *gateway, char *topic_filter, SubscribeParams *params, int is_subscribe) +{ + int rc = 0; + int loop_count = 0; + uint32_t status = -1; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(params, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(topic_filter, QCLOUD_ERR_INVAL); + + params->qos = QOS1; + gateway->gateway_data.sync_status = status; + + if (is_subscribe) { + /* subscribe */ + rc = IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); + } else { + /* unsubscribe */ + rc = IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); + } + + if (rc < 0) { + Log_e("subscribe or un(%d), result(%d)", is_subscribe, rc); + IOT_FUNC_EXIT_RC(rc); + } + + gateway->gateway_data.sync_status = status = rc; + while (status == gateway->gateway_data.sync_status) { + if (loop_count > GATEWAY_LOOP_MAX_COUNT) { + Log_i("loop max count, time out"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_Gateway_Yield(gateway, 200); + loop_count++; + } + + if (gateway->gateway_data.sync_status != 0) { + Log_e("gateway->gateway_data.sync_status(%u) != 0", gateway->gateway_data.sync_status); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int gateway_subscribe_unsubscribe_default(Gateway *gateway, GatewayParam *param) +{ + int rc = 0; + int size = 0; + char topic_filter[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; + + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + + //subscribe online/offline operation reslut + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_RESULT_FMT, param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + subscribe_params.on_message_handler = _gateway_message_handler; + rc = gateway_subscribe_unsubscribe_topic(gateway, topic_filter, &subscribe_params, IOT_TRUE); + if (QCLOUD_RET_SUCCESS != rc) { + IOT_FUNC_EXIT_RC(rc); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +SubdevSession* subdev_find_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession* session = NULL; + + POINTER_SANITY_CHECK(gateway, NULL); + STRING_PTR_SANITY_CHECK(product_id, NULL); + STRING_PTR_SANITY_CHECK(device_name, NULL); + + session = gateway->session_list; + + /* session is exist */ + while (session) { + if (0 == strcmp(session->product_id, product_id) && + 0 == strcmp(session->device_name, device_name)) { + + IOT_FUNC_EXIT_RC(session); + } + session = session->next; + } + + IOT_FUNC_EXIT_RC(NULL); +} + +SubdevSession* subdev_add_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession* session = NULL; + + POINTER_SANITY_CHECK(gateway, NULL); + STRING_PTR_SANITY_CHECK(product_id, NULL); + STRING_PTR_SANITY_CHECK(device_name, NULL); + + session = HAL_Malloc(sizeof(SubdevSession)); + if (session == NULL) { + Log_e("Not enough memory"); + IOT_FUNC_EXIT_RC(NULL); + } + + /* add session to list */ + session->next = gateway->session_list; + gateway->session_list = session; + + int size = strlen(product_id); + strncpy(session->product_id, product_id, size); + session->product_id[size] = '\0'; + size = strlen(device_name); + strncpy(session->device_name, device_name, size); + session->device_name[size] = '\0'; + session->session_status = SUBDEV_SEESION_STATUS_INIT; + + IOT_FUNC_EXIT_RC(session); +} + +int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession* cur_session = NULL; + SubdevSession* pre_session = NULL; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_FAILURE); + STRING_PTR_SANITY_CHECK(product_id, QCLOUD_ERR_FAILURE); + STRING_PTR_SANITY_CHECK(device_name, QCLOUD_ERR_FAILURE); + + pre_session = cur_session = gateway->session_list; + + if (NULL == cur_session) { + Log_e("session list is empty"); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + + /* session is exist */ + while (cur_session) { + if (0 == strcmp(cur_session->product_id, product_id) && + 0 == strcmp(cur_session->device_name, device_name) ) { + if (cur_session == gateway->session_list) { + gateway->session_list = cur_session->next; + } else { + pre_session->next = cur_session->next; + } + HAL_Free(cur_session); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + pre_session = cur_session; + cur_session = cur_session->next; + } + + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); +} + + +int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, int32_t *result) +{ + int rc = 0; + int loop_count = 0; + int32_t res = *result; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + rc = IOT_Gateway_Publish(gateway, topic, params); + if (rc < 0) { + Log_e("publish fail."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + /* wait for response */ + while (res == *result) { + if (loop_count > GATEWAY_LOOP_MAX_COUNT) { + Log_i("loop max count, time out."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT); + } + +#ifndef MULTITHREAD_ENABLED + IOT_Gateway_Yield(gateway, 200); +#else + HAL_SleepMs(1); +#endif + loop_count++; + } + + if (*result != 0) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_client.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_client.c index 51bbdb79..bca9efe3 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_client.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_client.c @@ -35,26 +35,26 @@ extern "C" { #define OTA_VERSION_STR_LEN_MAX (32) typedef struct { - const char *product_id; /* point to product id */ - const char *device_name; /* point to device name */ + const char *product_id; /* point to product id */ + const char *device_name; /* point to device name */ - uint32_t id; /* message id */ - IOT_OTA_State_Code state; /* OTA state */ - uint32_t size_last_fetched; /* size of last downloaded */ - uint32_t size_fetched; /* size of already downloaded */ - uint32_t size_file; /* size of file */ + uint32_t id; /* message id */ + IOT_OTA_State_Code state; /* OTA state */ + uint32_t size_last_fetched; /* size of last downloaded */ + uint32_t size_fetched; /* size of already downloaded */ + uint32_t size_file; /* size of file */ - char *purl; /* point to URL */ - char *version; /* point to string */ - char md5sum[33]; /* MD5 string */ + char *purl; /* point to URL */ + char *version; /* point to string */ + char md5sum[33]; /* MD5 string */ - void *md5; /* MD5 handle */ - void *ch_signal; /* channel handle of signal exchanged with OTA server */ - void *ch_fetch; /* channel handle of download */ + void *md5; /* MD5 handle */ + void *ch_signal; /* channel handle of signal exchanged with OTA server */ + void *ch_fetch; /* channel handle of download */ - int err; /* last error code */ + int err; /* last error code */ - short current_signal_type; + short current_signal_type; Timer report_timer; @@ -70,7 +70,8 @@ static int _ota_check_progress(IOT_OTA_Progress_Code progress) } /* callback when OTA topic msg is received */ -static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { +static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) +{ #define OTA_JSON_TYPE_VALUE_LENGTH 64 char *json_type = NULL; @@ -83,8 +84,8 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } if (msg == NULL || msg_len <= 0) { - Log_e("OTA response message is NULL"); - return; + Log_e("OTA response message is NULL"); + return; } if (qcloud_otalib_get_firmware_type(msg, &json_type) != QCLOUD_RET_SUCCESS) { @@ -93,29 +94,27 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } if (!strcmp(json_type, REPORT_VERSION_RSP)) { - if (qcloud_otalib_get_report_version_result(msg) < QCLOUD_RET_SUCCESS) { + if (qcloud_otalib_get_report_version_result(msg) < QCLOUD_RET_SUCCESS) { Log_e("Report version failed!"); h_ota->err = IOT_OTA_ERR_REPORT_VERSION; h_ota->state = IOT_OTAS_FETCHED; - } - else { - Log_i("Report version success!"); - } - goto End; - } - else { + } else { + Log_i("Report version success!"); + } + goto End; + } else { if (strcmp(json_type, UPDATE_FIRMWARE) != 0) { - Log_e("Netheir Report version result nor update firmware! type: %s", json_type); + Log_e("Netheir Report version result nor update firmware! type: %s", json_type); goto End; } - if(NULL != json_type) { + if (NULL != json_type) { HAL_Free(json_type); json_type = NULL; } if (0 != qcloud_otalib_get_params(msg, &json_type, &h_ota->purl, &h_ota->version, - h_ota->md5sum, &h_ota->size_file)) { + h_ota->md5sum, &h_ota->size_file)) { Log_e("Get firmware parameter failed"); goto End; } @@ -124,16 +123,16 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } End: - if (json_type != NULL) HAL_Free(json_type); + if (json_type != NULL) HAL_Free(json_type); #undef OTA_JSON_TYPE_VALUE_LENGTH } static void IOT_OTA_ResetStatus(void *handle) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - h_ota->state = IOT_OTAS_INITED; -} + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + h_ota->state = IOT_OTAS_INITED; +} static int IOT_OTA_ReportProgress(void *handle, IOT_OTA_Progress_Code progress, IOT_OTAReportType reportType) { @@ -197,7 +196,7 @@ static int IOT_OTA_ReportUpgradeResult(void *handle, const char *version, IOT_OT POINTER_SANITY_CHECK(handle, IOT_OTA_ERR_INVALID_PARAM); POINTER_SANITY_CHECK(version, IOT_OTA_ERR_INVALID_PARAM); - + int ret, len; char *msg_upgrade; OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; @@ -254,7 +253,7 @@ void *IOT_OTA_Init(const char *product_id, const char *device_name, void *ch_sig POINTER_SANITY_CHECK(product_id, NULL); POINTER_SANITY_CHECK(device_name, NULL); POINTER_SANITY_CHECK(ch_signal, NULL); - + OTA_Struct_t *h_ota = NULL; if (NULL == (h_ota = HAL_Malloc(sizeof(OTA_Struct_t)))) { @@ -341,31 +340,31 @@ int IOT_OTA_Destroy(void *handle) /*support continuous transmission of breakpoints*/ int IOT_OTA_StartDownload(void *handle, uint32_t offset, uint32_t size) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int Ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int Ret; - h_ota->size_fetched += offset; - h_ota->ch_fetch = ofc_Init(h_ota->purl, offset, size); + h_ota->size_fetched = offset; + h_ota->ch_fetch = ofc_Init(h_ota->purl, offset, size); if (NULL == h_ota->ch_fetch) { Log_e("Initialize fetch module failed"); - return QCLOUD_ERR_FAILURE; + return QCLOUD_ERR_FAILURE; } - Ret = qcloud_ofc_connect(h_ota->ch_fetch); + Ret = qcloud_ofc_connect(h_ota->ch_fetch); if (QCLOUD_RET_SUCCESS != Ret) { Log_e("Connect fetch module failed"); - h_ota->state = IOT_OTAS_DISCONNECTED; + h_ota->state = IOT_OTAS_DISCONNECTED; } - - return Ret; + + return Ret; } /*support continuous transmission of breakpoints*/ void IOT_OTA_UpdateClientMd5(void *handle, char * buff, uint32_t size) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - qcloud_otalib_md5_update(h_ota->md5, buff, size); + qcloud_otalib_md5_update(h_ota->md5, buff, size); } int IOT_OTA_ReportVersion(void *handle, const char *version) @@ -433,31 +432,31 @@ int IOT_OTA_ReportUpgradeBegin(void *handle) int IOT_OTA_ReportUpgradeSuccess(void *handle, const char *version) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int ret; - if(NULL == version){ - ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_SUCCESS); - }else{ - ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_SUCCESS); - } - - return ret; + if (NULL == version) { + ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_SUCCESS); + } else { + ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_SUCCESS); + } + + return ret; } int IOT_OTA_ReportUpgradeFail(void *handle, const char *version) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int ret; - if(NULL == version){ - ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_FAIL); - }else{ - ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_FAIL); - } - - return ret; + if (NULL == version) { + ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_FAIL); + } else { + ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_FAIL); + } + + return ret; } @@ -529,8 +528,8 @@ int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeo } else if (ret == IOT_OTA_ERR_FETCH_TIMEOUT) { // fetch timeout IOT_OTA_ReportUpgradeResult(h_ota, h_ota->version, IOT_OTAR_DOWNLOAD_TIMEOUT); h_ota->err = ret; - } - + } + return ret; } else if (0 == h_ota->size_fetched) { /* force report status in the first */ diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c index e7790319..97f62dcd 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c @@ -41,30 +41,30 @@ typedef struct { } OTAHTTPStruct; -static int is_begin_with(const char * str1,char *str2) +#ifdef OTA_USE_HTTPS +static int is_begin_with(const char * str1, char *str2) { - if(str1 == NULL || str2 == NULL) + if (str1 == NULL || str2 == NULL) return -1; int len1 = strlen(str1); int len2 = strlen(str2); - if((len1 < len2) || (len1 == 0 || len2 == 0)) + if ((len1 < len2) || (len1 == 0 || len2 == 0)) return -1; char *p = str2; int i = 0; - while(*p != '\0') - { - if(*p != str1[i]) - return 0; + while (*p != '\0') { + if (*p != str1[i]) + return 0; p++; i++; } return 1; } - +#endif static char sg_head_content[OTA_HTTP_HEAD_CONTENT_LEN]; void *ofc_Init(const char *url, uint32_t offset, uint32_t size) -{ +{ OTAHTTPStruct *h_odc; if (NULL == (h_odc = HAL_Malloc(sizeof(OTAHTTPStruct)))) { @@ -73,14 +73,14 @@ void *ofc_Init(const char *url, uint32_t offset, uint32_t size) } memset(h_odc, 0, sizeof(OTAHTTPStruct)); - memset(sg_head_content, 0, OTA_HTTP_HEAD_CONTENT_LEN); - HAL_Snprintf(sg_head_content, OTA_HTTP_HEAD_CONTENT_LEN,\ - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"\ - "Accept-Encoding: gzip, deflate\r\n"\ - "Range: bytes=%d-%d\r\n", - offset, size); + memset(sg_head_content, 0, OTA_HTTP_HEAD_CONTENT_LEN); + HAL_Snprintf(sg_head_content, OTA_HTTP_HEAD_CONTENT_LEN, \ + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"\ + "Accept-Encoding: gzip, deflate\r\n"\ + "Range: bytes=%d-%d\r\n", + offset, size); - Log_d("head_content:%s", sg_head_content); + Log_d("head_content:%s", sg_head_content); /* set http request-header parameter */ h_odc->http.header = sg_head_content; h_odc->url = url; @@ -97,11 +97,12 @@ int32_t qcloud_ofc_connect(void *handle) int port = 80; const char *ca_crt = NULL; - if (is_begin_with(h_odc->url, "https")) - { +#ifdef OTA_USE_HTTPS + if (is_begin_with(h_odc->url, "https")) { port = 443; ca_crt = iot_https_ca_get(); } +#endif int32_t rc = qcloud_http_client_common(&h_odc->http, h_odc->url, port, ca_crt, HTTP_GET, &h_odc->http_data); @@ -119,18 +120,18 @@ int32_t qcloud_ofc_fetch(void *handle, char *buf, uint32_t bufLen, uint32_t time h_odc->http_data.response_buf = buf; h_odc->http_data.response_buf_len = bufLen; diff = h_odc->http_data.response_content_len - h_odc->http_data.retrieve_len; - + int rc = qcloud_http_recv_data(&h_odc->http, timeout_s * 1000, &h_odc->http_data); if (QCLOUD_RET_SUCCESS != rc) { if (rc == QCLOUD_ERR_HTTP_NOT_FOUND) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_NOT_EXIST); - + if (rc == QCLOUD_ERR_HTTP_AUTH) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_AUTH_FAIL); - + if (rc == QCLOUD_ERR_HTTP_TIMEOUT) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_TIMEOUT); - + IOT_FUNC_EXIT_RC(rc); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_lib.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_lib.c index 5d2cb6d7..065fa821 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_lib.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_lib.c @@ -33,7 +33,7 @@ extern "C" { /* Get the specific @key value, and copy to @dest */ /* 0, successful; -1, failed */ static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const char *key, - char *dest, size_t dest_len) + char *dest, size_t dest_len) { IOT_FUNC_ENTRY; @@ -41,17 +41,17 @@ static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const c char* key_bak = HAL_Malloc(strlen(key) + 1); if (key_bak == NULL) { - Log_e("not enough memory for malloc key"); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc key"); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } char* json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); if (json_doc_bak == NULL) { - Log_e("not enough memory for malloc json"); - HAL_Free(key_bak); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc json"); + HAL_Free(key_bak); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } strcpy(key_bak, key); @@ -59,29 +59,27 @@ static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const c char* value = LITE_json_value_of(key_bak, json_doc_bak); if (value == NULL) { - Log_e("Not '%s' key in json doc of OTA", key); - ret = IOT_OTA_ERR_FAIL; - } - else { - uint32_t val_len = strlen(value); - if (val_len > dest_len) { - Log_e("value length of the key is too long"); - ret = IOT_OTA_ERR_FAIL; - } - else { - memcpy(dest, value, val_len); - ret = QCLOUD_RET_SUCCESS; - } + Log_e("Not '%s' key in json doc of OTA", key); + ret = IOT_OTA_ERR_FAIL; + } else { + uint32_t val_len = strlen(value); + if (val_len > dest_len) { + Log_e("value length of the key is too long"); + ret = IOT_OTA_ERR_FAIL; + } else { + memcpy(dest, value, val_len); + ret = QCLOUD_RET_SUCCESS; + } - HAL_Free(value); + HAL_Free(value); } - if (key_bak != NULL) { - HAL_Free(key_bak); - } - if (json_doc_bak != NULL) { - HAL_Free(json_doc_bak); - } + if (key_bak != NULL) { + HAL_Free(key_bak); + } + if (json_doc_bak != NULL) { + HAL_Free(json_doc_bak); + } IOT_FUNC_EXIT_RC(ret); } @@ -99,17 +97,17 @@ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const c char* key_bak = HAL_Malloc(strlen(key) + 1); if (key_bak == NULL) { - Log_e("not enough memory for malloc key"); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc key"); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } char* json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); if (json_doc_bak == NULL) { - Log_e("not enough memory for malloc json"); - HAL_Free(key_bak); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc json"); + HAL_Free(key_bak); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } strcpy(key_bak, key); @@ -117,16 +115,16 @@ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const c *dest = LITE_json_value_of(key_bak, json_doc_bak); if (*dest == NULL) { - Log_e("Not '%s' key in json '%s' doc of OTA", key_bak, json_doc_bak); - ret = IOT_OTA_ERR_FAIL; + Log_e("Not '%s' key in json '%s' doc of OTA", key_bak, json_doc_bak); + ret = IOT_OTA_ERR_FAIL; } - if (key_bak != NULL) { - HAL_Free(key_bak); - } - if (json_doc_bak != NULL) { - HAL_Free(json_doc_bak); - } + if (key_bak != NULL) { + HAL_Free(key_bak); + } + if (json_doc_bak != NULL) { + HAL_Free(json_doc_bak); + } IOT_FUNC_EXIT_RC(ret); @@ -184,16 +182,16 @@ int qcloud_otalib_get_report_version_result(const char *json) int rc = _qcloud_otalib_get_firmware_varlen_para(json, RESULT_FIELD, &result_code); if ( rc != QCLOUD_RET_SUCCESS || strcmp(result_code, "0") != 0) { - if(NULL != result_code) HAL_Free(result_code); + if (NULL != result_code) HAL_Free(result_code); IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); } - if(NULL != result_code) HAL_Free(result_code); + if (NULL != result_code) HAL_Free(result_code); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } int qcloud_otalib_get_params(const char *json, char **type, char **url, char **version, char *md5, - uint32_t *fileSize) + uint32_t *fileSize) { #define OTA_FILESIZE_STR_LEN (16) @@ -266,45 +264,45 @@ int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const ch switch (reportType) { /* report OTA download begin */ case IOT_OTAR_DOWNLOAD_BEGIN: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"0\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"0\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", version); + break; /* report OTA download progress */ case IOT_OTAR_DOWNLOADING: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"%d\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", - progress, version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"%d\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", + progress, version); + break; case IOT_OTAR_DOWNLOAD_TIMEOUT: case IOT_OTAR_FILE_NOT_EXIST: case IOT_OTAR_MD5_NOT_MATCH: case IOT_OTAR_AUTH_FAIL: case IOT_OTAR_UPGRADE_FAIL: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"fail\", \"result_code\":\"%d\", \"result_msg\":\"time_out\"}, \"version\": \"%s\"}}", reportType, version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"fail\", \"result_code\":\"%d\", \"result_msg\":\"time_out\"}, \"version\": \"%s\"}}", reportType, version); + break; /* report OTA upgrade begin */ case IOT_OTAR_UPGRADE_BEGIN: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"burning\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", - version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"burning\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", + version); + break; /* report OTA upgrade finish */ case IOT_OTAR_UPGRADE_SUCCESS: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"done\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", - version); - break; - + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"done\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", + version); + break; + default: - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); - break; + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + break; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c index c3d06a4a..75a3fc76 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c @@ -28,13 +28,13 @@ extern "C" { /* OSC, OTA signal channel */ typedef struct { - void *mqtt; //MQTT cient + void *mqtt; //MQTT cient - const char *product_id; - const char *device_name; + const char *product_id; + const char *device_name; - char topic_upgrade[OTA_MAX_TOPIC_LEN]; //OTA MQTT Topic - OnOTAMessageCallback msg_callback; + char topic_upgrade[OTA_MAX_TOPIC_LEN]; //OTA MQTT Topic + OnOTAMessageCallback msg_callback; void *context; } OTA_MQTT_Struct_t; @@ -50,7 +50,7 @@ static int _otamqtt_gen_topic_name(char *buf, size_t bufLen, const char *OTATopi ret = HAL_Snprintf(buf, bufLen, "$ota/%s/%s/%s", OTATopicType, productId, deviceName); - if(ret >= bufLen) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + if (ret >= bufLen) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); if (ret < 0) { Log_e("HAL_Snprintf failed"); @@ -80,8 +80,8 @@ static int _otamqtt_publish(OTA_MQTT_Struct_t *handle, const char *topicType, in /* inform OTA to topic: "/ota/device/progress/$(product_id)/$(device_name)" */ ret = _otamqtt_gen_topic_name(topic_name, OTA_MAX_TOPIC_LEN, topicType, handle->product_id, handle->device_name); if (ret < 0) { - Log_e("generate topic name of info failed"); - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + Log_e("generate topic name of info failed"); + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); } ret = IOT_MQTT_Publish(handle->mqtt, topic_name, &pub_params); @@ -147,7 +147,7 @@ void *qcloud_osc_init(const char *productId, const char *deviceName, void *chann do_exit: if (NULL != h_osc) { - HAL_Free(h_osc); + HAL_Free(h_osc); } return NULL; @@ -182,7 +182,7 @@ int qcloud_osc_report_upgrade_result(void *handle, const char *msg) return _otamqtt_publish(handle, "report", QOS1, msg); } -#endif +#endif #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/system/system_mqtt.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/system/system_mqtt.c index f83acd14..a165b4d1 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/system/system_mqtt.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/services/system/system_mqtt.c @@ -25,7 +25,7 @@ extern "C" { #include "qcloud_iot_import.h" -#ifdef SYSTEM_COMM +#ifdef SYSTEM_COMM #include "qcloud_iot_export_system.h" #include "mqtt_client.h" @@ -35,27 +35,28 @@ extern "C" { typedef struct _sys_mqtt_state { bool topic_sub_ok; bool result_recv_ok; - long time; -}SysMQTTState; + long time; +} SysMQTTState; static SysMQTTState sg_state = { - .topic_sub_ok = false, - .result_recv_ok = false, - .time = 0}; + .topic_sub_ok = false, + .result_recv_ok = false, + .time = 0 +}; static void _system_mqtt_message_callback(void *pClient, MQTTMessage *message, void *pUserData) { #define MAX_RECV_LEN (512) - POINTER_SANITY_CHECK_RTN(message); + POINTER_SANITY_CHECK_RTN(message); static char rcv_buf[MAX_RECV_LEN + 1]; - size_t len = (message->payload_len > MAX_RECV_LEN)?MAX_RECV_LEN:(message->payload_len); + size_t len = (message->payload_len > MAX_RECV_LEN) ? MAX_RECV_LEN : (message->payload_len); - if(message->payload_len > MAX_RECV_LEN){ - Log_e("payload len oversize"); - } + if (message->payload_len > MAX_RECV_LEN) { + Log_e("payload len oversize"); + } memcpy(rcv_buf, message->payload, len); rcv_buf[len] = '\0'; // jsmn_parse relies on a string SysMQTTState *state = (SysMQTTState *)pUserData; @@ -75,28 +76,28 @@ static void _system_mqtt_sub_event_handler(void *pclient, MQTTEventType event_ty { SysMQTTState *state = (SysMQTTState *)pUserData; - switch(event_type) { + switch (event_type) { case MQTT_EVENT_SUBCRIBE_SUCCESS: Log_d("mqtt sys topic subscribe success"); - state->topic_sub_ok = true; + state->topic_sub_ok = true; break; case MQTT_EVENT_SUBCRIBE_TIMEOUT: Log_i("mqtt sys topic subscribe timeout"); - state->topic_sub_ok = false; + state->topic_sub_ok = false; break; case MQTT_EVENT_SUBCRIBE_NACK: Log_i("mqtt sys topic subscribe NACK"); - state->topic_sub_ok = false; + state->topic_sub_ok = false; break; case MQTT_EVENT_UNSUBSCRIBE: Log_i("mqtt sys topic has been unsubscribed"); - state->topic_sub_ok = false;; + state->topic_sub_ok = false;; break; case MQTT_EVENT_CLIENT_DESTROY: Log_i("mqtt client has been destroyed"); - state->topic_sub_ok = false;; + state->topic_sub_ok = false;; break; default: return; @@ -122,7 +123,7 @@ static int _iot_system_info_get_publish(void *pClient) pub_params.payload = payload_content; pub_params.payload_len = strlen(payload_content); - return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); + return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); } static int _iot_system_info_result_subscribe(void *pClient) @@ -134,8 +135,7 @@ static int _iot_system_info_result_subscribe(void *pClient) char topic_name[128] = {0}; int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$sys/operation/result/%s/%s", dev_info->product_id, dev_info->device_name); - if (size < 0 || size > sizeof(topic_name) - 1) - { + if (size < 0 || size > sizeof(topic_name) - 1) { Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); return QCLOUD_ERR_FAILURE; } @@ -159,8 +159,8 @@ int IOT_Get_SysTime(void* pClient, long *time) // subscribe sys topic: $sys/operation/get/${productid}/${devicename} // skip this if the subscription is done and valid - if(!sg_state.topic_sub_ok){ - for(cntSub = 0; cntSub < 3; cntSub++){ + if (!sg_state.topic_sub_ok) { + for (cntSub = 0; cntSub < 3; cntSub++) { ret = _iot_system_info_result_subscribe(mqtt_client); if (ret < 0) { Log_w("_iot_system_info_result_subscribe failed: %d, cnt: %d", ret, cntSub); @@ -169,39 +169,39 @@ int IOT_Get_SysTime(void* pClient, long *time) /* wait for sub ack */ ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); - if(sg_state.topic_sub_ok) { + if (sg_state.topic_sub_ok) { break; } } } // return failure if subscribe failed - if(!sg_state.topic_sub_ok){ + if (!sg_state.topic_sub_ok) { Log_e("Subscribe sys topic failed!"); return QCLOUD_ERR_FAILURE; } sg_state.result_recv_ok = false; // publish msg to get system timestamp - ret = _iot_system_info_get_publish(mqtt_client); - if (ret < 0) { - Log_e("client publish sys topic failed :%d.", ret); + ret = _iot_system_info_get_publish(mqtt_client); + if (ret < 0) { + Log_e("client publish sys topic failed :%d.", ret); return ret; - } + } do { ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); cntRev++; - } while(!sg_state.result_recv_ok && cntRev < 20); + } while (!sg_state.result_recv_ok && cntRev < 20); - - if (sg_state.result_recv_ok) { + + if (sg_state.result_recv_ok) { *time = sg_state.time; - ret = QCLOUD_RET_SUCCESS; + ret = QCLOUD_RET_SUCCESS; } else { *time = 0; ret = QCLOUD_ERR_FAILURE; - } + } return ret; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_parser.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_parser.c index 11827e1f..9adc8c5e 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_parser.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_parser.c @@ -60,7 +60,7 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, char JsonMark[JSTYPEMAX][2] = { { '\"', '\"' }, { '{', '}' }, { '[', ']' }, { '0', ' ' } }; int iMarkDepth = 0, iValueType = JSNONE, iNameLen = 0, iValueLen = 0; char *p_cName = 0, *p_cValue = 0, *p_cPos = str; - char lastchr = ' '; + char lastchr = ' '; if (type == JSOBJECT) { /* Get Key */ @@ -81,7 +81,7 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, while (p_cPos && *p_cPos) { if (*p_cPos == '"') { iValueType = JSSTRING; - lastchr = *p_cPos; + lastchr = *p_cPos; p_cValue = ++p_cPos; break; } else if (*p_cPos == '{') { @@ -99,12 +99,12 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, } else if (*p_cPos == 't' || *p_cPos == 'T' || *p_cPos == 'f' || *p_cPos == 'F') { iValueType = JSBOOLEAN; p_cValue = p_cPos; - break; - }else if (*p_cPos == 'n' || *p_cPos == 'N') { + break; + } else if (*p_cPos == 'n' || *p_cPos == 'N') { iValueType = JSNULL; p_cValue = p_cPos; break; - } + } p_cPos++; } while (p_cPos && *p_cPos && iValueType > JSNONE) { @@ -125,40 +125,38 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, break; } } else if (iValueType == JSNULL) { //support null/NULL - int nlen = strlen(p_cValue); - - if ((*p_cValue == 'n' || *p_cValue == 'N') && nlen >= 4 + int nlen = strlen(p_cValue); + + if ((*p_cValue == 'n' || *p_cValue == 'N') && nlen >= 4 && (!strncmp(p_cValue, "null", 4) || !strncmp(p_cValue, "NULL", 4))) { iValueLen = 4; p_cPos = p_cValue + iValueLen; break; - } - } - else if (iValueType == JSNUMBER) { + } + } else if (iValueType == JSNUMBER) { //if (*p_cPos < '0' || *p_cPos > '9') { - if ((*p_cPos < '0' || *p_cPos > '9')&&(*p_cPos != '.')) { //support float + if ((*p_cPos < '0' || *p_cPos > '9') && (*p_cPos != '.')) { //support float iValueLen = p_cPos - p_cValue; break; } - } - else if (*p_cPos == JsonMark[iValueType][1]) { + } else if (*p_cPos == JsonMark[iValueType][1]) { if (iMarkDepth == 0) { - iValueLen = p_cPos - p_cValue + (iValueType == JSSTRING ? 0 : 1); - p_cPos++; - if((iValueType == JSSTRING) && (lastchr == '\\')){ - lastchr = *p_cPos; - continue; - }else{ - break; - } + iValueLen = p_cPos - p_cValue + (iValueType == JSSTRING ? 0 : 1); + p_cPos++; + if ((iValueType == JSSTRING) && (lastchr == '\\')) { + lastchr = *p_cPos; + continue; + } else { + break; + } } else { iMarkDepth--; } } else if (*p_cPos == JsonMark[iValueType][0]) { iMarkDepth++; } - lastchr = *p_cPos; + lastchr = *p_cPos; p_cPos++; } @@ -233,7 +231,7 @@ int json_get_value_by_name_cb(char *p_cName, int iNameLen, char *p_cValue, int i #endif if ((iNameLen == p_stNameValue->nLen) && !strncmp(p_cName, p_stNameValue->pN, p_stNameValue->nLen)) { - + p_stNameValue->pV = p_cValue; p_stNameValue->vLen = iValueLen; p_stNameValue->vType = iValueType; @@ -256,9 +254,9 @@ char *json_get_value_by_name(char *p_cJsonStr, int iStrLen, char *p_cName, int * } if (p_iValueType) { *p_iValueType = stNV.vType; - if(JSNULL == stNV.vType){ - stNV.pV = NULL; - } + if (JSNULL == stNV.vType) { + stNV.pV = NULL; + } } } return stNV.pV; diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_token.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_token.c index 9e760f88..143a5f42 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_token.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/json_token.c @@ -91,9 +91,6 @@ list_head_t *LITE_json_keys_of(char *src, char *prefix) json_key_t *entry = NULL; entry = HAL_Malloc(sizeof(json_key_t)); - if (NULL == entry) { - return NULL; - } memset(entry, 0, sizeof(json_key_t)); entry->key = LITE_format_string("%s%.*s", prefix, klen, key); list_add_tail(&entry->list, &keylist); @@ -112,9 +109,6 @@ list_head_t *LITE_json_keys_of(char *src, char *prefix) json_key_t *entry = NULL; entry = HAL_Malloc(sizeof(json_key_t)); - if (NULL == entry) { - return NULL; - } memset(entry, 0, sizeof(json_key_t)); list_add_tail(&entry->list, &keylist); @@ -138,88 +132,94 @@ void LITE_json_keys_release(list_head_t *keylist) } -static void _strip_transfer(char *src) +static void _strip_transfer(char *src) { - char *end = src + strlen(src)+ 1; - - while(*src != '\0') - { - if(*src == '\\') - { - memmove(src, src+1, end - src); - end--; - } - src++; - } -} + char *end = src + strlen(src) + 1; + while (*src != '\0') { + if (*src == '\\') { + memmove(src, src + 1, end - src); + end--; + } + src++; + } +} char * LITE_json_string_value_strip_transfer(char *key, char *src) { - char * str = LITE_json_value_of(key, src); + char * str = LITE_json_value_of(key, src); - if(NULL != str){ - _strip_transfer(str); - } - return str; + if (NULL != str) { + _strip_transfer(str); + } + return str; } -int LITE_get_int32(int32_t *value, char *src) { - return (sscanf(src, "%" SCNi32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_int32(int32_t *value, char *src) +{ + return (sscanf(src, "%" SCNi32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_int16(int16_t *value, char *src) { - return (sscanf(src, "%" SCNi16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_int16(int16_t *value, char *src) +{ + return (sscanf(src, "%" SCNi16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_int8(int8_t *value, char *src) { - return (sscanf(src, "%" SCNi8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_int8(int8_t *value, char *src) +{ + return (sscanf(src, "%" SCNi8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_uint32(uint32_t *value, char *src) { - return (sscanf(src, "%" SCNu32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_uint32(uint32_t *value, char *src) +{ + return (sscanf(src, "%" SCNu32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_uint16(uint16_t *value, char *src) { - return (sscanf(src, "%" SCNu16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_uint16(uint16_t *value, char *src) +{ + return (sscanf(src, "%" SCNu16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_uint8(uint8_t *value, char *src) { - return (sscanf(src, "%" SCNu8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_uint8(uint8_t *value, char *src) +{ + return (sscanf(src, "%" SCNu8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_float(float *value, char *src) { - return (sscanf(src, "%f", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_float(float *value, char *src) +{ + return (sscanf(src, "%f", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_double(double *value, char *src) { - return (sscanf(src, "%lf", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_double(double *value, char *src) +{ + return (sscanf(src, "%lf", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_boolean(bool *value, char *src) { - if (!strcmp(src, "false")) { - *value = false; - } - else { - *value = true; - } +int LITE_get_boolean(bool *value, char *src) +{ + if (!strcmp(src, "false")) { + *value = false; + } else { + *value = true; + } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } -int LITE_get_string(int8_t *value, char *src, uint16_t max_len) { - int rc; - - if(NULL != strncpy((char *)value, src, max_len)){ - value[Min(strlen(src), max_len)] = '\0'; - rc = QCLOUD_RET_SUCCESS; - }else{ - rc = QCLOUD_ERR_FAILURE; - } - - return rc; +int LITE_get_string(int8_t *value, char *src, uint16_t max_len) +{ + int rc; + + if (NULL != strncpy((char *)value, src, max_len)) { + value[Min(strlen(src), max_len)] = '\0'; + rc = QCLOUD_RET_SUCCESS; + } else { + rc = QCLOUD_ERR_FAILURE; + } + + return rc; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c index 834e68d9..22c69726 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c @@ -18,6 +18,8 @@ extern "C" { #endif #include "qcloud_iot_ca.h" +#include "qcloud_iot_import.h" + #include @@ -49,6 +51,8 @@ static const char *iot_ca_crt = \ "-----END CERTIFICATE-----" }; +#ifdef OTA_USE_HTTPS + static const char *iot_https_ca_crt = \ { "-----BEGIN CERTIFICATE-----\r\n" @@ -101,17 +105,21 @@ static const char *iot_https_ca_crt = \ }; #endif -const char *iot_ca_get() { +#endif + +const char *iot_ca_get() +{ #ifndef AUTH_WITH_NOTLS - return iot_ca_crt; + return iot_ca_crt; #else return NULL; #endif } -const char *iot_https_ca_get() { -#ifndef AUTH_WITH_NOTLS - return iot_https_ca_crt; +const char *iot_https_ca_get() +{ +#if ((!defined(AUTH_WITH_NOTLS)) && (defined OTA_USE_HTTPS)) + return iot_https_ca_crt; #else return NULL; #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c index 2371a6d6..d82e82ba 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c @@ -25,39 +25,37 @@ extern "C" { static DeviceInfo sg_device_info; static bool sg_devinfo_initialized; -int iot_device_info_init() +int iot_device_info_init() { - if (sg_devinfo_initialized) { - Log_e("device info has been initialized."); - return 0; - } + if (sg_devinfo_initialized) { + Log_e("device info has been initialized."); + return 0; + } - memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); - sg_devinfo_initialized = true; - - return QCLOUD_RET_SUCCESS; + memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); + sg_devinfo_initialized = true; + + return QCLOUD_RET_SUCCESS; } -int iot_device_info_set(const char *product_id, const char *device_name) -{ +int iot_device_info_set(const char *product_id, const char *device_name) +{ - memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); - if ((MAX_SIZE_OF_PRODUCT_ID) < strlen(product_id)) - { - Log_e("product name(%s) length:(%lu) exceeding limitation", product_id, strlen(product_id)); - return QCLOUD_ERR_FAILURE; - } - if ((MAX_SIZE_OF_DEVICE_NAME) < strlen(device_name)) - { - Log_e("device name(%s) length:(%lu) exceeding limitation", device_name, strlen(device_name)); - return QCLOUD_ERR_FAILURE; - } + memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); + if ((MAX_SIZE_OF_PRODUCT_ID) < strlen(product_id)) { + Log_e("product name(%s) length:(%lu) exceeding limitation", product_id, strlen(product_id)); + return QCLOUD_ERR_FAILURE; + } + if ((MAX_SIZE_OF_DEVICE_NAME) < strlen(device_name)) { + Log_e("device name(%s) length:(%lu) exceeding limitation", device_name, strlen(device_name)); + return QCLOUD_ERR_FAILURE; + } - strncpy(sg_device_info.product_id, product_id, MAX_SIZE_OF_PRODUCT_ID); - strncpy(sg_device_info.device_name, device_name, MAX_SIZE_OF_DEVICE_NAME); + strncpy(sg_device_info.product_id, product_id, MAX_SIZE_OF_PRODUCT_ID); + strncpy(sg_device_info.device_name, device_name, MAX_SIZE_OF_DEVICE_NAME); - /* construct device-id(@product_id+@device_name) */ - memset(sg_device_info.client_id, 0x0, MAX_SIZE_OF_CLIENT_ID); + /* construct device-id(@product_id+@device_name) */ + memset(sg_device_info.client_id, 0x0, MAX_SIZE_OF_CLIENT_ID); int ret = HAL_Snprintf(sg_device_info.client_id, MAX_SIZE_OF_CLIENT_ID, "%s%s", product_id, device_name); if ((ret < 0) || (ret >= MAX_SIZE_OF_CLIENT_ID)) { Log_e("set device info failed"); @@ -65,7 +63,7 @@ int iot_device_info_set(const char *product_id, const char *device_name) } Log_i("SDK_Ver: %s, Product_ID: %s, Device_Name: %s", QCLOUD_IOT_DEVICE_SDK_VERSION, product_id, device_name); - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } DeviceInfo* iot_device_info_get(void) diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c index ea64fff1..c1760135 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c @@ -29,7 +29,7 @@ static char *level_str[] = { "DIS", "ERR", "WRN", "INF", "DBG" }; -static LogMessageHandler sg_log_message_handler= NULL; +static LogMessageHandler sg_log_message_handler = NULL; LOG_LEVEL g_log_print_level = eLOG_INFO; @@ -46,35 +46,37 @@ static const char *_get_filename(const char *p) #else char ch = '/'; #endif - const char *q = strrchr(p,ch); - if(q == NULL) - { + const char *q = strrchr(p, ch); + if (q == NULL) { q = p; - } - else - { + } else { q++; } return q; } -void IOT_Log_Set_Level(LOG_LEVEL logLevel) { +void IOT_Log_Set_Level(LOG_LEVEL logLevel) +{ g_log_print_level = logLevel; } -LOG_LEVEL IOT_Log_Get_Level() { +LOG_LEVEL IOT_Log_Get_Level() +{ return g_log_print_level; } -void IOT_Log_Set_MessageHandler(LogMessageHandler handler) { - sg_log_message_handler = handler; +void IOT_Log_Set_MessageHandler(LogMessageHandler handler) +{ + sg_log_message_handler = handler; } -void IOT_Log_Set_Upload_Level(LOG_LEVEL logLevel) { +void IOT_Log_Set_Upload_Level(LOG_LEVEL logLevel) +{ g_log_upload_level = logLevel; } -LOG_LEVEL IOT_Log_Get_Upload_Level() { +LOG_LEVEL IOT_Log_Get_Upload_Level() +{ return g_log_upload_level; } @@ -91,7 +93,7 @@ void IOT_Log_Fini_Uploader(void) { #ifdef LOG_UPLOAD fini_log_uploader(); - return; + return; #else return ; #endif @@ -108,16 +110,16 @@ int IOT_Log_Upload(bool force_upload) void IOT_Log_Gen(const char *file, const char *func, const int line, const int level, const char *fmt, ...) { - if (level > g_log_print_level && level > g_log_upload_level) { - return; - } + if (level > g_log_print_level && level > g_log_upload_level) { + return; + } /* format log content */ - const char *file_name = _get_filename(file); + const char *file_name = _get_filename(file); - char sg_text_buf[MAX_LOG_MSG_LEN + 1]; - char *tmp_buf = sg_text_buf; - char *o = tmp_buf; + char sg_text_buf[MAX_LOG_MSG_LEN + 1]; + char *tmp_buf = sg_text_buf; + char *o = tmp_buf; memset(tmp_buf, 0, sizeof(sg_text_buf)); o += HAL_Snprintf(o, sizeof(sg_text_buf), "%s|%s|%s|%s(%d): ", level_str[level], HAL_Timer_current(), file_name, func, line); @@ -138,9 +140,9 @@ void IOT_Log_Gen(const char *file, const char *func, const int line, const int l if (level <= g_log_print_level) { /* customer defined log print handler */ - if (sg_log_message_handler != NULL && sg_log_message_handler(tmp_buf)) { - return; - } + if (sg_log_message_handler != NULL && sg_log_message_handler(tmp_buf)) { + return; + } /* default log handler: print to console */ HAL_Printf("%s", tmp_buf); diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/string_utils.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/string_utils.c index 49e9763c..7a735934 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/string_utils.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/string_utils.c @@ -35,9 +35,6 @@ char *LITE_format_string(const char *fmt, ...) va_start(ap, fmt); tmp = HAL_Malloc(TEMP_STRING_MAXLEN); - if (NULL == tmp) { - return NULL; - } memset(tmp, 0, TEMP_STRING_MAXLEN); rc = HAL_Vsnprintf(tmp, TEMP_STRING_MAXLEN, fmt, ap); va_end(ap); @@ -60,12 +57,9 @@ char *LITE_format_nstring(const int len, const char *fmt, ...) int rc = -1; va_start(ap, fmt); - tmp = HAL_Malloc(len+2); - if (NULL == tmp) { - return NULL; - } - memset(tmp, 0, len+2); - rc = HAL_Vsnprintf(tmp, len+1, fmt, ap); + tmp = HAL_Malloc(len + 2); + memset(tmp, 0, len + 2); + rc = HAL_Vsnprintf(tmp, len + 1, fmt, ap); va_end(ap); LITE_ASSERT(tmp); LITE_ASSERT(rc < 1024); @@ -176,3 +170,17 @@ void LITE_replace_substr(char originalString[], char key[], char swap[]) } } } + +void LITE_str_strip_char(char *src, char destCh) +{ + char *end = src + strlen(src) + 1; + + while (*src != '\0') { + if (*src == destCh) { + memmove(src, src + 1, end - src); + end--; + } + src++; + } +} + diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_aes.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_aes.c index f4d8db0e..bf4d46c3 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_aes.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_aes.c @@ -112,8 +112,7 @@ static int aes_padlock_ace = -1; /* * Forward S-box */ -static const unsigned char FSb[256] = -{ +static const unsigned char FSb[256] = { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, @@ -243,8 +242,7 @@ static const uint32_t FT3[256] = { FT }; /* * Reverse S-box */ -static const unsigned char RSb[256] = -{ +static const unsigned char RSb[256] = { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, @@ -374,8 +372,7 @@ static const uint32_t RT3[256] = { RT }; /* * Round constants */ -static const uint32_t RCON[10] = -{ +static const uint32_t RCON[10] = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x0000001B, 0x00000036 @@ -428,8 +425,7 @@ static void aes_gen_tables( void ) /* * compute pow and log tables over GF(2^8) */ - for( i = 0, x = 1; i < 256; i++ ) - { + for ( i = 0, x = 1; i < 256; i++ ) { pow[i] = x; log[x] = i; x = ( x ^ XTIME( x ) ) & 0xFF; @@ -438,8 +434,7 @@ static void aes_gen_tables( void ) /* * calculate the round constants */ - for( i = 0, x = 1; i < 10; i++ ) - { + for ( i = 0, x = 1; i < 10; i++ ) { RCON[i] = (uint32_t) x; x = XTIME( x ) & 0xFF; } @@ -450,14 +445,17 @@ static void aes_gen_tables( void ) FSb[0x00] = 0x63; RSb[0x63] = 0x00; - for( i = 1; i < 256; i++ ) - { + for ( i = 1; i < 256; i++ ) { x = pow[255 - log[i]]; - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + y = x; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; x ^= y ^ 0x63; FSb[i] = (unsigned char) x; @@ -467,8 +465,7 @@ static void aes_gen_tables( void ) /* * generate the forward and reverse tables */ - for( i = 0; i < 256; i++ ) - { + for ( i = 0; i < 256; i++ ) { x = FSb[i]; y = XTIME( x ) & 0xFF; z = ( y ^ x ) & 0xFF; @@ -542,7 +539,7 @@ void utils_aes_init( utils_aes_context *ctx ) void utils_aes_free( utils_aes_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; utils_platform_zeroize( ctx, sizeof( utils_aes_context ) ); @@ -553,7 +550,7 @@ void utils_aes_free( utils_aes_context *ctx ) */ #if !defined(UTILS_AES_SETKEY_ENC_ALT) int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { unsigned int i; uint32_t *RK; @@ -561,17 +558,22 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, AES_VALIDATE_RET( ctx != NULL ); AES_VALIDATE_RET( key != NULL ); - switch( keybits ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( UTILS_ERR_AES_INVALID_KEY_LENGTH ); + switch ( keybits ) { + case 128: + ctx->nr = 10; + break; + case 192: + ctx->nr = 12; + break; + case 256: + ctx->nr = 14; + break; + default : + return ( UTILS_ERR_AES_INVALID_KEY_LENGTH ); } #if !defined(UTILS_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { + if ( aes_init_done == 0 ) { aes_gen_tables(); aes_init_done = 1; } @@ -579,22 +581,19 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, ctx->rk = RK = ctx->buf; - for( i = 0; i < ( keybits >> 5 ); i++ ) - { + for ( i = 0; i < ( keybits >> 5 ); i++ ) { GET_UINT32_LE( RK[i], key, i << 2 ); } - switch( ctx->nr ) - { + switch ( ctx->nr ) { case 10: - for( i = 0; i < 10; i++, RK += 4 ) - { + for ( i = 0; i < 10; i++, RK += 4 ) { RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); RK[5] = RK[1] ^ RK[4]; RK[6] = RK[2] ^ RK[5]; @@ -604,13 +603,12 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, case 12: - for( i = 0; i < 8; i++, RK += 6 ) - { + for ( i = 0; i < 8; i++, RK += 6 ) { RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); RK[7] = RK[1] ^ RK[6]; RK[8] = RK[2] ^ RK[7]; @@ -622,23 +620,22 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, case 14: - for( i = 0; i < 7; i++, RK += 8 ) - { + for ( i = 0; i < 7; i++, RK += 8 ) { RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); RK[9] = RK[1] ^ RK[8]; RK[10] = RK[2] ^ RK[9]; RK[11] = RK[3] ^ RK[10]; RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); RK[13] = RK[5] ^ RK[12]; RK[14] = RK[6] ^ RK[13]; @@ -647,7 +644,7 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, break; } - return( 0 ); + return ( 0 ); } #endif /* !UTILS_AES_SETKEY_ENC_ALT */ @@ -656,7 +653,7 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, */ #if !defined(UTILS_AES_SETKEY_DEC_ALT) int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int i, j, ret; utils_aes_context cty; @@ -671,7 +668,7 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, ctx->rk = RK = ctx->buf; /* Also checks keybits */ - if( ( ret = utils_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) + if ( ( ret = utils_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) goto exit; ctx->nr = cty.nr; @@ -684,10 +681,8 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, *RK++ = *SK++; *RK++ = *SK++; - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { + for ( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) { + for ( j = 0; j < 4; j++, SK++ ) { *RK++ = AES_RT0( FSb[ ( *SK ) & 0xFF ] ) ^ AES_RT1( FSb[ ( *SK >> 8 ) & 0xFF ] ) ^ AES_RT2( FSb[ ( *SK >> 16 ) & 0xFF ] ) ^ @@ -703,7 +698,7 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, exit: utils_aes_free( &cty ); - return( ret ); + return ( ret ); } @@ -760,21 +755,24 @@ exit: */ #if !defined(UTILS_AES_ENCRYPT_ALT) int utils_internal_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { int i; uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -782,42 +780,42 @@ int utils_internal_aes_encrypt( utils_aes_context *ctx, AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); PUT_UINT32_LE( X2, output, 8 ); PUT_UINT32_LE( X3, output, 12 ); - return( 0 ); + return ( 0 ); } #endif /* !UTILS_AES_ENCRYPT_ALT */ #if !defined(UTILS_DEPRECATED_REMOVED) void utils_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { utils_internal_aes_encrypt( ctx, input, output ); } @@ -828,21 +826,24 @@ void utils_aes_encrypt( utils_aes_context *ctx, */ #if !defined(UTILS_AES_DECRYPT_ALT) int utils_internal_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { int i; uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -850,42 +851,42 @@ int utils_internal_aes_decrypt( utils_aes_context *ctx, AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); PUT_UINT32_LE( X2, output, 8 ); PUT_UINT32_LE( X3, output, 12 ); - return( 0 ); + return ( 0 ); } #endif /* !UTILS_AES_DECRYPT_ALT */ #if !defined(UTILS_DEPRECATED_REMOVED) void utils_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { utils_internal_aes_decrypt( ctx, input, output ); } @@ -895,9 +896,9 @@ void utils_aes_decrypt( utils_aes_context *ctx, * AES-ECB block encryption/decryption */ int utils_aes_crypt_ecb( utils_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { AES_VALIDATE_RET( ctx != NULL ); AES_VALIDATE_RET( input != NULL ); @@ -905,10 +906,10 @@ int utils_aes_crypt_ecb( utils_aes_context *ctx, AES_VALIDATE_RET( mode == UTILS_AES_ENCRYPT || mode == UTILS_AES_DECRYPT ); - if( mode == UTILS_AES_ENCRYPT ) - return( utils_internal_aes_encrypt( ctx, input, output ) ); + if ( mode == UTILS_AES_ENCRYPT ) + return ( utils_internal_aes_encrypt( ctx, input, output ) ); else - return( utils_internal_aes_decrypt( ctx, input, output ) ); + return ( utils_internal_aes_decrypt( ctx, input, output ) ); } #if defined(UTILS_CIPHER_MODE_CBC) @@ -916,11 +917,11 @@ int utils_aes_crypt_ecb( utils_aes_context *ctx, * AES-CBC buffer encryption/decryption */ int utils_aes_crypt_cbc( utils_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; @@ -932,18 +933,16 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, AES_VALIDATE_RET( input != NULL ); AES_VALIDATE_RET( output != NULL ); - if( length % 16 ) - return( UTILS_ERR_AES_INVALID_INPUT_LENGTH ); + if ( length % 16 ) + return ( UTILS_ERR_AES_INVALID_INPUT_LENGTH ); - if( mode == UTILS_AES_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == UTILS_AES_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 16 ); utils_aes_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 16 ); @@ -952,12 +951,9 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, output += 16; length -= 16; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); utils_aes_crypt_ecb( ctx, mode, output, output ); @@ -969,59 +965,59 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, } } - return( 0 ); + return ( 0 ); } int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, uint8_t *pOutData, uint32_t outBuffLen, - uint8_t mode, uint8_t *pKey, uint16_t keybits, uint8_t *iv) + uint8_t mode, uint8_t *pKey, uint16_t keybits, uint8_t *iv) { - int ret = QCLOUD_RET_SUCCESS; - int padlen; - utils_aes_context ctx; - - utils_aes_init( &ctx ); + int ret = QCLOUD_RET_SUCCESS; + int padlen; + utils_aes_context ctx; - - if(UTILS_AES_ENCRYPT == mode){ - ret = utils_aes_setkey_enc( &ctx, pKey, keybits); - if( ret != 0 ){ - Log_e("Set encry key err,ret:%d", ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } + utils_aes_init( &ctx ); - /*zero padding*/ - if(outBuffLen < (datalen + UTILS_AES_BLOCK_LEN)){ - Log_e("Output buffer should not less than datalen+UTILS_AES_BLOCK_LEN for padding"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - padlen = UTILS_AES_BLOCK_LEN - datalen%UTILS_AES_BLOCK_LEN; - memcpy(pOutData, pInData, datalen); - memset(pOutData + datalen, '\0', padlen); /*zero-padding*/ - datalen += padlen; - }else{ - ret = utils_aes_setkey_dec( &ctx, pKey, keybits); - if( ret != 0 ){ - Log_e("Set dencry key err,ret:%d", ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - } - - ret = utils_aes_crypt_cbc( &ctx, mode, datalen, iv, pInData, pOutData); - if( ret != 0 ){ - Log_e("encryt err,ret:%d",ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - }else{ - ret = QCLOUD_RET_SUCCESS; - } - -exit: - - return ret; -} + + if (UTILS_AES_ENCRYPT == mode) { + ret = utils_aes_setkey_enc( &ctx, pKey, keybits); + if ( ret != 0 ) { + Log_e("Set encry key err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*zero padding*/ + if (outBuffLen < (datalen + UTILS_AES_BLOCK_LEN)) { + Log_e("Output buffer should not less than datalen+UTILS_AES_BLOCK_LEN for padding"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + padlen = UTILS_AES_BLOCK_LEN - datalen % UTILS_AES_BLOCK_LEN; + memcpy(pOutData, pInData, datalen); + memset(pOutData + datalen, '\0', padlen); /*zero-padding*/ + datalen += padlen; + } else { + ret = utils_aes_setkey_dec( &ctx, pKey, keybits); + if ( ret != 0 ) { + Log_e("Set dencry key err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + } + + ret = utils_aes_crypt_cbc( &ctx, mode, datalen, iv, pInData, pOutData); + if ( ret != 0 ) { + Log_e("encryt err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } else { + ret = QCLOUD_RET_SUCCESS; + } + +exit: + + return ret; +} #endif /* UTILS_CIPHER_MODE_CBC */ #endif /* !UTILS_AES_ALT */ @@ -1033,45 +1029,65 @@ exit: * * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } +static const unsigned char aes_test_ecb_dec[3][16] = { + { + 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, + 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 + }, + { + 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, + 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 + }, + { + 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, + 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE + } }; -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } +static const unsigned char aes_test_ecb_enc[3][16] = { + { + 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, + 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F + }, + { + 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, + 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 + }, + { + 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, + 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 + } }; #if defined(UTILS_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } +static const unsigned char aes_test_cbc_dec[3][16] = { + { + 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, + 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 + }, + { + 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, + 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B + }, + { + 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, + 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 + } }; -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } +static const unsigned char aes_test_cbc_enc[3][16] = { + { + 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, + 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D + }, + { + 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, + 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 + }, + { + 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, + 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 + } }; #endif /* UTILS_CIPHER_MODE_CBC */ @@ -1114,25 +1130,21 @@ int utils_aes_self_test( int verbose ) /* * ECB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-ECB-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memset( buf, 0, 16 ); - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { ret = utils_aes_setkey_dec( &ctx, key, keybits ); aes_tests = aes_test_ecb_dec[u]; - } - else - { + } else { ret = utils_aes_setkey_enc( &ctx, key, keybits ); aes_tests = aes_test_ecb_enc[u]; } @@ -1142,61 +1154,52 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - for( j = 0; j < 10000; j++ ) - { + for ( j = 0; j < 10000; j++ ) { ret = utils_aes_crypt_ecb( &ctx, mode, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; } - if( memcmp( buf, aes_tests, 16 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 16 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #if defined(UTILS_CIPHER_MODE_CBC) /* * CBC mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-CBC-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - memset( iv , 0, 16 ); + memset( iv, 0, 16 ); memset( prv, 0, 16 ); memset( buf, 0, 16 ); - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { ret = utils_aes_setkey_dec( &ctx, key, keybits ); aes_tests = aes_test_cbc_dec[u]; - } - else - { + } else { ret = utils_aes_setkey_enc( &ctx, key, keybits ); aes_tests = aes_test_cbc_enc[u]; } @@ -1206,20 +1209,15 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - for( j = 0; j < 10000; j++ ) - { - if( mode == UTILS_AES_ENCRYPT ) - { + for ( j = 0; j < 10000; j++ ) { + if ( mode == UTILS_AES_ENCRYPT ) { unsigned char tmp[16]; memcpy( tmp, prv, 16 ); @@ -1228,22 +1226,21 @@ int utils_aes_self_test( int verbose ) } ret = utils_aes_crypt_cbc( &ctx, mode, 16, iv, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; } - if( memcmp( buf, aes_tests, 16 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 16 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_CBC */ @@ -1251,15 +1248,14 @@ int utils_aes_self_test( int verbose ) /* * CFB128 mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-CFB128-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, aes_test_cfb128_iv, 16 ); memcpy( key, aes_test_cfb128_key[u], keybits / 8 ); @@ -1271,42 +1267,35 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { memcpy( buf, aes_test_cfb128_ct[u], 64 ); aes_tests = aes_test_cfb128_pt; - } - else - { + } else { memcpy( buf, aes_test_cfb128_pt, 64 ); aes_tests = aes_test_cfb128_ct[u]; } ret = utils_aes_crypt_cfb128( &ctx, mode, 64, &offset, iv, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; - if( memcmp( buf, aes_tests, 64 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 64 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_CFB */ @@ -1314,15 +1303,14 @@ int utils_aes_self_test( int verbose ) /* * OFB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-OFB-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, aes_test_ofb_iv, 16 ); memcpy( key, aes_test_ofb_key[u], keybits / 8 ); @@ -1334,42 +1322,35 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { memcpy( buf, aes_test_ofb_ct[u], 64 ); aes_tests = aes_test_ofb_pt; - } - else - { + } else { memcpy( buf, aes_test_ofb_pt, 64 ); aes_tests = aes_test_ofb_ct[u]; } ret = utils_aes_crypt_ofb( &ctx, 64, &offset, iv, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; - if( memcmp( buf, aes_tests, 64 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 64 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_OFB */ @@ -1377,184 +1358,173 @@ int utils_aes_self_test( int verbose ) /* * CTR mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-CTR-128 (%s): ", - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); memcpy( key, aes_test_ctr_key[u], 16 ); offset = 0; - if( ( ret = utils_aes_setkey_enc( &ctx, key, 128 ) ) != 0 ) + if ( ( ret = utils_aes_setkey_enc( &ctx, key, 128 ) ) != 0 ) goto exit; len = aes_test_ctr_len[u]; - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { memcpy( buf, aes_test_ctr_ct[u], len ); aes_tests = aes_test_ctr_pt[u]; - } - else - { + } else { memcpy( buf, aes_test_ctr_pt[u], len ); aes_tests = aes_test_ctr_ct[u]; } ret = utils_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, - stream_block, buf, buf ); - if( ret != 0 ) + stream_block, buf, buf ); + if ( ret != 0 ) goto exit; - if( memcmp( buf, aes_tests, len ) != 0 ) - { + if ( memcmp( buf, aes_tests, len ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_CTR */ #if defined(UTILS_CIPHER_MODE_XTS) { - static const int num_tests = - sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); - utils_aes_xts_context ctx_xts; + static const int num_tests = + sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); + utils_aes_xts_context ctx_xts; - /* - * XTS mode - */ - utils_aes_xts_init( &ctx_xts ); + /* + * XTS mode + */ + utils_aes_xts_init( &ctx_xts ); - for( i = 0; i < num_tests << 1; i++ ) - { - const unsigned char *data_unit; - u = i >> 1; - mode = i & 1; + for ( i = 0; i < num_tests << 1; i++ ) { + const unsigned char *data_unit; + u = i >> 1; + mode = i & 1; - if( verbose != 0 ) - utils_printf( " AES-XTS-128 (%s): ", - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + if ( verbose != 0 ) + utils_printf( " AES-XTS-128 (%s): ", + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - memset( key, 0, sizeof( key ) ); - memcpy( key, aes_test_xts_key[u], 32 ); - data_unit = aes_test_xts_data_unit[u]; + memset( key, 0, sizeof( key ) ); + memcpy( key, aes_test_xts_key[u], 32 ); + data_unit = aes_test_xts_data_unit[u]; - len = sizeof( *aes_test_xts_ct32 ); + len = sizeof( *aes_test_xts_ct32 ); - if( mode == UTILS_AES_DECRYPT ) - { - ret = utils_aes_xts_setkey_dec( &ctx_xts, key, 256 ); - if( ret != 0) + if ( mode == UTILS_AES_DECRYPT ) { + ret = utils_aes_xts_setkey_dec( &ctx_xts, key, 256 ); + if ( ret != 0) + goto exit; + memcpy( buf, aes_test_xts_ct32[u], len ); + aes_tests = aes_test_xts_pt32[u]; + } else { + ret = utils_aes_xts_setkey_enc( &ctx_xts, key, 256 ); + if ( ret != 0) + goto exit; + memcpy( buf, aes_test_xts_pt32[u], len ); + aes_tests = aes_test_xts_ct32[u]; + } + + + ret = utils_aes_crypt_xts( &ctx_xts, mode, len, data_unit, + buf, buf ); + if ( ret != 0 ) goto exit; - memcpy( buf, aes_test_xts_ct32[u], len ); - aes_tests = aes_test_xts_pt32[u]; - } - else - { - ret = utils_aes_xts_setkey_enc( &ctx_xts, key, 256 ); - if( ret != 0) + + if ( memcmp( buf, aes_tests, len ) != 0 ) { + ret = 1; goto exit; - memcpy( buf, aes_test_xts_pt32[u], len ); - aes_tests = aes_test_xts_ct32[u]; + } + + if ( verbose != 0 ) + utils_printf( "passed\n" ); } + if ( verbose != 0 ) + utils_printf( "\n" ); - ret = utils_aes_crypt_xts( &ctx_xts, mode, len, data_unit, - buf, buf ); - if( ret != 0 ) - goto exit; - - if( memcmp( buf, aes_tests, len ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); - - utils_aes_xts_free( &ctx_xts ); + utils_aes_xts_free( &ctx_xts ); } #endif /* UTILS_CIPHER_MODE_XTS */ ret = 0; exit: - if( ret != 0 && verbose != 0 ) + if ( ret != 0 && verbose != 0 ) utils_printf( "failed\n" ); utils_aes_free( &ctx ); - return( ret ); + return ( ret ); } - + /*aes128-cbc*/ int aes_sample(int verbose) { - int ret = 0,i; - unsigned int keybits; - unsigned char key[UTILS_AES_BLOCK_LEN] = "1234567890abcdef"; - char dataIn[1024] = {0}; - unsigned char iv[16]; - int sLen; - int datalen; + int ret = 0, i; + unsigned int keybits; + unsigned char key[UTILS_AES_BLOCK_LEN] = "1234567890abcdef"; + char dataIn[1024] = {0}; + unsigned char iv[16]; + int sLen; + int datalen; - utils_printf("\nAES-CBC-128 enc "); - keybits = AES_KEY_BITS_128; - memset( iv , '0', 16); + utils_printf("\nAES-CBC-128 enc "); + keybits = AES_KEY_BITS_128; + memset( iv, '0', 16); - sLen = strlen("{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}"); - strncpy(dataIn,"{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}",sLen); + sLen = strlen("{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}"); + strncpy(dataIn, "{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}", sLen); - utils_printf("\nthe data to encrypt(%d):\n",sLen); - for (i = 0; i #include #include "utils_base64.h" -static const unsigned char base64_enc_map[64] = -{ +static const unsigned char base64_enc_map[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', @@ -33,8 +32,7 @@ static const unsigned char base64_enc_map[64] = '8', '9', '+', '/' }; -static const unsigned char base64_dec_map[128] = -{ +static const unsigned char base64_dec_map[128] = { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, @@ -49,155 +47,144 @@ static const unsigned char base64_dec_map[128] = 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 127, 127, 127, 127, 127 }; - + #define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ - + int qcloud_iot_utils_base64encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; unsigned char *p; - - if( slen == 0 ) - { + + if ( slen == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } - + n = slen / 3 + ( slen % 3 != 0 ); - - if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) - { + + if ( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) { *olen = BASE64_SIZE_T_MAX; - return( QCLOUD_ERR_FAILURE ); + return ( QCLOUD_ERR_FAILURE ); } - + n *= 4; - - if( ( dlen < n + 1 ) || ( NULL == dst ) ) - { + + if ( ( dlen < n + 1 ) || ( NULL == dst ) ) { *olen = n + 1; - return( QCLOUD_ERR_FAILURE ); + return ( QCLOUD_ERR_FAILURE ); } - + n = ( slen / 3 ) * 3; - + int C1, C2, C3; - for( i = 0, p = dst; i < n; i += 3 ) - { + for ( i = 0, p = dst; i < n; i += 3 ) { C1 = *src++; C2 = *src++; C3 = *src++; - + *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; *p++ = base64_enc_map[C3 & 0x3F]; } - - if( i < slen ) - { + + if ( i < slen ) { C1 = *src++; C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; - + *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - - if( ( i + 1 ) < slen ) + + if ( ( i + 1 ) < slen ) *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; else *p++ = '='; - + *p++ = '='; } - + *olen = p - dst; *p = 0; - - return( 0 ); + + return ( 0 ); } int qcloud_iot_utils_base64decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; uint32_t j, x; unsigned char *p; - + /* First pass: check for validity and get output length */ - for( i = n = j = 0; i < slen; i++ ) - { + for ( i = n = j = 0; i < slen; i++ ) { /* Skip spaces before checking for EOL */ x = 0; - while( i < slen && src[i] == ' ' ) - { + while ( i < slen && src[i] == ' ' ) { ++i; ++x; } - + /* Spaces at end of buffer are OK */ - if( i == slen ) + if ( i == slen ) break; - - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) + + if ( ( slen - i ) >= 2 && + src[i] == '\r' && src[i + 1] == '\n' ) continue; - - if( src[i] == '\n' ) + + if ( src[i] == '\n' ) continue; - + /* Space inside a line is an error */ - if( x != 0 ) - return( QCLOUD_ERR_FAILURE ); - - if( src[i] == '=' && ++j > 2 ) - return( QCLOUD_ERR_FAILURE ); - - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( QCLOUD_ERR_FAILURE ); - - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( QCLOUD_ERR_FAILURE ); - + if ( x != 0 ) + return ( QCLOUD_ERR_FAILURE ); + + if ( src[i] == '=' && ++j > 2 ) + return ( QCLOUD_ERR_FAILURE ); + + if ( src[i] > 127 || base64_dec_map[src[i]] == 127 ) + return ( QCLOUD_ERR_FAILURE ); + + if ( base64_dec_map[src[i]] < 64 && j != 0 ) + return ( QCLOUD_ERR_FAILURE ); + n++; } - - if( n == 0 ) - { + + if ( n == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } - + n = ( ( n * 6 ) + 7 ) >> 3; n -= j; - - if( dst == NULL || dlen < n ) - { + + if ( dst == NULL || dlen < n ) { *olen = n; - return( QCLOUD_ERR_FAILURE ); + return ( QCLOUD_ERR_FAILURE ); } - - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' || *src == ' ' ) + + for ( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) { + if ( *src == '\r' || *src == '\n' || *src == ' ' ) continue; - + j -= ( base64_dec_map[*src] == 64 ); x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - - if( ++n == 4 ) - { + + if ( ++n == 4 ) { n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); + if ( j > 0 ) *p++ = (unsigned char)( x >> 16 ); + if ( j > 1 ) *p++ = (unsigned char)( x >> 8 ); + if ( j > 2 ) *p++ = (unsigned char)( x ); } } - + *olen = p - dst; - - return( 0 ); + + return ( 0 ); } - + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_getopt.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_getopt.c index 723f6f49..a00ad808 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_getopt.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_getopt.c @@ -22,12 +22,12 @@ #include "qcloud_iot_import.h" #include "utils_getopt.h" -static int utils_opterr = 1; /* if error message should be printed */ -static int utils_optind = 1; /* index into parent argv vector */ -static int utils_optopt; /* character checked for validity */ -static int utils_optreset = 1; /* reset getopt */ +static int utils_opterr = 1; /* if error message should be printed */ +static int utils_optind = 1; /* index into parent argv vector */ +static int utils_optopt; /* character checked for validity */ +static int utils_optreset = 1; /* reset getopt */ -char* utils_optarg; /* argument associated with option */ +char* utils_optarg; /* argument associated with option */ int utils_getopt(int nargc, char* const* nargv, const char* options) { @@ -36,67 +36,63 @@ int utils_getopt(int nargc, char* const* nargv, const char* options) #define BADARG (int)':' #define EMSG "" - static char* place = EMSG; /* option letter processing */ - const char* oli; /* option letter list index */ + static char* place = EMSG; /* option letter processing */ + const char* oli; /* option letter list index */ - if (utils_optreset || !*place) /* update scanning pointer */ - { - utils_optreset = 0; - - if (utils_optind >= nargc || *(place = nargv[utils_optind]) != '-') - { - utils_optind = 1; - utils_optreset = 1; - place = EMSG; - return (-1); - } + if (utils_optreset || !*place) { /* update scanning pointer */ + utils_optreset = 0; - place++; - } + if (utils_optind >= nargc || *(place = nargv[utils_optind]) != '-') { + utils_optind = 1; + utils_optreset = 1; + place = EMSG; + return (-1); + } - /* option letter okay? */ - if ((utils_optopt = (int)*place++) == (int)':' || - !(oli = strchr(options, utils_optopt))) { - /* - * if the user didn't specify '-' as an option, - * assume it means -1. - */ - if (utils_optopt == (int)'-') - return (-1); + place++; + } - if (!*place) - ++utils_optind; + /* option letter okay? */ + if ((utils_optopt = (int) * place++) == (int)':' || + !(oli = strchr(options, utils_optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (utils_optopt == (int)'-') + return (-1); - if (utils_opterr && *options != ':') - HAL_Printf("illegal option - %c\n", utils_optopt); + if (!*place) + ++utils_optind; - return (BADCH); - } + if (utils_opterr && *options != ':') + HAL_Printf("illegal option - %c\n", utils_optopt); - if (*++oli != ':') { /* don't need argument */ - utils_optarg = NULL; - if (!*place) - ++utils_optind; - } - else - { /* need an argument */ - if (*place) /* no white space */ - utils_optarg = place; - else if (nargc <= ++utils_optind) { /* no arg */ - place = EMSG; - if (*options == ':') - return (BADARG); - if (utils_opterr) - HAL_Printf("option requires an argument - %c\n", utils_optopt); - return (BADCH); - } - else /* white space */ - utils_optarg = nargv[utils_optind]; + return (BADCH); + } - place = EMSG; - ++utils_optind; - } + if (*++oli != ':') { /* don't need argument */ + utils_optarg = NULL; + if (!*place) + ++utils_optind; + } else { + /* need an argument */ + if (*place) /* no white space */ + utils_optarg = place; + else if (nargc <= ++utils_optind) { /* no arg */ + place = EMSG; + if (*options == ':') + return (BADARG); + if (utils_opterr) + HAL_Printf("option requires an argument - %c\n", utils_optopt); + return (BADCH); + } else /* white space */ + utils_optarg = nargv[utils_optind]; - /* dump back option letter */ - return (utils_optopt); + place = EMSG; + ++utils_optind; + } + + /* dump back option letter */ + return (utils_optopt); } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_hmac.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_hmac.c index 9ef75f97..db146241 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_hmac.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_hmac.c @@ -26,13 +26,13 @@ void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, int key_len) { - if((NULL == msg) || (NULL == digest) || (NULL == key)) { + if ((NULL == msg) || (NULL == digest) || (NULL == key)) { Log_e("parameter is Null,failed!"); return; } - if(key_len > KEY_IOPAD_SIZE) { - Log_e("key_len > size(%d) of array",KEY_IOPAD_SIZE); + if (key_len > KEY_IOPAD_SIZE) { + Log_e("key_len > size(%d) of array", KEY_IOPAD_SIZE); return; } @@ -76,13 +76,13 @@ void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, void utils_hmac_sha1(const char *msg, int msg_len, char *digest, const char *key, int key_len) { - if((NULL == msg) || (NULL == digest) || (NULL == key)) { + if ((NULL == msg) || (NULL == digest) || (NULL == key)) { Log_e("parameter is Null,failed!"); return; } - if(key_len > KEY_IOPAD_SIZE) { - Log_e("key_len > size(%d) of array",KEY_IOPAD_SIZE); + if (key_len > KEY_IOPAD_SIZE) { + Log_e("key_len > size(%d) of array", KEY_IOPAD_SIZE); return; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_list.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_list.c index a84f7b08..b873ab52 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_list.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_list.c @@ -274,7 +274,6 @@ ListNode *list_iterator_next(ListIterator *self) void list_iterator_destroy(ListIterator *self) { HAL_Free(self); - self = NULL; } /* diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c index 5af0574c..ad52181f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c @@ -19,13 +19,13 @@ int ring_buff_init(sRingbuff* ring_buff, char* buff, uint32_t size ) { - ring_buff->buffer = buff; + ring_buff->buffer = buff; ring_buff->size = size; ring_buff->readpoint = 0; ring_buff->writepoint = 0; - memset(ring_buff->buffer, 0, ring_buff->size); - ring_buff->full = false; - + memset(ring_buff->buffer, 0, ring_buff->size); + ring_buff->full = false; + return RINGBUFF_OK; } @@ -33,74 +33,59 @@ int ring_buff_flush(sRingbuff* ring_buff) { ring_buff->readpoint = 0; ring_buff->writepoint = 0; - memset(ring_buff->buffer, 0, ring_buff->size); - ring_buff->full = false; - + memset(ring_buff->buffer, 0, ring_buff->size); + ring_buff->full = false; + return RINGBUFF_OK; } int ring_buff_push_data(sRingbuff* ring_buff, uint8_t *pData, int len) { - int i; - - if(len > ring_buff->size) - { - return RINGBUFF_TOO_SHORT; - } + int i; - for(i = 0; i < len; i++) - { - if(((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) - { - ring_buff->full = true; - return RINGBUFF_FULL; - } - else - { - if(ring_buff->writepoint < (ring_buff->size - 1)) - { - ring_buff->writepoint ++; - } - else - { - ring_buff->writepoint = 0; - } - ring_buff->buffer[ring_buff->writepoint] = pData[i]; - } - } + if (len > ring_buff->size) { + return RINGBUFF_TOO_SHORT; + } - return RINGBUFF_OK; + for (i = 0; i < len; i++) { + if (((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) { + ring_buff->full = true; + return RINGBUFF_FULL; + } else { + if (ring_buff->writepoint < (ring_buff->size - 1)) { + ring_buff->writepoint ++; + } else { + ring_buff->writepoint = 0; + } + ring_buff->buffer[ring_buff->writepoint] = pData[i]; + } + } + + return RINGBUFF_OK; } int ring_buff_pop_data(sRingbuff* ring_buff, uint8_t *pData, int len) { - int i; + int i; - if(len > ring_buff->size) - { - return RINGBUFF_TOO_SHORT; - } + if (len > ring_buff->size) { + return RINGBUFF_TOO_SHORT; + } - for(i = 0; i < len; i++) - { - if(ring_buff->writepoint == ring_buff->readpoint) - { - break; - } - else - { - if(ring_buff->readpoint == (ring_buff->size - 1)) - { - ring_buff->readpoint = 0; - } + for (i = 0; i < len; i++) { + if (ring_buff->writepoint == ring_buff->readpoint) { + break; + } else { + if (ring_buff->readpoint == (ring_buff->size - 1)) { + ring_buff->readpoint = 0; + } - else - { - ring_buff->readpoint++; - } - pData[i] = ring_buff->buffer[ring_buff->readpoint]; - } - } - - return i; + else { + ring_buff->readpoint++; + } + pData[i] = ring_buff->buffer[ring_buff->readpoint]; + } + } + + return i; } diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_timer.c b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_timer.c index 433ce7d8..997c4438 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_timer.c +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/sdk_src/utils/utils_timer.c @@ -16,29 +16,34 @@ #ifdef __cplusplus extern "C" { #endif - + #include "utils_timer.h" - -bool expired(Timer *timer) { + +bool expired(Timer *timer) +{ return HAL_Timer_expired(timer); } -void countdown_ms(Timer *timer, unsigned int timeout_ms) { +void countdown_ms(Timer *timer, unsigned int timeout_ms) +{ HAL_Timer_countdown_ms(timer, timeout_ms); } -void countdown(Timer *timer, unsigned int timeout) { +void countdown(Timer *timer, unsigned int timeout) +{ HAL_Timer_countdown(timer, timeout); } -int left_ms(Timer *timer) { +int left_ms(Timer *timer) +{ return HAL_Timer_remain(timer); } -void InitTimer(Timer *timer) { +void InitTimer(Timer *timer) +{ HAL_Timer_init(timer); } - + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk index 6642792e..e927f12d 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk @@ -28,6 +28,7 @@ SWITCH_VARS := \ FEATURE_ACTION_ENABLED \ FEATURE_DEBUG_DEV_INFO_USED \ FEATURE_OTA_USE_HTTPS \ + FEATURE_MULTITHREAD_ENABLED \ $(foreach v, \ @@ -89,4 +90,8 @@ endif # Auth mode ifeq (y, $(strip $(FEATURE_SYSTEM_COMM_ENABLED))) CFLAGS += -DSYSTEM_COMM +endif + +ifeq (y, $(strip $(FEATURE_GATEWAY_ENABLED))) +CFLAGS += -DMULTITHREAD_ENABLED endif \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/cmake_scripts/config.h.in b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/cmake_scripts/config.h.in index 3a3e873d..9a400f3b 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/cmake_scripts/config.h.in +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/cmake_scripts/config.h.in @@ -15,3 +15,6 @@ #cmakedefine AT_UART_RECV_IRQ #cmakedefine AT_OS_USED #cmakedefine AT_DEBUG +#cmakedefine OTA_USE_HTTPS +#cmakedefine GATEWAY_ENABLED +#cmakedefine MULTITHREAD_ENABLED diff --git a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/codegen.py b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/codegen.py index 3f6f3c3e..5b1a3f5f 100644 --- a/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/codegen.py +++ b/components/connectivity/qcloud-iot-explorer-sdk/3rdparty/tools/codegen.py @@ -343,10 +343,11 @@ class iot_struct: init_str += " {}.{} = {};\n".format(var_gProduct, field.get_id_c_member_name(),field.get_id_default_value()) init_str += " {}[{}].data_property.data = &{}.{};\n".format(var_gTemplate, count, var_gProduct, field.get_id_c_member_name()) init_str += " {}[{}].data_property.key = \"{}\";\n".format(var_gTemplate, count, field.id) - init_str += " {}[{}].data_property.type = {};\n\n".format(var_gTemplate, count, field.type_id) + init_str += " {}[{}].data_property.type = {};\n".format(var_gTemplate, count, field.type_id) + init_str += " {}[{}].state = eCHANGED;\n\n".format(var_gTemplate, count) count += 1 init_str += "};\n" - return init_str; + return init_str def gen_data_config(self): data_config = "" diff --git a/components/connectivity/qcloud-iot-explorer-sdk/version b/components/connectivity/qcloud-iot-explorer-sdk/version new file mode 100644 index 00000000..94ff29cc --- /dev/null +++ b/components/connectivity/qcloud-iot-explorer-sdk/version @@ -0,0 +1 @@ +3.1.1 diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/cmake_build.sh b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/cmake_build.sh deleted file mode 100644 index e248424c..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/cmake_build.sh +++ /dev/null @@ -1,35 +0,0 @@ -if [ "$#" -eq "0" ]; then - rm -rf output - rm -rf build - echo "Build all (SDK libs and samples)" - mkdir -p build - cd build - cmake .. - #-DSAMPLE_ONLY=OFF .. - make - exit -elif [ "$#" -eq "1" -a $1 == "samples" ]; then - if [ ! -d "output/release/bin" ]; then - rm -rf output/release/bin - elif [ ! -d "output/debug/bin" ]; then - rm -rf output/debug/bin - else - echo "Output folder not found! Please build SDK first" - exit - fi - rm -rf build - echo "Build samples only" - mkdir -p build - cd build - cmake -DSAMPLE_ONLY=ON .. - make - exit -elif [ "$#" -eq "1" -a $1 == "clean" ]; then - echo "Clean all (SDK lib and samples)" - rm -rf output - rm -rf build - exit -else - echo "Usage: "$0" " - exit -fi diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/config.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/config.h deleted file mode 100644 index 8b137891..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/config.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_coap.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_coap.h deleted file mode 100644 index 38230d81..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_coap.h +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef QCLOUD_IOT_EXPORT_COAP_H_ -#define QCLOUD_IOT_EXPORT_COAP_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include - -/** - * @brief CoAP needResp message callback function define - * - * @param message CoAP message - * @param userContext User context when sending message - */ -typedef void (*OnRespCallback)(void *message, void *userContext); - -/** - * CoAP EVENT TYPE - */ -typedef enum { - COAP_EVENT_RECEIVE_ACK = 0, // MSG ACK received - - COAP_EVENT_RECEIVE_RESPCONTENT = 1, // MSG response received - - COAP_EVENT_UNAUTHORIZED = -1, // Device auth failed or token expired - - COAP_EVENT_FORBIDDEN = -2, // CoAP URI invalid or without permission - - COAP_EVENT_INTERNAL_SERVER_ERROR = -3, // CoAP server error - - COAP_EVENT_ACK_TIMEOUT = -4, // MSG ACK timeout - - COAP_EVENT_SEPRESP_TIMEOUT = -5, // MSG response timeout -} CoAPEventType; - -typedef struct { - /* event type */ - CoAPEventType event_type; - /* message content */ - void *message; - -} CoAPEventMessage; - -typedef void (*CoAPEventHandleFunc)(void *pcontext, CoAPEventMessage *message); - -/* The structure of COAP event handle */ -typedef struct { - CoAPEventHandleFunc h_fp; - void *context; -} CoAPEventHandler; - -/** - * @brief CoAP data structure when sending msg - */ -typedef struct { - bool need_resp; // Need response from peer (true), or not (false). Currently only false is supported - char *pay_load; // COAP msg payload - size_t pay_load_len; // COAP msg payload length - void *user_context; // user context for callback - OnRespCallback resp_callback; // function callback when recv msg response, valid only when need_resp is true -} SendMsgParams; - -#define DEFAULT_SENDMSG_PARAMS {false, NULL, 0, NULL, NULL} - -/** - * CoAP data structure when constructing client - */ -typedef struct { - /* device info */ - char *product_id; // product ID - char *device_name; // device name - -#ifdef AUTH_MODE_CERT - char *cert_file; // cert file path - char *key_file; // key file path -#else - char *device_secret; // device secret -#endif - - uint32_t command_timeout; // coap timeout value when waiting for ACK/response - - unsigned char max_retry_count; // CoAP max sending retry count - - CoAPEventHandler event_handle; // event callback - -} CoAPInitParams; - -#ifdef AUTH_MODE_CERT - #define DEFAULT_COAPINIT_PARAMS { NULL, NULL, NULL, NULL, 2000, 5, {0}} -#else - #define DEFAULT_COAPINIT_PARAMS { NULL, NULL, NULL, 2000, 5, {0}} -#endif - -/** - * @brief Construct CoAP Client and connect to server - * - * @param pParams CoAP Client construct and connect parameters - * - * @return COAPClient pointer, NULL when fail - */ -void* IOT_COAP_Construct(CoAPInitParams *pParams); - -/** - * @brief Disconnect with COAP server and destroy COAPClient - * - * @param pClient COAPClient pointer - * - */ -void IOT_COAP_Destroy(void **pClient); - -/** - * @brief Read and handle CoAP msg in synchronized way - * - * @param pClient COAPClient pointer - * @param timeout_ms timeout value (unit: ms) for this Yielding - * @return QCLOUD_RET_SUCCESS when success, otherwise fail - */ -int IOT_COAP_Yield(void *pClient, uint32_t timeout_ms); - -/** - * @brief Send/publish CoAP msg - * - * @param pClient COAPClient pointer - * @param topicName CoAP URI (msg topic) - * @param sendParams Tx msg parameters - * @return value > 0 for msg Id; value < 0 for failure - */ -int IOT_COAP_SendMessage(void *pClient, char *topicName, SendMsgParams *sendParams); - -/** - * @brief Get COAP Response msgId - * - * @param pMessage COAP Response msg - * @return value > 0 for msg Id; value < 0 for failure - */ -int IOT_COAP_GetMessageId(void *pMessage); - -/** - * @brief Get COAP Response payload - * - * @param pMessage COAP Response msg - * @param payload msg payload - * @param payloadLen msg payload length - * @return QCLOUD_RET_SUCCESS when success, otherwise fail - */ -int IOT_COAP_GetMessagePayload(void *pMessage, char **payload, int *payloadLen); - -/** - * @brief Get COAP Response msg error code - * - * @param pMessage COAP Response msg - * @return COAPEventType converted from msg error code - */ -int IOT_COAP_GetMessageCode(void *pMessage); - -#ifdef __cplusplus -} -#endif - -#endif /* QCLOUD_IOT_EXPORT_COAP_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_error.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_error.h deleted file mode 100644 index 06a826d4..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_error.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef QCLOUD_IOT_EXPORT_ERROR_H_ -#define QCLOUD_IOT_EXPORT_ERROR_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * IOT SDK return/error code - * Enumeration of return code in QCloud IoT C-SDK. - * Values less than 0 are specific error codes - * Value of 0 is successful return - * Values greater than 0 are specific non-error return codes - */ -typedef enum { - QCLOUD_RET_MQTT_ALREADY_CONNECTED = 4, // Already connected with MQTT server - QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED = 3, // MQTT connection accepted by server - QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED = 2, // Manually disconnected with MQTT server - QCLOUD_RET_MQTT_RECONNECTED = 1, // Reconnected with MQTT server successfully - - QCLOUD_RET_SUCCESS = 0, // Successful return - - QCLOUD_ERR_FAILURE = -1001, // Generic failure return - QCLOUD_ERR_INVAL = -1002, // Invalid parameter - QCLOUD_ERR_DEV_INFO = -1003, // Fail to get device info - QCLOUD_ERR_MALLOC = -1004, // Fail to malloc memory - - QCLOUD_ERR_HTTP_CLOSED = -3, // HTTP server close the connection - QCLOUD_ERR_HTTP = -4, // HTTP unknown error - QCLOUD_ERR_HTTP_PRTCL = -5, // HTTP protocol error - QCLOUD_ERR_HTTP_UNRESOLVED_DNS = -6, // HTTP DNS resolve failed - QCLOUD_ERR_HTTP_PARSE = -7, // HTTP URL parse failed - QCLOUD_ERR_HTTP_CONN = -8, // HTTP connect failed - QCLOUD_ERR_HTTP_AUTH = -9, // HTTP auth failed - QCLOUD_ERR_HTTP_NOT_FOUND = -10, // HTTP 404 - QCLOUD_ERR_HTTP_TIMEOUT = -11, // HTTP timeout - - QCLOUD_ERR_MQTT_PUSH_TO_LIST_FAILED = -102, // Fail to push node to MQTT waiting list - QCLOUD_ERR_MQTT_NO_CONN = -103, // Not connected with MQTT server - QCLOUD_ERR_MQTT_UNKNOWN = -104, // MQTT unknown error - QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT = -105, // Reconnecting with MQTT server - QCLOUD_ERR_MQTT_RECONNECT_TIMEOUT = -106, // MQTT reconnect timeout - QCLOUD_ERR_MQTT_MAX_SUBSCRIPTIONS = -107, // MQTT topic subscription out of range - QCLOUD_ERR_MQTT_SUB = -108, // MQTT topic subscription fail - QCLOUD_ERR_MQTT_NOTHING_TO_READ = -109, // MQTT nothing to read - QCLOUD_ERR_MQTT_PACKET_READ = -110, // Something wrong when reading MQTT packet - QCLOUD_ERR_MQTT_REQUEST_TIMEOUT = -111, // MQTT request timeout - QCLOUD_ERR_MQTT_CONNACK_UNKNOWN = -112, // MQTT connection refused: unknown error - QCLOUD_ERR_MQTT_CONNACK_UNACCEPTABLE_PROTOCOL_VERSION = -113, // MQTT connection refused: protocol version invalid - QCLOUD_ERR_MQTT_CONNACK_IDENTIFIER_REJECTED = -114, // MQTT connection refused: identifier rejected - QCLOUD_ERR_MQTT_CONNACK_SERVER_UNAVAILABLE = -115, // MQTT connection refused: service not available - QCLOUD_ERR_MQTT_CONNACK_BAD_USERDATA = -116, // MQTT connection refused: bad user name or password - QCLOUD_ERR_MQTT_CONNACK_NOT_AUTHORIZED = -117, // MQTT connection refused: not authorized - QCLOUD_ERR_RX_MESSAGE_INVAL = -118, // MQTT received invalid msg - QCLOUD_ERR_BUF_TOO_SHORT = -119, // MQTT recv buffer not enough - QCLOUD_ERR_MQTT_QOS_NOT_SUPPORT = -120, // MQTT QoS level not supported - QCLOUD_ERR_MQTT_UNSUB_FAIL = -121, // MQTT unsubscribe failed - - QCLOUD_ERR_JSON_PARSE = -132, // JSON parsing error - QCLOUD_ERR_JSON_BUFFER_TRUNCATED = -133, // JSON buffer truncated - QCLOUD_ERR_JSON_BUFFER_TOO_SMALL = -134, // JSON parsing buffer not enough - QCLOUD_ERR_JSON = -135, // JSON generation error - QCLOUD_ERR_MAX_JSON_TOKEN = -136, // JSON token out of range - - QCLOUD_ERR_MAX_APPENDING_REQUEST = -137, // appending request out of range - QCLOUD_ERR_MAX_TOPIC_LENGTH = -138, // Topic length oversize - - QCLOUD_ERR_COAP_NULL = -150, // COAP null pointer - QCLOUD_ERR_COAP_DATA_SIZE = -151, // COAP data size out of range - QCLOUD_ERR_COAP_INTERNAL = -152, // COAP interval error - QCLOUD_ERR_COAP_BADMSG = -153, // COAP bad msg - QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY = -160, // DTLS connection is closed - - QCLOUD_ERR_SHADOW_PROPERTY_EXIST = -201, // Shadow property already exist - QCLOUD_ERR_SHADOW_NOT_PROPERTY_EXIST = -202, // Shadow property not exist - QCLOUD_ERR_SHADOW_UPDATE_TIMEOUT = -203, // Shadow update timeout - QCLOUD_ERR_SHADOW_UPDATE_REJECTED = -204, // Shadow update rejected by server - QCLOUD_ERR_SHADOW_GET_TIMEOUT = -205, // Shadow get timeout - QCLOUD_ERR_SHADOW_GET_REJECTED = -206, // Shadow get rejected by server - - QCLOUD_ERR_GATEWAY_CREATE_SESSION_FAIL = -221, // Gateway fail to create sub-device session - QCLOUD_ERR_GATEWAY_SESSION_NO_EXIST = -222, // Gateway sub-device session not exist - QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT = -223, // Gateway sub-device session timeout - QCLOUD_ERR_GATEWAY_SUBDEV_ONLINE = -224, // Gateway sub-device online - QCLOUD_ERR_GATEWAY_SUBDEV_OFFLINE = -225, // Gateway sub-device offline - - QCLOUD_ERR_TCP_SOCKET_FAILED = -601, // TLS TCP socket connect fail - QCLOUD_ERR_TCP_UNKNOWN_HOST = -602, // TCP unknown host (DNS fail) - QCLOUD_ERR_TCP_CONNECT = -603, // TCP/UDP socket connect fail - QCLOUD_ERR_TCP_READ_TIMEOUT = -604, // TCP read timeout - QCLOUD_ERR_TCP_WRITE_TIMEOUT = -605, // TCP write timeout - QCLOUD_ERR_TCP_READ_FAIL = -606, // TCP read error - QCLOUD_ERR_TCP_WRITE_FAIL = -607, // TCP write error - QCLOUD_ERR_TCP_PEER_SHUTDOWN = -608, // TCP server close connection - QCLOUD_ERR_TCP_NOTHING_TO_READ = -609, // TCP socket nothing to read - - QCLOUD_ERR_SSL_INIT = -701, // TLS/SSL init fail - QCLOUD_ERR_SSL_CERT = -702, // TLS/SSL certificate issue - QCLOUD_ERR_SSL_CONNECT = -703, // TLS/SSL connect fail - QCLOUD_ERR_SSL_CONNECT_TIMEOUT = -704, // TLS/SSL connect timeout - QCLOUD_ERR_SSL_WRITE_TIMEOUT = -705, // TLS/SSL write timeout - QCLOUD_ERR_SSL_WRITE = -706, // TLS/SSL write error - QCLOUD_ERR_SSL_READ_TIMEOUT = -707, // TLS/SSL read timeout - QCLOUD_ERR_SSL_READ = -708, // TLS/SSL read error - QCLOUD_ERR_SSL_NOTHING_TO_READ = -709, // TLS/SSL nothing to read - - QCLOUD_ERR_UDP_SOCKET_FAILED = -801, // TLS TCP socket connect fail - QCLOUD_ERR_UDP_UNKNOWN_HOST = -802, // TCP unknown host (DNS fail) - QCLOUD_ERR_UDP_CONNECT = -803, // TCP/UDP socket connect fail - QCLOUD_ERR_UDP_READ_TIMEOUT = -804, // TCP read timeout - QCLOUD_ERR_UDP_WRITE_TIMEOUT = -805, // TCP write timeout - QCLOUD_ERR_UDP_READ_FAIL = -806, // TCP read error - QCLOUD_ERR_UDP_WRITE_FAIL = -807, // TCP write error - QCLOUD_ERR_UDP_PEER_SHUTDOWN = -808, // TCP server close connection - QCLOUD_ERR_UDP_NOTHING_TO_READ = -809, // TCP socket nothing to read -} IoT_Return_Code; - -#ifdef __cplusplus -} -#endif - -#endif /* QCLOUD_IOT_EXPORT_ERROR_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-utils.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-utils.h deleted file mode 100644 index c19b6a41..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-utils.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -/** - * Edit by shockcao@tencent.com 2018/3/15 - */ - -#ifndef __LITE_UTILS_H__ -#define __LITE_UTILS_H__ - -#include -#include -#include -#include -#include -#include -#if defined(_PLATFORM_IS_LINUX_) -#include -#endif - -#include "lite-list.h" -#include "qcloud_iot_import.h" - -#define LITE_TRUE (1) -#define LITE_FALSE (0) - -#ifndef container_of -#define container_of(ptr, type, member) \ - ((type *) ((char *) (ptr) - offsetof(type, member))) -#endif - -#define LITE_MINIMUM(a, b) (((a) <= (b)) ? (a) : (b)) -#define LITE_MAXIMUM(a, b) (((a) >= (b)) ? (a) : (b)) -#define LITE_isdigit(c) (((c) <= '9' && (c) >= '0') ? (LITE_TRUE) : (LITE_FALSE)) - -#if defined(_PLATFORM_IS_LINUX_) -#define LITE_ASSERT(expr) assert(expr) -#else -#define LITE_ASSERT(expr) \ - do { \ - if (!(expr)) { \ - HAL_Printf("### %s | %s(%d): ASSERT FAILED ###: %s is FALSE\r\n", \ - __FILE__, __func__, __LINE__, #expr); \ - } \ - } while(0) -#endif - -char *LITE_strdup(const char *src); -char *LITE_format_string(const char *fmt, ...); -char *LITE_format_nstring(const int len, const char *fmt, ...); -void LITE_hexbuf_convert(unsigned char *digest, char *out, int buflen, int uppercase); -void LITE_hexstr_convert(char *hexstr, uint8_t *out_buf, int len); -void LITE_replace_substr(char orig[], char key[], char swap[]); - -char *LITE_json_value_of(char *key, char *src); -list_head_t *LITE_json_keys_of(char *src, char *prefix); -void LITE_json_keys_release(list_head_t *keylist); -char *LITE_json_string_value_strip_transfer(char *key, char *src); - - -int LITE_get_int32(int32_t *value, char *src); -int LITE_get_int16(int16_t *value, char *src); -int LITE_get_int8(int8_t *value, char *src); -int LITE_get_uint32(uint32_t *value, char *src); -int LITE_get_uint16(uint16_t *value, char *src); -int LITE_get_uint8(uint8_t *value, char *src); -int LITE_get_float(float *value, char *src); -int LITE_get_double(double *value, char *src); -int LITE_get_boolean(bool *value, char *src); - -typedef struct _json_key_t { - char *key; - list_head_t list; -} json_key_t; - -#define foreach_json_keys_in(src, iter_key, keylist, pos) \ - for(keylist = (void *)LITE_json_keys_of((char *)src, ""), \ - pos = (void *)list_first_entry((list_head_t *)keylist, json_key_t, list), \ - iter_key = ((json_key_t *)pos)->key; \ - (iter_key = ((json_key_t *)pos)->key); \ - pos = list_next_entry((json_key_t *)pos, list, json_key_t)) - -#endif /* __LITE_UTILS_H__ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/utils_getopt.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/utils_getopt.h deleted file mode 100644 index 6485ab70..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/utils_getopt.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __UTILS_GETOPT_H__ -#define __UTILS_GETOPT_H__ - -extern char* utils_optarg; /* pointer to argument of current option */ -int utils_getopt(int nargc, char* const* nargv, const char* options); - -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.c deleted file mode 100644 index 5845ec62..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.c +++ /dev/null @@ -1,575 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_param_check.h" -#include "at_client.h" -#include "at_socket_inf.h" -#include "at_device_esp8266.h" - -#define WIFI_CONN_FLAG (1<<0) -#define SEND_OK_FLAG (1<<1) -#define SEND_FAIL_FLAG (1<<2) - -static uint8_t sg_SocketBitMap = 0; - -static at_evt_cb_t at_evt_cb_table[] = { - [AT_SOCKET_EVT_RECV] = NULL, - [AT_SOCKET_EVT_CLOSED] = NULL, -}; - -static int alloc_fd(void) -{ - - uint8_t i; - int fd; - - for(i = 0; i < ESP8266_MAX_SOCKET_NUM; i++){ - if(0 == ((sg_SocketBitMap>>i) & 0x01)){ - sg_SocketBitMap |= (1< sizeof(temp)){ - at_client_recv(temp, sizeof(temp), timeout); - }else{ - at_client_recv(temp, bfsz - temp_size, timeout); - } - temp_size += sizeof(temp); - } - return; - } - - /* sync receive data */ - if (at_client_recv(recv_buf, bfsz, timeout) != bfsz) - { - Log_e("receive size(%d) data failed!", bfsz); - HAL_Free(recv_buf); - return; - } - - /* notice the receive buffer and buffer size */ - if (at_evt_cb_table[AT_SOCKET_EVT_RECV]){ - at_evt_cb_table[AT_SOCKET_EVT_RECV](fd, AT_SOCKET_EVT_RECV, recv_buf, bfsz); - } -} - -static void urc_busy_p_func(const char *data, size_t size) -{ - POINTER_SANITY_CHECK_RTN(data); - - Log_d("system is processing a commands and it cannot respond to the current commands."); -} - -static void urc_busy_s_func(const char *data, size_t size) -{ - POINTER_SANITY_CHECK_RTN(data); - - Log_d("system is sending data and it cannot respond to the current commands."); -} - -static void urc_func(const char *data, size_t size) -{ - POINTER_SANITY_CHECK_RTN(data); - int i; - - if (strstr(data, "WIFI CONNECTED")){ - at_setFlag(WIFI_CONN_FLAG); - }else if (strstr(data, "WIFI DISCONNECT")){ - /* notice the socket is disconnect by remote */ - if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]){ - for(i = 0; i < ESP8266_MAX_SOCKET_NUM; i++){ - at_evt_cb_table[AT_SOCKET_EVT_CLOSED](i, AT_SOCKET_EVT_CLOSED, NULL, 0); - free_fd(i); - } - } - } -} - -static at_urc urc_table[] = { - {"SEND OK", "\r\n", urc_send_func}, - {"SEND FAIL", "\r\n", urc_send_func}, - {"Recv", "bytes\r\n", urc_send_bfsz_func}, - {"", ",CLOSED\r\n", urc_close_func}, - {"+IPD", ":", urc_recv_func}, - {"busy p", "\r\n", urc_busy_p_func}, - {"busy s", "\r\n", urc_busy_s_func}, - {"WIFI CONNECTED", "\r\n", urc_func}, - {"WIFI DISCONNECT", "\r\n", urc_func}, -}; - -static void esp8266_set_event_cb(at_socket_evt_t event, at_evt_cb_t cb) -{ - if (event < sizeof(at_evt_cb_table) / sizeof(at_evt_cb_table[0])){ - at_evt_cb_table[event] = cb; - } -} - -static int esp8266_init(void) -{ - at_response_t resp = NULL; - int ret; - int i; - - resp = at_create_resp(512, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - /* reset module */ - at_exec_cmd(resp, "AT+RST"); - - /* reset waiting delay */ - at_delayms(2000); - - /* disable echo */ - - ret = at_exec_cmd(resp, "ATE0"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd ATE0 exec err"); - //goto exit; - } - - at_delayms(100); - /* set current mode to Wi-Fi station */ - ret = at_exec_cmd(resp, "AT+CWMODE=1"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CWMODE=1 exec err"); - //goto exit; - } - - at_delayms(100); - /* get module version */ - ret = at_exec_cmd(resp, "AT+GMR"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CWMODE=1 exec err"); - //goto exit; - } - - /* show module version */ - for (i = 0; i < resp->line_counts - 1; i++){ - Log_d("%s", at_resp_get_line(resp, i + 1)); - } - - at_delayms(100); - at_clearFlag(WIFI_CONN_FLAG); - /* connect to WiFi AP */ - ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); - - if(!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)){ - Log_e("wifi connect timeout"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - ret = at_exec_cmd(resp, "AT+CIPMUX=1"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CIPMUX=1 exec err"); - } - -__exit: - - if (resp){ - at_delete_resp(resp); - } - - return ret; -} - -static int esp8266_close(int fd) -{ - at_response_t resp; - int ret; - - resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - ret = at_exec_cmd(resp, "AT+CIPCLOSE=%d", fd); - - if (QCLOUD_RET_SUCCESS != ret) { //fancyxu - Log_e("close socket(%d) fail",fd); - } - - if (resp){ - at_delete_resp(resp); - } - - return ret; -} - -static int esp8266_connect(const char *ip, uint16_t port, eNetProto proto) -{ - at_response_t resp; - bool retryed = false; - int fd, ret; - - POINTER_SANITY_CHECK(ip, QCLOUD_ERR_INVAL); - resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - fd = alloc_fd(); - if(fd < 0){ - Log_e("esp8226 support max %d chain", ESP8266_MAX_SOCKET_NUM); - return QCLOUD_ERR_FAILURE; - } - -__retry: - - switch (proto) - { - case eNET_TCP: - /* send AT commands to connect TCP server */ - ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d,60", fd, ip, port); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("start tcp connect failed, fd=%d,ip(%s),port(%d)",fd, ip, port); - } - break; - - case eNET_UDP: - ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d", fd, ip, port); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("start udp connect failed, fd=%d,ip(%s),port(%d)",fd, ip, port); - } - break; - - default: - Log_e("Not supported connect type : %d", proto); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - if ((QCLOUD_RET_SUCCESS != ret) && !retryed){ - Log_e("socket(%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", fd); - if (QCLOUD_RET_SUCCESS != esp8266_close(fd)){ - goto __exit; - } - retryed = true; - at_delayms(100); - goto __retry; - } - -__exit: - - if (resp){ - at_delete_resp(resp); - } - - if(QCLOUD_RET_SUCCESS != ret){ - free_fd(fd); - fd = UNUSED_SOCKET; - } - - at_delayms(200); - return fd; -} - -static int esp8266_send(int fd, const void *buff, size_t len) -{ - int ret; - at_response_t resp ; - size_t cur_pkt_size = 0; - size_t sent_size = 0; - size_t temp_size = 0; - - POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); - resp = at_create_resp(512, 2, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - /* set AT client end sign to deal with '>' sign.*/ - at_set_end_sign('>'); - - while (sent_size < len) - { - if (len - sent_size < ESP8266_SEND_MAX_LEN_ONCE){ - cur_pkt_size = len - sent_size; - }else{ - cur_pkt_size = ESP8266_SEND_MAX_LEN_ONCE; - } - - at_clearFlag(SEND_OK_FLAG); - at_clearFlag(SEND_FAIL_FLAG); - /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line. */ - ret = at_exec_cmd(resp, "AT+CIPSEND=%d,%d", fd, cur_pkt_size); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CIPSEND exec err"); - goto __exit; - } - at_set_end_sign(0); - /* send the real data to server or client */ - temp_size = at_client_send(at_client_get(), (char *)buff + sent_size, cur_pkt_size, AT_RESP_TIMEOUT_MS); - - if(cur_pkt_size != temp_size){ - Log_e("at send real data failed"); - goto __exit; - } - -#ifndef AT_OS_USED - at_urc urc_send = {.cmd_prefix = "SEND OK",.cmd_suffix = "\r\n", NULL}; - at_client_yeild(&urc_send, resp->timeout); - if (at_client_get()->resp_status != AT_RESP_OK) - { - Log_e("send fail"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } -#else - if(at_waitFlag(SEND_OK_FLAG|SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)){ - if(at_waitFlag(SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)){ - Log_e("send fail"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - } -#endif - sent_size += cur_pkt_size; - } - - ret = QCLOUD_RET_SUCCESS; - -__exit: - /* reset the end sign for data */ - if (resp){ - at_delete_resp(resp); - } - - return sent_size; //fancyxu -} - -static int esp8266_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) -{ -#ifndef AT_OS_USED - at_client_yeild(NULL, timeout); -#endif - return QCLOUD_RET_SUCCESS; -} - -static int esp8266_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) -{ -#define RESOLVE_RETRY 5 - - char recv_ip[16] = { 0 }; - at_response_t resp; - int ret,i; - - POINTER_SANITY_CHECK(host_name, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(host_ip, QCLOUD_ERR_INVAL); - - - if(host_ip_len < 16){ - Log_e("host ip buff too short"); - return QCLOUD_ERR_FAILURE; - } - - resp = at_create_resp(128, 0, 4*AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - for (i = 0; i < RESOLVE_RETRY; i++){ - ret = at_exec_cmd(resp, "AT+CIPDOMAIN=\"%s\"", host_name); - if (QCLOUD_RET_SUCCESS != ret){ - Log_e("exec AT+CIPDOMAIN=\"%s\" fail", host_name); - goto __exit; - } - - /* parse the third line of response data, get the IP address */ - if (at_resp_parse_line_args_by_kw(resp, "+CIPDOMAIN:", "+CIPDOMAIN:%s", recv_ip) < 0){ - at_delayms(100); - /* resolve failed, maybe receive an URC CRLF */ - continue; - } - - if (strlen(recv_ip) < 8){ - at_delayms(100); - /* resolve failed, maybe receive an URC CRLF */ - continue; - } - else{ - strncpy(host_ip, recv_ip, 15); - host_ip[15] = '\0'; - break; - } - } - -__exit: - - if (resp){ - at_delete_resp(resp); - } - -#undef RESOLVE_RETRY - - return ret; -} - -at_device_op_t at_ops_esp8266 = { - .init = esp8266_init, - .connect = esp8266_connect, - .send = esp8266_send, - .recv_timeout = esp8266_recv_timeout, - .close = esp8266_close, - .parse_domain = esp8266_parse_domain, - .set_event_cb = esp8266_set_event_cb, - .deviceName = "esp8266", -}; - -int at_device_esp8266_init(void) -{ - int i; - int ret; - at_client_t p_client; - - ret = HAL_AT_Uart_Init(); - if (QCLOUD_RET_SUCCESS != ret) { - Log_e("at uart init fail!"); - } else { - Log_d("at uart init success!"); - } - - /* initialize AT client */ - ret = at_client_init(&p_client); - - if(QCLOUD_RET_SUCCESS != ret) - { - Log_e("at client init fail,ret:%d", ret); - goto exit; - } - else - { - Log_d("at client init success"); - } - - /* register URC data execution function */ - at_set_urc_table(p_client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); - - Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); - for(i=0; i < p_client->urc_table_size; i++) - { - Log_d("%s",p_client->urc_table[i].cmd_prefix); - } - - ret = at_device_op_register(&at_ops_esp8266); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("at device driver register fail"); - goto exit; - } - -exit: - if(QCLOUD_RET_SUCCESS != ret){ - if(NULL != p_client){ - at_client_deinit(p_client); - } - } - - return ret; -} - -/*at device driver must realize this api which called by HAL_AT_TCP_Init*/ -int at_device_init(void) -{ - return at_device_esp8266_init(); -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c deleted file mode 100644 index 70180de4..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#ifdef AT_TCP_ENABLED - -#include -#include -#include -#include - -#include "utils_ringbuff.h" -#include "at_client.h" - - -#include "stm32l4xx_hal.h" - -#define HAL_AT_UART_IRQHandler USART1_IRQHandler -extern UART_HandleTypeDef huart1; -static UART_HandleTypeDef *pAtUart = &huart1; - -extern void AT_Uart_Init(void); -extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); - - -#include "board.h" -/** -* @brief This function handles AT UART global interrupt,push recv char to ringbuff. -*/ -void HAL_AT_UART_IRQHandler(void) -{ - uint8_t ch; - if(__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) - { - ch = (uint8_t) READ_REG(pAtUart->Instance->RDR)&0xFF; - /*this callback for at_client*/ - at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); - } - __HAL_UART_CLEAR_PEFLAG(pAtUart); -} - - -/** - *pdata: pointer of data for send - *len: len of data to be sent - *return: the len of data send success - * @brief hal api for at data send - */ -int HAL_AT_Uart_Send(void *data, uint32_t size) -{ - if(HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) - { - return size; - } - else - { - return 0; - } -} - -int HAL_AT_Uart_Init(void) -{ - AT_Uart_Init(); - return QCLOUD_RET_SUCCESS; -} - -int HAL_AT_Uart_Deinit(void) -{ - return QCLOUD_RET_SUCCESS; -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Device_freertos.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Device_freertos.c deleted file mode 100644 index 4980b670..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Device_freertos.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_param_check.h" - -/* Enable this macro (also control by cmake) to use static string buffer to store device info */ -/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ -#define DEBUG_DEV_INFO_USED - -#ifdef DEBUG_DEV_INFO_USED -/* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; - -/* device name */ -static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; - -#ifdef DEV_DYN_REG_ENABLED -/* product secret for device dynamic Registration */ -static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; -#endif - -#ifdef AUTH_MODE_CERT -/* public cert file name of certificate device */ -static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; -/* private key file name of certificate device */ -static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; -#else -/* device secret of PSK device */ -static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; -#endif - -#ifdef GATEWAY_ENABLED -/* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; -#endif - -static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) -{ - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -#endif - -int HAL_SetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name -#else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret -#endif - -#else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -int HAL_GetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name - -#ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name -#else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret -#endif - -#else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -#ifdef GATEWAY_ENABLED -int HAL_GetGwDevInfo(void *pgwDeviceInfo) -{ - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - -#else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_AT_UART_linux.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_AT_UART_linux.c deleted file mode 100644 index b2300bc0..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_AT_UART_linux.c +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#ifdef AT_TCP_ENABLED - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "at_uart_hal.h" - -#ifdef AT_UART_RECV_IRQ -#include "utils_ringbuff.h" -#include "at_client.h" -static void *at_uart_irq_recv(void *userContex); -#endif - -#define AT_UART_LINUX_DEV "/dev/ttyUSB0" - -static uart_dev_t sg_at_uart = { - .fd = -1, - .state = eUNUSED, - .config = {BAUDRATE_115200, DATA_WIDTH_8BIT, NO_PARITY, STOP_BITS_1, FLOW_CONTROL_DISABLED, MODE_TX_RX} -}; - - -int HAL_AT_Uart_Init(void) -{ - struct termios t_opt; - speed_t baud; - - if (sg_at_uart.state == eOPENED) { - Log_w("%s already opened", AT_UART_LINUX_DEV); - return QCLOUD_ERR_FAILURE; - } - - if ((sg_at_uart.fd = open(AT_UART_LINUX_DEV, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { - Log_e("open at uart failed\r\n"); - return QCLOUD_ERR_FAILURE; - } - - switch (sg_at_uart.config.baud_rate) { - case BAUDRATE_9600: - baud = B9600; - break; - case BAUDRATE_115200: - baud = B115200; - break; - case BAUDRATE_921600: - baud = B921600; - break; - default: - baud = B115200; - break; - } - - /* set the serial port parameters */ - fcntl(sg_at_uart.fd, F_SETFL, 0); - - if (0 != tcgetattr(sg_at_uart.fd, &t_opt)) { - return QCLOUD_ERR_FAILURE; - } - - /* set the input and output baudrate*/ - if (0 != cfsetispeed(&t_opt, baud)) { - return QCLOUD_ERR_FAILURE; - } - - if (0 != cfsetospeed(&t_opt, baud)) { - return QCLOUD_ERR_FAILURE; - } - - /* 8N1, flow control, etc. */ - t_opt.c_cflag |= (CLOCAL | CREAD); - if (sg_at_uart.config.parity == NO_PARITY) { - t_opt.c_cflag &= ~PARENB; - } - if (sg_at_uart.config.stop_bits == STOP_BITS_1) { - t_opt.c_cflag &= ~CSTOPB; - } - else { - t_opt.c_cflag |= CSTOPB; - } - t_opt.c_cflag &= ~CSIZE; - switch (sg_at_uart.config.data_width) { - case DATA_WIDTH_5BIT: - t_opt.c_cflag |= CS5; - break; - case DATA_WIDTH_6BIT: - t_opt.c_cflag |= CS6; - break; - case DATA_WIDTH_7BIT: - t_opt.c_cflag |= CS7; - break; - case DATA_WIDTH_8BIT: - t_opt.c_cflag |= CS8; - break; - default: - t_opt.c_cflag |= CS8; - break; - } - t_opt.c_lflag &= ~(ECHO | ECHOE | ISIG | ICANON); - - /** - * AT is going to use a binary protocol, so make sure to - * turn off any CR/LF translation and the like. - */ - t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); - - t_opt.c_oflag &= ~OPOST; - t_opt.c_cc[VMIN] = 0; - t_opt.c_cc[VTIME] = 5; - if (0 != tcsetattr(sg_at_uart.fd, TCSANOW, &t_opt)) { - return QCLOUD_ERR_FAILURE; - } - - sg_at_uart.state = eOPENED; - - /* clear uart buffer */ - //Log_e("open at uart 1\r\n"); - //read_and_discard_all_data(sg_at_uart.fd); - //Log_e("open at uart 2\r\n"); - -#ifdef AT_UART_RECV_IRQ - //START THERAD - //int result; - volatile void *recv_thread; - recv_thread = HAL_ThreadCreate(6144, 0, "at_uart_isr_thread", at_uart_irq_recv, NULL); - if(!recv_thread) Log_e("Init uart_irq_recv failed\r\n"); -#endif - - return QCLOUD_RET_SUCCESS; -} - -int HAL_AT_Uart_Deinit(void) -{ - if (sg_at_uart.state == eOPENED) { - close(sg_at_uart.fd); - sg_at_uart.state = eCLOSED; - } - - return QCLOUD_RET_SUCCESS; -} - -int HAL_AT_Uart_Send(void *data, uint32_t size) -{ - uint32_t leftlen = size; - int ret = QCLOUD_RET_SUCCESS; - - if (sg_at_uart.state == eOPENED) { - while (leftlen > 0) { - ret = write(sg_at_uart.fd, data + size - leftlen, leftlen); - if (ret == -1) { - Log_e("write uart fd failed on error: %d.\r\n", errno); - ret = QCLOUD_ERR_FAILURE; - break; - } - leftlen -= ret; - } - } - else { - Log_e("AT Uart uninitialized"); - ret = QCLOUD_ERR_FAILURE; - } - - return (ret == QCLOUD_ERR_FAILURE) ? QCLOUD_ERR_FAILURE : size; -} - -int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) -{ - int readlen; - int ret; - - if (sg_at_uart.state == eOPENED) { - - if ((readlen = read(sg_at_uart.fd, data, expect_size)) == -1) { - ret = QCLOUD_ERR_FAILURE; - } - - if (recv_size) { - *recv_size = readlen; - } - - } - else { - Log_e("AT Uart uninitialized"); - ret = QCLOUD_ERR_FAILURE; - } - - return ret; -} - -//simulate IRQ -#ifdef AT_UART_RECV_IRQ -extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); -static void *at_uart_irq_recv(void *userContex) -{ - uint8_t data[64]; - int readlen; - while (1) - { - if ((readlen = read(sg_at_uart.fd, data, sizeof(data))) == -1) { - continue; - } - at_client_uart_rx_isr_cb(data, readlen); //push - } - return NULL; -} -#endif - -#endif \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Device_linux.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Device_linux.c deleted file mode 100644 index 90158c33..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Device_linux.c +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_param_check.h" - -/* Enable this macro (also control by cmake) to use static string buffer to store device info */ -/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ -//#define DEBUG_DEV_INFO_USED - -#ifdef DEBUG_DEV_INFO_USED -/* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; - -/* device name */ -static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; - -#ifdef DEV_DYN_REG_ENABLED -/* product secret for device dynamic Registration */ -static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; -#endif - -#ifdef AUTH_MODE_CERT -/* public cert file name of certificate device */ -static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; -/* private key file name of certificate device */ -static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; -#else -/* device secret of PSK device */ -static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; -#endif - -#ifdef GATEWAY_ENABLED -/* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; -#endif - - -static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) -{ - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -int HAL_SetDevInfoFile(const char *file_name) -{ - Log_w("device info is not stored in file!!"); - - return QCLOUD_RET_SUCCESS; -} - -#else -/*device info manage example method*/ - -#include "lite-utils.h" - -#define MAX_DEV_INFO_FILE_LEN 1024 -#define MAX_CONFIG_FILE_NAME 256 - - -#define KEY_AUTH_MODE "auth_mode" -#define KEY_PRODUCT_ID "productId" -#define KEY_PRODUCT_SECRET "productSecret" -#define KEY_DEV_NAME "deviceName" -#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" -#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" -#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" -#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" -#define KEY_SUBDEV_NAME "subDev.sub_devName" - -#define STR_DEV_INFO "key_deviceinfo" -#define STR_DEV_SECRET "deviceSecret" -#define STR_DEV_CERT "cert_deviceinfo" -#define STR_DEV_CERT_FILE "devCertFile" -#define STR_DEV_KEY_FILE "devPrivateKeyFile" - -#define MAX_SIZE_OF_DEVICE_INFO_FILE 128 -static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE+1] = {"./device_info.json"}; - -int HAL_SetDevInfoFile(const char *file_name) -{ - if (file_name == NULL || strlen(file_name) > MAX_SIZE_OF_DEVICE_INFO_FILE) { - Log_e("illegal device info file name!"); - return QCLOUD_ERR_INVAL; - } - - /* check if file exists */ - if (access(file_name, 0)) { - Log_e("device info file \"%s\" not existed", file_name); - return QCLOUD_ERR_FAILURE; - } - - memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); - strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); - return QCLOUD_RET_SUCCESS; -} - -static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) -{ - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; - - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { - Log_e("open device info file \"%s\" failed", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - /*Get device info*/ - char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); - char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); - char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); - - if(NULL == authMode || NULL == productId || NULL == devName) { - Log_e("read device data from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - -#ifdef DEV_DYN_REG_ENABLED - char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); - if(NULL == productSecret) { - Log_e("read product secret from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); -#endif - -#ifdef AUTH_MODE_CERT - char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); - char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); - if(NULL == devCrtFileName || NULL == devKeyFileName) { - Log_e("read cert file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); -#else - char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); - if(NULL == devSecret) { - Log_e("read device secret from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); - //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); -#endif - if(authMode){ - HAL_Free(authMode); - } - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -#ifdef DEV_DYN_REG_ENABLED - if(productSecret){ - HAL_Free(productSecret); - } -#endif - -#ifdef AUTH_MODE_CERT - if(devCrtFileName){ - HAL_Free(devCrtFileName); - } - - if(devKeyFileName){ - HAL_Free(devKeyFileName); - } -#else - if(devSecret){ - HAL_Free(devSecret); - } -#endif -exit: - if(NULL != fp){ - fclose(fp); - } - return ret; -} - -#ifdef GATEWAY_ENABLED -static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) -{ - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; - - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { - Log_e("open device info file \"%s\" failed", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } - - /*Get sub device info*/ - char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); - char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); - - if(NULL == productId || NULL == devName) { - Log_e("read sub device data from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - //Log_d("pid:%s, devName:%s", productId, devName); - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -exit: - - if(NULL != fp){ - fclose(fp); - } - - return ret; -} -#endif - -static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) -{ - char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; - int32_t remain_size = MAX_DEV_INFO_FILE_LEN; - int32_t rc_of_snprintf = 0; - int32_t wlen; - FILE *fp; - - rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); - remain_size -= rc_of_snprintf; - - //auth_mode -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "CERT" - ); - remain_size -= rc_of_snprintf; -#else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "KEY" - ); - remain_size -= rc_of_snprintf; -#endif - - //product id, device name - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ - KEY_PRODUCT_ID, pDevInfo->product_id, \ - KEY_DEV_NAME, pDevInfo->device_name); - remain_size -= rc_of_snprintf; - - //product secret -#ifdef DEV_DYN_REG_ENABLED - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n", - KEY_PRODUCT_SECRET, pDevInfo->product_secret); - remain_size -= rc_of_snprintf; -#endif - - // key device info or cert device info -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ - STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name,\ - STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ - ); - remain_size -= rc_of_snprintf; -#else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\"\n}",\ - STR_DEV_SECRET, pDevInfo->device_secret); - remain_size -= rc_of_snprintf; -#endif - - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); - remain_size -= rc_of_snprintf; - - Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); - - fp = fopen(sg_device_info_file, "w"); - if(NULL == fp) { - Log_e("open file %s failed", sg_device_info_file); - return QCLOUD_ERR_FAILURE; - } - - wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); - if(wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { - Log_e("write len less than needed"); - } - fclose(fp); - return QCLOUD_RET_SUCCESS; -} -#endif - -int HAL_SetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name -#else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret -#endif - -#else - ret = iot_save_devinfo_to_json_file(devInfo); -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -int HAL_GetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name - -#ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name -#else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret -#endif - -#else - ret = iot_parse_devinfo_from_json_file(devInfo); -#endif - - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -#ifdef GATEWAY_ENABLED -int HAL_GetGwDevInfo(void *pgwDeviceInfo) -{ - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - -#else - ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); - if(ret != QCLOUD_RET_SUCCESS) { - return QCLOUD_ERR_FAILURE; - } - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c deleted file mode 100644 index 9176f4df..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -#include -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_ringbuff.h" -#include "at_client.h" - - -#include "stm32l4xx_hal.h" - -#define HAL_AT_UART_IRQHandler USART1_IRQHandler -extern UART_HandleTypeDef huart1; -static UART_HandleTypeDef *pAtUart = &huart1; - -extern void AT_Uart_Init(void); -extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); - - -#include "board.h" -/** -* @brief This function handles AT UART global interrupt,push recv char to ringbuff. -*/ -void HAL_AT_UART_IRQHandler(void) -{ - uint8_t ch; - if(__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) - { - ch = (uint8_t) READ_REG(pAtUart->Instance->RDR)&0xFF; - /*this callback for at_client*/ - at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); - } - __HAL_UART_CLEAR_PEFLAG(pAtUart); -} - - -/** - *pdata: pointer of data for send - *len: len of data to be sent - *return: the len of data send success - * @brief hal api for at data send - */ -int HAL_AT_Uart_Send(void *data, uint32_t size) -{ - if(HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) - { - return size; - } - else - { - return 0; - } -} - -int HAL_AT_Uart_Init(void) -{ - AT_Uart_Init(); - return QCLOUD_RET_SUCCESS; -} - -int HAL_AT_Uart_Deinit(void) -{ - return QCLOUD_RET_SUCCESS; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Device_nonos.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Device_nonos.c deleted file mode 100644 index d9d04edb..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Device_nonos.c +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_param_check.h" - -/* Enable this macro (also control by cmake) to use static string buffer to store device info */ -/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ -#define DEBUG_DEV_INFO_USED - -#ifdef DEBUG_DEV_INFO_USED -/* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; - -/* device name */ -static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; - -#ifdef DEV_DYN_REG_ENABLED -/* product secret for device dynamic Registration */ -static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; -#endif - -#ifdef AUTH_MODE_CERT -/* public cert file name of certificate device */ -static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; -/* private key file name of certificate device */ -static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; -#else -/* device secret of PSK device */ -static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; -#endif - -#ifdef GATEWAY_ENABLED -/* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; -#endif - -static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) -{ - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -#endif - -int HAL_SetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name -#else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret -#endif - -#else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -int HAL_GetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name - -#ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name -#else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret -#endif - -#else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -#ifdef GATEWAY_ENABLED -int HAL_GetGwDevInfo(void *pgwDeviceInfo) -{ - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - -#else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c deleted file mode 100644 index 4980b670..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_param_check.h" - -/* Enable this macro (also control by cmake) to use static string buffer to store device info */ -/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ -#define DEBUG_DEV_INFO_USED - -#ifdef DEBUG_DEV_INFO_USED -/* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; - -/* device name */ -static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; - -#ifdef DEV_DYN_REG_ENABLED -/* product secret for device dynamic Registration */ -static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; -#endif - -#ifdef AUTH_MODE_CERT -/* public cert file name of certificate device */ -static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; -/* private key file name of certificate device */ -static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; -#else -/* device secret of PSK device */ -static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; -#endif - -#ifdef GATEWAY_ENABLED -/* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; -#endif - -static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) -{ - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -#endif - -int HAL_SetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name -#else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret -#endif - -#else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -int HAL_GetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name - -#ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name -#else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret -#endif - -#else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -#ifdef GATEWAY_ENABLED -int HAL_GetGwDevInfo(void *pgwDeviceInfo) -{ - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - -#else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c deleted file mode 100644 index 2b5d2f10..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -//#include -#include -#include -//#include -#include -#include -#include -#include -#include - -#include - - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" -#include "qcloud_iot_export_error.h" - - -static uint64_t rtthread_get_time_ms(void) -{ - return HAL_GetTimeMs(); -} - -static uint64_t rtthread_time_left(uint64_t t_end, uint64_t t_now) -{ - uint64_t t_left; - - if (t_end > t_now) { - t_left = t_end - t_now; - } else { - t_left = 0; - } - - return t_left; -} - -uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) -{ - int ret; - struct addrinfo hints, *addr_list, *cur; - int fd = 0; - - char port_str[6]; - HAL_Snprintf(port_str, 6, "%d", port); - - memset(&hints, 0x00, sizeof(hints)); - hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - - Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - perror("getaddrinfo error"); - return 0; - } - - for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - if (cur->ai_family != AF_INET) { - perror("socket type error"); - ret = -1; - continue; - } - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } - - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } - - close( fd ); - ret = 0; - } - - if (0 == ret) { - Log_e("fail to establish tcp"); - } else { - Log_d("success to establish tcp, fd=%d", ret); - } - - freeaddrinfo(addr_list); - - return (uintptr_t)ret; -} - - -int HAL_TCP_Disconnect(uintptr_t fd) -{ - int rc; - - rc = close((int) fd); - if (0 != rc) { - perror("closesocket error"); - return -1; - } - - return 0; -} - - -int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len) -{ - int ret; - uint32_t len_sent; - uint64_t t_end, t_left; - fd_set sets; - - t_end = rtthread_get_time_ms() + timeout_ms; - len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ - - do { - t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); - if (0 != t_left) { - struct timeval timeout; - - FD_ZERO(&sets); - FD_SET(fd, &sets); - - timeout.tv_sec = t_left / 1000; - timeout.tv_usec = (t_left % 1000) * 1000; - - ret = select(fd + 1, NULL, &sets, NULL, &timeout); - if (ret > 0) { - if (0 == FD_ISSET(fd, &sets)) { - Log_e("Should NOT arrive"); - /* If timeout in next loop, it will not sent any data */ - ret = 0; - continue; - } - } else if (0 == ret) { - Log_e("select-write timeout %d", (int)fd); - break; - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } - - perror("select-write fail"); - break; - } - } - else { - ret = QCLOUD_ERR_SSL_WRITE_TIMEOUT; - } - - if (ret > 0) { - ret = send(fd, buf + len_sent, len - len_sent, 0); - if (ret > 0) { - len_sent += ret; - } else if (0 == ret) { - Log_e("No data be sent"); - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } - - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - perror("send fail"); - break; - } - } - } while ((len_sent < len) && (rtthread_time_left(t_end, rtthread_get_time_ms()) > 0)); - - *written_len = (size_t)len_sent; - - return len_sent > 0 ? QCLOUD_RET_SUCCESS : ret; -} - - -int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *read_len) -{ - int ret, err_code; - uint32_t len_recv; - uint64_t t_end, t_left; - fd_set sets; - struct timeval timeout; - - - //Log_d("readTimeout %dms,readlen %d", timeout_ms, *read_len); - HAL_SleepMs(1); //wihout delay,read seems to be blocked - - t_end = rtthread_get_time_ms() + timeout_ms; - len_recv = 0; - err_code = 0; - - - do { - t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); - if (0 == t_left) { - err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; - break; - } - FD_ZERO(&sets); - FD_SET(fd, &sets); - - timeout.tv_sec = t_left / 1000; - timeout.tv_usec = (t_left % 1000) * 1000; - - ret = select(fd + 1, &sets, NULL, NULL, &timeout); - if (ret > 0) { - ret = recv(fd, buf + len_recv, len - len_recv, 0); - if (ret > 0) { - len_recv += ret; - } else if (0 == ret) { - perror("connection is closed"); - err_code = -1; - break; - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } - perror("recv fail"); - err_code = -2; - break; - } - } else if (0 == ret) { - err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; - break; - } else { - perror("select-recv fail"); - err_code = -2; - break; - } - }while ((len_recv < len)); - - *read_len = (size_t)len_recv; - - return (0 != len_recv) ? 0 : err_code; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c deleted file mode 100644 index 8ba8b8dd..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - - -#include -#include -#include "qcloud_iot_import.h" - -static char now_time_str[20] = {0}; - -uint32_t HAL_GetTimeMs(void) -{ -#if (RT_TICK_PER_SECOND == 1000) - /* #define RT_TICK_PER_SECOND 1000 */ - return (unsigned long)rt_tick_get(); -#else - unsigned long tick = 0; - - tick = rt_tick_get(); - tick = tick * 1000; - return (unsigned long)((tick + RT_TICK_PER_SECOND - 1)/RT_TICK_PER_SECOND); -#endif - -} - -/*Get timestamp*/ -long HAL_Timer_current_sec(void) -{ - return HAL_GetTimeMs()/1000; -} - - -char* HAL_Timer_current(void) -{ - long time_sec; - - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%ld",time_sec); - - return now_time_str; -} - - - -bool HAL_Timer_expired(Timer *timer) -{ - uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); - - - return (now_ts > timer->end_time)?true:false; -} - -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; -} - -int HAL_Timer_remain(Timer *timer) -{ - return (int)(timer->end_time - HAL_GetTimeMs()); -} - -void HAL_Timer_init(Timer *timer) -{ - timer->end_time = 0; -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_AT_UART_win.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_AT_UART_win.c deleted file mode 100644 index fc45aed6..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_AT_UART_win.c +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#ifdef AT_TCP_ENABLED - -#include -#include -#include -#include - - -#include "utils_ringbuff.h" -#include "at_client.h" - - -/** -* @brief This function handles AT UART global interrupt,push recv char to ringbuff. -*/ -void HAL_AT_UART_IRQHandler(void) -{ - -} - - -/** - *pdata: pointer of data for send - *len: len of data to be sent - *return: the len of data send success - * @brief hal api for at data send - */ -int HAL_AT_Uart_Send(void *data, uint32_t size) -{ - return 0; -} - -int HAL_AT_Uart_Init(void) -{ - return QCLOUD_RET_SUCCESS; -} - -int HAL_AT_Uart_Deinit(void) -{ - return QCLOUD_RET_SUCCESS; -} - -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Device_win.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Device_win.c deleted file mode 100644 index dcbf0c41..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Device_win.c +++ /dev/null @@ -1,491 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - -#include "utils_param_check.h" - -/* Enable this macro (also control by cmake) to use static string buffer to store device info */ -/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ -//#define DEBUG_DEV_INFO_USED - -#ifdef DEBUG_DEV_INFO_USED -/* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; - -/* device name */ -static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; - -#ifdef DEV_DYN_REG_ENABLED -/* product secret for device dynamic Registration */ -static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; -#endif - -#ifdef AUTH_MODE_CERT -/* public cert file name of certificate device */ -static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; -/* private key file name of certificate device */ -static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; -#else -/* device secret of PSK device */ -static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; -#endif - -#ifdef GATEWAY_ENABLED -/* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; -#endif - - -static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) -{ - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; -} - -int HAL_SetDevInfoFile(const char *file_name) -{ - Log_w("device info is not stored in file!!"); - - return QCLOUD_RET_SUCCESS; -} - -#else -/*device info manage example method*/ - -#include "lite-utils.h" - -#define MAX_DEV_INFO_FILE_LEN 1024 -#define MAX_CONFIG_FILE_NAME 256 - - -#define KEY_AUTH_MODE "auth_mode" -#define KEY_PRODUCT_ID "productId" -#define KEY_PRODUCT_SECRET "productSecret" -#define KEY_DEV_NAME "deviceName" -#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" -#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" -#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" -#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" -#define KEY_SUBDEV_NAME "subDev.sub_devName" - -#define STR_DEV_INFO "key_deviceinfo" -#define STR_DEV_SECRET "deviceSecret" -#define STR_DEV_CERT "cert_deviceinfo" -#define STR_DEV_CERT_FILE "devCertFile" -#define STR_DEV_KEY_FILE "devPrivateKeyFile" - -#define MAX_SIZE_OF_DEVICE_INFO_FILE 128 -static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE+1] = {".\\device_info.json"}; - -int HAL_SetDevInfoFile(const char *file_name) -{ - if (file_name == NULL || strlen(file_name) > MAX_SIZE_OF_DEVICE_INFO_FILE) { - Log_e("illegal device info file name!"); - return QCLOUD_ERR_INVAL; - } - - /* check if file exists */ - if (access(file_name, 0)) { - Log_e("device info file \"%s\" not existed", file_name); - return QCLOUD_ERR_FAILURE; - } - - memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); - strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); - return QCLOUD_RET_SUCCESS; -} - -static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) -{ - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; - - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { - Log_e("open device info file \"%s\" failed", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - /*Get device info*/ - char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); - char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); - char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); - - if(NULL == authMode || NULL == productId || NULL == devName) { - Log_e("read device data from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - -#ifdef DEV_DYN_REG_ENABLED - char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); - if(NULL == productSecret) { - Log_e("read product secret from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); -#endif - -#ifdef AUTH_MODE_CERT - char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); - char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); - if(NULL == devCrtFileName || NULL == devKeyFileName) { - Log_e("read cert file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); -#else - char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); - if(NULL == devSecret) { - Log_e("read device secret from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); - //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); -#endif - if(authMode){ - HAL_Free(authMode); - } - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -#ifdef DEV_DYN_REG_ENABLED - if(productSecret){ - HAL_Free(productSecret); - } -#endif - -#ifdef AUTH_MODE_CERT - if(devCrtFileName){ - HAL_Free(devCrtFileName); - } - - if(devKeyFileName){ - HAL_Free(devKeyFileName); - } -#else - if(devSecret){ - HAL_Free(devSecret); - } -#endif -exit: - if(NULL != fp){ - fclose(fp); - } - return ret; -} - -#ifdef GATEWAY_ENABLED -static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) -{ - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; - - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { - Log_e("open device info file \"%s\" failed", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } - - /*Get sub device info*/ - char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); - char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); - - if(NULL == productId || NULL == devName) { - Log_e("read sub device data from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - //Log_d("pid:%s, devName:%s", productId, devName); - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -exit: - - if(NULL != fp){ - fclose(fp); - } - - return ret; -} -#endif - -static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) -{ - char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; - int32_t remain_size = MAX_DEV_INFO_FILE_LEN; - int32_t rc_of_snprintf = 0; - int32_t wlen; - FILE *fp; - - rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); - remain_size -= rc_of_snprintf; - - //auth_mode -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "CERT" - ); - remain_size -= rc_of_snprintf; -#else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "KEY" - ); - remain_size -= rc_of_snprintf; -#endif - - //product id, device name - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ - KEY_PRODUCT_ID, pDevInfo->product_id, \ - KEY_DEV_NAME, pDevInfo->device_name); - remain_size -= rc_of_snprintf; - - //product secret -#ifdef DEV_DYN_REG_ENABLED - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n", - KEY_PRODUCT_SECRET, pDevInfo->product_secret); - remain_size -= rc_of_snprintf; -#endif - - // key device info or cert device info -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ - STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name,\ - STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ - ); - remain_size -= rc_of_snprintf; -#else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\"\n}",\ - STR_DEV_SECRET, pDevInfo->device_secret); - remain_size -= rc_of_snprintf; -#endif - - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); - remain_size -= rc_of_snprintf; - - Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); - - fp = fopen(sg_device_info_file, "w"); - if(NULL == fp) { - Log_e("open file %s failed", sg_device_info_file); - return QCLOUD_ERR_FAILURE; - } - - wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); - if(wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { - Log_e("write len less than needed"); - } - fclose(fp); - return QCLOUD_RET_SUCCESS; -} -#endif - -int HAL_SetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name -#else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret -#endif - -#else - ret = iot_save_devinfo_to_json_file(devInfo); -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -int HAL_GetDevInfo(void *pdevInfo) -{ - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name - -#ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif - -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name -#else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret -#endif - -#else - ret = iot_parse_devinfo_from_json_file(devInfo); -#endif - - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} - -#ifdef GATEWAY_ENABLED -int HAL_GetGwDevInfo(void *pgwDeviceInfo) -{ - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); - -#ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - -#else - ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); - if(ret != QCLOUD_RET_SUCCESS) { - return QCLOUD_ERR_FAILURE; - } - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo)*(gwDevInfo->sub_dev_num)); - memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); - //copy sub dev info - ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); -#endif - - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_OS_win.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_OS_win.c deleted file mode 100644 index f2456b5c..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_OS_win.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - - -void *HAL_MutexCreate(void) -{ - HANDLE mutex = CreateMutex( - NULL, - FALSE, - NULL - ); - - if (mutex == NULL) { - HAL_Printf("%s: create mutex failed\n", __FUNCTION__); - } - - return (void *)mutex; -} - -void HAL_MutexDestroy(_IN_ void *mutex) -{ - CloseHandle((HANDLE)mutex); -} - -void HAL_MutexLock(_IN_ void *mutex) -{ - WaitForSingleObject((HANDLE)mutex, INFINITE); -} - -int HAL_MutexTryLock(_IN_ void *mutex) -{ - return WaitForSingleObject((HANDLE)mutex, 0) == WAIT_OBJECT_0 ? 0 : -1; -} - -void HAL_MutexUnlock(_IN_ void *mutex) -{ - ReleaseMutex((HANDLE)mutex); -} - -void *HAL_Malloc(_IN_ uint32_t size) -{ - return malloc(size); -} - -void HAL_Free(_IN_ void *ptr) -{ - free(ptr); -} - -void HAL_Printf(_IN_ const char *fmt, ...) -{ - va_list args; - - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); - - fflush(stdout); -} - -int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) -{ - va_list args; - int rc; - - va_start(args, fmt); - rc = vsnprintf(str, len, fmt, args); - va_end(args); - - return rc; -} - -int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap) -{ - return vsnprintf(str, len, format, ap); -} - -uint32_t HAL_GetTimeMs(void) -{ - return (uint32_t)GetTickCount64(); -} - -void HAL_SleepMs(_IN_ uint32_t ms) -{ - Sleep(ms); -} - -#ifdef AT_TCP_ENABLED - -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) -{ - return NULL; -} - -int HAL_ThreadDestroy(void *thread_t) -{ - return QCLOUD_RET_SUCCESS; -} - -void *HAL_SemaphoreCreate(void) -{ - return NULL; -} - -void HAL_SemaphoreDestroy(void *sem) -{ - return; -} - -void HAL_SemaphorePost(void *sem) -{ - return; -} - -int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) -{ - return QCLOUD_RET_SUCCESS; -} - -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Timer_win.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Timer_win.c deleted file mode 100644 index d4a18b34..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Timer_win.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include "qcloud_iot_import.h" - -static char now_time_str[20] = {0}; - -bool HAL_Timer_expired(Timer *timer) { - if (GetTickCount64() >= timer->end_time) { - return true; - } - - return false; -} - -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { - timer->end_time = GetTickCount64() + timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - timer->end_time = GetTickCount64() + (UINT64)timeout * 1000; -} - -int HAL_Timer_remain(Timer* timer) { - UINT64 now = GetTickCount64(); - - if (now >= timer->end_time) { - return 0; - } - - return (int)(timer->end_time - now); -} - -void HAL_Timer_init(Timer *timer) { - timer->end_time = 0; -} - -char* HAL_Timer_current(void) { - static char time_str[64] = { '\0' }; - time_t now; - struct tm tm_val; - - time(&now); - localtime_s(&tm_val, &now); - - snprintf(time_str, sizeof(time_str), "%04d/%02d/%02d %02d:%02d:%02d", tm_val.tm_year+1900, tm_val.tm_mon+1, tm_val.tm_mday, tm_val.tm_hour, tm_val.tm_min, tm_val.tm_sec); - - return time_str; -} - -long HAL_Timer_current_sec(void) { - return (long)(GetTickCount64() / 1000); -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/coap/coap_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/coap/coap_sample.c deleted file mode 100644 index 260619e8..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/coap/coap_sample.c +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - -static DeviceInfo sg_devInfo; - - -void response_message_callback(void* coap_message, void* userContext) -{ - int ret_code = IOT_COAP_GetMessageCode(coap_message); - switch (ret_code) { - case COAP_EVENT_RECEIVE_ACK: - Log_i("message received ACK, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_RECEIVE_RESPCONTENT: - { - char* payload = NULL; - int payload_len = 0; - int ret = -1; - ret = IOT_COAP_GetMessagePayload(coap_message, &payload, &payload_len); - if (ret == QCLOUD_RET_SUCCESS) { - Log_i("message received response, content: %s", payload); - } - else { - Log_e("message received response, content error."); - } - } - - break; - case COAP_EVENT_UNAUTHORIZED: - Log_i("coap client auth token expired or invalid, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_FORBIDDEN: - Log_i("coap URI is invalid for this device, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_INTERNAL_SERVER_ERROR: - Log_i("coap server internal error, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_ACK_TIMEOUT: - Log_i("message receive ACK timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_SEPRESP_TIMEOUT: - Log_i("message received ACK but receive response timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - default: - break; - } -} - -void event_handler(void *pcontext, CoAPEventMessage *message) -{ - switch (message->event_type) { - case COAP_EVENT_RECEIVE_ACK: - Log_i("message received ACK, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_RECEIVE_RESPCONTENT: - Log_i("message received response, content: %s", IOT_COAP_GetMessageId(message->message)); - break; - case COAP_EVENT_UNAUTHORIZED: - Log_i("coap client auth token expired or invalid, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_FORBIDDEN: - Log_i("coap URI is invalid for this device, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_INTERNAL_SERVER_ERROR: - Log_i("coap server internal error, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_ACK_TIMEOUT: - Log_i("message receive ACK timeout, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_SEPRESP_TIMEOUT: - Log_i("message received ACK but receive response timeout, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - default: - Log_e("unrecogonized event type: %d", message->event_type); - break; - } -} - -static int _setup_connect_init_params(CoAPInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->event_handle.h_fp = event_handler; - initParams->max_retry_count = 3; - - - return QCLOUD_RET_SUCCESS; -} - - -int main(int argc, char **argv) -{ - int rc = QCLOUD_RET_SUCCESS; - - IOT_Log_Set_Level(eLOG_DEBUG); - - CoAPInitParams init_params = DEFAULT_COAPINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } - - void *coap_client = IOT_COAP_Construct(&init_params); - if (coap_client == NULL) { - Log_e("COAP Client construct failed."); - return QCLOUD_ERR_FAILURE; - } - - do { - SendMsgParams send_params = DEFAULT_SENDMSG_PARAMS; - send_params.pay_load = "{\"name\":\"hello world\"}"; - send_params.pay_load_len = strlen("{\"name\":\"hello world\"}"); - send_params.resp_callback = response_message_callback; - - char topicName[128] = ""; - sprintf(topicName, "%s/%s/data", sg_devInfo.product_id, sg_devInfo.device_name); - Log_i("topic name is %s", topicName); - - rc = IOT_COAP_SendMessage(coap_client, topicName, &send_params); - if (rc < 0) { - Log_e("client publish topic failed :%d.", rc); - } - else { - Log_d("client topic has been sent, msg_id: %d", rc); - } - - if (!(argc >= 2 && !strcmp("loop", argv[1]))) { - HAL_SleepMs(1000); - } - - rc = IOT_COAP_Yield(coap_client, 200); - - if (rc != QCLOUD_RET_SUCCESS){ - Log_e("exit with error: %d", rc); - break; - } - - if (argc >= 2) - HAL_SleepMs(1000); - - } while (argc >= 2 && !strcmp("loop", argv[1])); - - IOT_COAP_Destroy(&coap_client); - - return QCLOUD_RET_SUCCESS; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c deleted file mode 100644 index e1c02c87..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "utils_getopt.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - - -#ifdef AUTH_MODE_CERT - /* NULL cert file */ - #define QCLOUD_IOT_NULL_CERT_FILENAME "YOUR_DEVICE_NAME_cert.crt" - /* NULL key file */ - #define QCLOUD_IOT_NULL_KEY_FILENAME "YOUR_DEVICE_NAME_private.key" -#else - /* NULL device secret */ - #define QCLOUD_IOT_NULL_DEVICE_SECRET "YOUR_IOT_PSK" -#endif - - -int main(int argc, char **argv) -{ - int c; - while ((c = utils_getopt(argc, argv, "c:")) != EOF) - switch (c) - { - case 'c': - if (HAL_SetDevInfoFile(utils_optarg)) - return -1; - break; - - default: - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - , argv[0]); - - return -1; - } - - - //init log level - IOT_Log_Set_Level(eLOG_DEBUG); - - int ret; - DeviceInfo sDevInfo; - bool infoNullFlag = false; - - memset((char *)&sDevInfo, 0, sizeof(DeviceInfo)); - - ret = HAL_GetDevInfo(&sDevInfo); - -#ifdef AUTH_MODE_CERT - /* just demo the cert/key files are empty */ - if(!strcmp(sDevInfo.dev_cert_file_name, QCLOUD_IOT_NULL_CERT_FILENAME) - ||!strcmp(sDevInfo.dev_key_file_name, QCLOUD_IOT_NULL_KEY_FILENAME)){ - Log_d("dev Cert not exist!"); - infoNullFlag = true; - }else{ - Log_d("dev Cert exist"); - } -#else - /* just demo the PSK is empty */ - if(!strcmp(sDevInfo.device_secret, QCLOUD_IOT_NULL_DEVICE_SECRET)){ - Log_d("dev psk not exist!"); - infoNullFlag = true; - }else{ - Log_d("dev psk exist"); - } -#endif - - /* device cert/key files or PSK is empty, do dynamic register to fetch */ - if(infoNullFlag){ - if(QCLOUD_RET_SUCCESS == IOT_DynReg_Device(&sDevInfo)){ - ret = HAL_SetDevInfo(&sDevInfo); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("devices info save fail"); - }else{ -#ifdef AUTH_MODE_CERT - Log_d("dynamic register success, productID: %s, devName: %s, CertFile: %s, KeyFile: %s", \ - sDevInfo.product_id, sDevInfo.device_name, sDevInfo.dev_cert_file_name, sDevInfo.dev_key_file_name); -#else - Log_d("dynamic register success,productID: %s, devName: %s, device_secret: %s", \ - sDevInfo.product_id, sDevInfo.device_name, sDevInfo.device_secret); -#endif - } - }else{ - Log_e("%s dynamic register fail", sDevInfo.device_name); - } - } - - return ret; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/gateway/gateway_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/gateway/gateway_sample.c deleted file mode 100644 index 505b269d..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/gateway/gateway_sample.c +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include - -#include "utils_getopt.h" -#include "qcloud_iot_export.h" - -#define MAX_SIZE_OF_TOPIC (128) -#define MAX_SIZE_OF_DATA (128) - -static int sg_sub_packet_id = -1; - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -void _event_handler(void *client, void *context, MQTTEventMsg *msg) -{ - MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; - uintptr_t packet_id = (uintptr_t)msg->msg; - - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; - - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; - - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; - - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - mqtt_messge->topic_len, - mqtt_messge->ptopic, - mqtt_messge->payload_len, - mqtt_messge->payload); - break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - sg_sub_packet_id = packet_id; - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - sg_sub_packet_id = packet_id; - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - sg_sub_packet_id = packet_id; - break; - - case MQTT_EVENT_UNSUBCRIBE_SUCCESS: - Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: - Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_NACK: - Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } -} - -static void _message_handler(void *client, MQTTMessage *message, void *user_data) -{ - if (message == NULL) { - return; - } - - Log_i("Receive Message With topicName:%.*s, payload:%.*s", - (int) message->topic_len, message->ptopic, (int) message->payload_len, (char *) message->payload); -} - -static int sg_loop_count = 1; -static int parse_arguments(int argc, char **argv) -{ - int c; - while ((c = utils_getopt(argc, argv, "c:l:")) != EOF) - switch (c) - { - case 'c': - if (HAL_SetDevInfoFile(utils_optarg)) - return -1; - break; - - case 'l': - sg_loop_count = atoi(utils_optarg); - if (sg_loop_count > 10000) - sg_loop_count = 10000; - else if (sg_loop_count < 0) - sg_loop_count = 1; - break; - - default: - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - " [-l ] \n" - , argv[0]); - return -1; - } - return 0; -} - -int main(int argc, char **argv) -{ - int rc = QCLOUD_ERR_FAILURE; - void* client = NULL; - - IOT_Log_Set_Level(eLOG_DEBUG); - - // parse arguments for device info file and loop test; - rc = parse_arguments(argc, argv); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("parse arguments error, rc = %d", rc); - return rc; - } - - GatewayDeviceInfo GWdevInfo; - rc = HAL_GetGwDevInfo((void *)&GWdevInfo); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("Get gateway dev info err,rc:%d",rc); - return rc; - } - - GatewayInitParam init_params = DEFAULT_GATEWAY_INIT_PARAMS; - init_params.init_param.product_id = GWdevInfo.gw_info.product_id; - init_params.init_param.device_name = GWdevInfo.gw_info.device_name; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, GWdevInfo.gw_info.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, GWdevInfo.gw_info.dev_key_file_name); - - init_params.init_param.cert_file = sg_cert_file; - init_params.init_param.key_file = sg_key_file; -#else - init_params.init_param.device_secret = GWdevInfo.gw_info.device_secret; -#endif - - init_params.init_param.command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - init_params.init_param.auto_connect_enable = 1; - init_params.init_param.event_handle.h_fp = _event_handler; - client = IOT_Gateway_Construct(&init_params); - if (client == NULL) { - Log_e("client constructed failed."); - return QCLOUD_ERR_FAILURE; - } - - // make sub-device online - GatewayParam param = DEFAULT_GATEWAY_PARAMS;; - param.product_id = GWdevInfo.gw_info.product_id; - param.device_name = GWdevInfo.gw_info.device_name; - - DeviceInfo *subDevInfo; - subDevInfo = GWdevInfo.sub_dev_info; - - param.subdev_product_id = subDevInfo->product_id; - param.subdev_device_name = subDevInfo->device_name; - - rc = IOT_Gateway_Subdev_Online(client, ¶m); - if(rc != QCLOUD_RET_SUCCESS) { - Log_e("IOT_Gateway_Subdev_Online fail."); - return rc; - } - - // subscribe sub-device topic - char topic_filter[MAX_SIZE_OF_TOPIC+1] = {0}; - SubscribeParams sub_param = DEFAULT_SUB_PARAMS; - int size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC+1, "%s/%s/data", subDevInfo->product_id, subDevInfo->device_name); - if (size < 0 || size > MAX_SIZE_OF_TOPIC) - { - Log_e("buf size < topic length!"); - return QCLOUD_ERR_FAILURE; - } - sub_param.on_message_handler = _message_handler; - rc = IOT_Gateway_Subscribe(client, topic_filter, &sub_param); - if(rc < 0) { - Log_e("IOT_Gateway_Subscribe fail."); - return rc; - } - - rc = IOT_Gateway_Yield(client, 200); - - // publish msg to sub-device topic - char topic_name[MAX_SIZE_OF_TOPIC+1] = {0}; - PublishParams pub_param = DEFAULT_PUB_PARAMS; - size = HAL_Snprintf(topic_name, MAX_SIZE_OF_TOPIC+1, "%s/%s/data", subDevInfo->product_id, subDevInfo->device_name); - if (size < 0 || size > MAX_SIZE_OF_TOPIC) - { - Log_e("buf size < topic length!"); - return QCLOUD_ERR_FAILURE; - } - - pub_param.qos = QOS1; - pub_param.payload = "{\"data\":\"test gateway\"}"; - pub_param.payload_len = sizeof("{\"data\":\"test gateway\"}"); - - do { - if(sg_sub_packet_id > 0) { - rc = IOT_Gateway_Publish(client, topic_name, &pub_param); - if(rc < 0) { - Log_e("IOT_Gateway_Publish fail."); - } - } - rc = IOT_Gateway_Yield(client, 200); - - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { - HAL_SleepMs(1000); - continue; - } - else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED){ - Log_e("exit with error: %d", rc); - break; - } - - HAL_SleepMs(1000); - - } while (--sg_loop_count > 0); - - // make sub-device offline - rc = IOT_Gateway_Subdev_Offline(client, ¶m); - if(rc != QCLOUD_RET_SUCCESS) { - Log_e("IOT_Gateway_Subdev_Offline fail."); - return rc; - } - - rc = IOT_Gateway_Destroy(client); - - return rc; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/mqtt_sample.c deleted file mode 100644 index bc47fcdc..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/mqtt_sample.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include - -#include "utils_getopt.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; -static int sg_count = 0; -static int sg_sub_packet_id = -1; - - -// user's log print callback -static bool log_handler(const char* message) -{ - // return true if print success - return false; -} - -// MQTT event callback -static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; - uintptr_t packet_id = (uintptr_t)msg->msg; - - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; - - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; - - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; - - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - mqtt_messge->topic_len, - mqtt_messge->ptopic, - mqtt_messge->payload_len, - mqtt_messge->payload); - break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - sg_sub_packet_id = packet_id; - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - sg_sub_packet_id = packet_id; - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - sg_sub_packet_id = packet_id; - break; - - case MQTT_EVENT_UNSUBCRIBE_SUCCESS: - Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: - Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_NACK: - Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } -} - - -// Setup MQTT construct parameters -static int _setup_connect_init_params(MQTTInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - -#ifdef WIN32 - sprintf(sg_cert_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); -#else - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); -#endif - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - - initParams->auto_connect_enable = 1; - initParams->event_handle.h_fp = _mqtt_event_handler; - initParams->event_handle.context = NULL; - - return QCLOUD_RET_SUCCESS; -} - -#define MAX_SIZE_OF_TOPIC_CONTENT 100 -// publish MQTT msg -static int _publish_test_msg(void *client, char *topic_keyword, QoS qos) -{ - char topicName[128] = {0}; - sprintf(topicName,"%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, topic_keyword); - - PublishParams pub_params = DEFAULT_PUB_PARAMS; - pub_params.qos = qos; - - char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; - - int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"publish_test\", \"count\": \"%d\"}", sg_count++); - if (size < 0 || size > sizeof(topic_content) - 1) { - Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); - return -3; - } - - pub_params.payload = topic_content; - pub_params.payload_len = strlen(topic_content); - - return IOT_MQTT_Publish(client, topicName, &pub_params); -} - -// callback when MQTT msg arrives -static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) -{ - if (message == NULL) { - return; - } - - Log_i("Receive Message With topicName:%.*s, payload:%.*s", - (int) message->topic_len, message->ptopic, (int) message->payload_len, (char *) message->payload); -} - -// subscrib MQTT topic -static int _subscribe_topic(void *client, char *topic_keyword, QoS qos) -{ - static char topic_name[128] = {0}; - int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, topic_keyword); - - if (size < 0 || size > sizeof(topic_name) - 1) { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.qos = qos; - sub_params.on_message_handler = on_message_callback; - return IOT_MQTT_Subscribe(client, topic_name, &sub_params); -} - -#ifdef LOG_UPLOAD -// init log upload module -static int _init_log_upload(void) -{ - LogUploadInitParams log_init_params; - memset(&log_init_params, 0, sizeof(LogUploadInitParams)); - - log_init_params.product_id = sg_devInfo.product_id; - log_init_params.device_name = sg_devInfo.device_name; -#ifdef AUTH_MODE_CERT - log_init_params.sign_key = sg_cert_file; -#else - log_init_params.sign_key = sg_devInfo.device_secret; -#endif - -#if defined(__linux__) || defined(WIN32) - log_init_params.read_func = HAL_Log_Read; - log_init_params.save_func = HAL_Log_Save; - log_init_params.del_func = HAL_Log_Del; - log_init_params.get_size_func = HAL_Log_Get_Size; -#endif - - return IOT_Log_Init_Uploader(&log_init_params); - -} - -#endif - -static bool sg_loop_test = false; -static int parse_arguments(int argc, char **argv) -{ - int c; - while ((c = utils_getopt(argc, argv, "c:l")) != EOF) - switch (c) - { - case 'c': - if (HAL_SetDevInfoFile(utils_optarg)) - return -1; - break; - - case 'l': - sg_loop_test = true; - break; - - default: - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - " [-l ] loop test or not\n" - , argv[0]); - return -1; - } - return 0; -} - -int main(int argc, char **argv) -{ - int rc; - //init log level - IOT_Log_Set_Level(eLOG_DEBUG); - IOT_Log_Set_MessageHandler(log_handler); - - // parse arguments for device info file and loop test; - rc = parse_arguments(argc, argv); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("parse arguments error, rc = %d", rc); - return rc; - } - - //init connection - MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params error, rc = %d", rc); - return rc; - } - -#ifdef LOG_UPLOAD - // _init_log_upload should be done after _setup_connect_init_params and before IOT_MQTT_Construct - rc = _init_log_upload(); - if (rc != QCLOUD_RET_SUCCESS) - Log_e("init log upload error, rc = %d", rc); -#endif - - // create MQTT client and connect with server - void *client = IOT_MQTT_Construct(&init_params); - if (client != NULL) { - Log_i("Cloud Device Construct Success"); - } else { - rc = IOT_MQTT_GetErrCode(); - Log_e("MQTT Construct failed, rc = %d", rc); - IOT_Log_Upload(true); - return QCLOUD_ERR_FAILURE; - } - -#ifdef SYSTEM_COMM - long time = 0; - // get system timestamp from server - rc = IOT_Get_SysTime(client, &time); - if (QCLOUD_RET_SUCCESS == rc){ - Log_i("system time is %ld", time); - } else { - Log_e("get system time failed!"); - } -#endif - - //subscribe normal topics here - rc = _subscribe_topic(client, "data", QOS0); - if (rc < 0) { - Log_e("Client Subscribe Topic Failed: %d", rc); - IOT_Log_Upload(true); - return rc; - } - - // wait for subscription result - IOT_MQTT_Yield(client, 500); - - do { - - if (sg_sub_packet_id > 0) { - rc = _publish_test_msg(client, "data", QOS1); - if (rc < 0) { - Log_e("client publish topic failed :%d.", rc); - } - } - - rc = IOT_MQTT_Yield(client, 500); - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { - HAL_SleepMs(1000); - continue; - } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED){ - Log_e("exit with error: %d", rc); - break; - } - - if (sg_loop_test) - HAL_SleepMs(1000); - - } while (sg_loop_test); - - rc = IOT_MQTT_Destroy(&client); - - IOT_Log_Upload(true); - - return rc; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c deleted file mode 100644 index beb08d28..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c +++ /dev/null @@ -1,518 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -/* - * Notes for using SDK in multi-thread programing - * 1. IOT_MQTT_Yield, IOT_MQTT_Construct and IOT_MQTT_Destroy are NOT thread-safe, only calling them in the same thread - * 2. IOT_MQTT_Publish, IOT_MQTT_Subscribe and IOT_MQTT_Unsubscribe are thread-safe, and be executed in multi-threads simultaneously - * 3. IOT_MQTT_Yield is the only entry to read from socket and should not be hand up for long - */ - -#if defined(__linux__) -/* - * This sample test MQTT multithread performance in Linux pthread runtime. Please note the data format is not JSON - */ - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - - -#define MAX_SIZE_OF_TOPIC_CONTENT 100 -#define MAX_PUB_THREAD_COUNT 5 -#define PUBLISH_COUNT 10 -#define THREAD_SLEEP_INTERVAL_USEC 1000000 -#define CONNECT_MAX_ATTEMPT_COUNT 3 -#define RX_RECEIVE_PERCENTAGE 99.0f - -static bool sg_terminate_yield_thread; -static bool sg_terminate_subUnsub_thread; - -static unsigned int sg_countArray[MAX_PUB_THREAD_COUNT][PUBLISH_COUNT]; // record the times when msg from subscribed topic is received -static unsigned int sg_rxMsgBufferTooBigCounter; // record the times when msg is oversize -static unsigned int sg_rxUnexpectedNumberCounter; // record the times when unexpected msg is received -static unsigned int sg_rePublishCount; // record the times of re-publish -static unsigned int sg_wrongYieldCount; // record the times of Yield failure -static unsigned int sg_threadStatus[MAX_PUB_THREAD_COUNT]; // record the status of all the threads -static char sg_integeration_test_topic[MAX_SIZE_OF_TOPIC_CONTENT]; // topic for sub/pub - - -typedef struct ThreadData { - int threadId; - void *client; -} ThreadData; - - -void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) { - MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; - uintptr_t packet_id = (uintptr_t)msg->msg; - - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; - - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; - - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; - - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - mqtt_messge->topic_len, - mqtt_messge->ptopic, - mqtt_messge->payload_len, - mqtt_messge->payload); - break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_SUCCESS: - Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: - Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_UNSUBCRIBE_NACK: - Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } -} - -static int _setup_connect_init_params(MQTTInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - memset(sg_integeration_test_topic, 0, MAX_SIZE_OF_TOPIC_CONTENT); - sprintf(sg_integeration_test_topic, "%s/%s/data", sg_devInfo.product_id, sg_devInfo.device_name); - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - - initParams->auto_connect_enable = 1; - initParams->event_handle.h_fp = event_handler; - - return QCLOUD_RET_SUCCESS; -} - -/** - * self-defined format, not JSON - */ -static void _mqtt_message_handler(void *pClient, MQTTMessage *message, void *userData) -{ - if (message == NULL) { - return; - } - - if(MAX_SIZE_OF_TOPIC_CONTENT >= message->payload_len) { - /* parsing payload */ - char tempBuf[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; - unsigned int tempRow = 0, tempCol = 0; - char *temp = NULL; - - HAL_Snprintf(tempBuf, message->payload_len + 1, "%s", (char *)message->payload); - Log_d("Message received : %s", tempBuf); - temp = strtok(tempBuf, " ,:"); - if(NULL == temp) { - return; - } - temp = strtok(NULL, " ,:"); - if(NULL == temp) { - return; - } - tempRow = atoi(temp); - temp = strtok(NULL, " ,:"); - if(NULL == temp) { - return; - } - temp = strtok(NULL, " ,:"); - if(NULL == temp) { - return; - } - tempCol = atoi(temp); - - if(((tempRow - 1) < MAX_PUB_THREAD_COUNT) && (tempCol < PUBLISH_COUNT)) { - sg_countArray[tempRow - 1][tempCol]++; - } else { - Log_e(" Unexpected Thread : %d, Message : %d ", tempRow, tempCol); - sg_rxUnexpectedNumberCounter++; - } - } else { - sg_rxMsgBufferTooBigCounter++; - } -} - -/** - * yield test thread runner - */ -static void *_mqtt_yield_thread_runner(void *ptr) { - int rc = QCLOUD_RET_SUCCESS; - void *pClient = ptr; - - while(false == sg_terminate_yield_thread) { - - rc = IOT_MQTT_Yield(pClient, 200); - - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { - usleep(THREAD_SLEEP_INTERVAL_USEC); - continue; - } - else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED){ - Log_e("Yield thread exit with error: %d", rc); - break; - } - usleep(THREAD_SLEEP_INTERVAL_USEC); - } - return NULL; -} - -/** - * subscribe/unsubscribe test thread runner - * subscribed and unsubscribe - */ -static void *_mqtt_sub_unsub_thread_runner(void *ptr) { - int rc = QCLOUD_RET_SUCCESS; - void *pClient = ptr; - char testTopic[128]; - HAL_Snprintf(testTopic, 128, "%s/%s/control", sg_devInfo.product_id, sg_devInfo.device_name); - - while(QCLOUD_RET_SUCCESS == rc && false == sg_terminate_subUnsub_thread) { - do { - usleep(THREAD_SLEEP_INTERVAL_USEC); - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.qos = QOS1; - sub_params.on_message_handler = _mqtt_message_handler; - rc = IOT_MQTT_Subscribe(pClient, testTopic, &sub_params); - - } while(QCLOUD_ERR_MQTT_NO_CONN == rc || QCLOUD_ERR_MQTT_REQUEST_TIMEOUT == rc); - - if(rc < 0) { - Log_e("Subscribe failed. Ret : %d ", rc); - } - - sleep(1); - - do { - usleep(THREAD_SLEEP_INTERVAL_USEC); - rc = IOT_MQTT_Unsubscribe(pClient, testTopic); - } while(QCLOUD_ERR_MQTT_NO_CONN == rc|| QCLOUD_ERR_MQTT_REQUEST_TIMEOUT == rc); - - if(rc < 0) { - Log_e("Unsubscribe failed. Returned : %d ", rc); - } - } - return NULL; -} - -/** - * do subscribe in the thread - */ -static int _mqtt_subscribe_to_test_topic(void *pClient) -{ - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _mqtt_message_handler; - sub_params.qos = QOS1; - return IOT_MQTT_Subscribe(pClient, sg_integeration_test_topic, &sub_params); -} - -/** - * do publish in the thread - * loop for PUBLISH_COUNT times - * If publish failed in 1st time, do it again - */ -static void *_mqtt_publish_thread_runner(void *ptr) { - int itr = 0; - char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; - - PublishParams params; - int rc = QCLOUD_RET_SUCCESS; - ThreadData *threadData = (ThreadData *) ptr; - void *pClient = threadData->client; - int threadId = threadData->threadId; - - int sleep_us = THREAD_SLEEP_INTERVAL_USEC; - for(itr = 0; itr < PUBLISH_COUNT; itr++) { - int size = HAL_Snprintf(topic_content, sizeof(topic_content), "Thread : %d, Msg : %d", threadId, itr); - if (size < 0 || size > sizeof(topic_content) - 1) { - Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); - return 0; - } - - params.payload = (void *) topic_content; - params.payload_len = strlen(topic_content); - params.qos = QOS1; - Log_d("Msg being published: %s", topic_content); - - do { - rc = IOT_MQTT_Publish(pClient, sg_integeration_test_topic, ¶ms); - usleep(sleep_us); - } while(QCLOUD_ERR_MQTT_NO_CONN == rc || QCLOUD_ERR_MQTT_REQUEST_TIMEOUT == rc); - - // 1st publish failed, re-publish and update sg_rePublishCount - if(rc < 0) { - Log_e("Failed attempt 1 Publishing Thread : %d, Msg : %d, cs : %d ", threadId, itr, rc); - do { - rc = IOT_MQTT_Publish(pClient, sg_integeration_test_topic, ¶ms); - usleep(sleep_us); - } while(QCLOUD_ERR_MQTT_NO_CONN == rc); - sg_rePublishCount++; - if(rc < 0) { - Log_e("Failed attempt 2 Publishing Thread : %d, Msg : %d, cs : %d Second Attempt ", threadId, itr, rc); - } - } - } - sg_threadStatus[threadId - 1] = 1; - return 0; -} - -/** - * thread safety test - */ -static int _mqtt_multi_thread_test(void* client) -{ - pthread_t publish_thread[MAX_PUB_THREAD_COUNT]; // for all publish thread - pthread_t yield_thread; // yield thread - pthread_t sub_unsub_thread; // sub/unsub thread - int threadId[MAX_PUB_THREAD_COUNT]; // thread id - int pubThreadReturn[MAX_PUB_THREAD_COUNT]; // to save return value when creating pub threads - float percentOfRxMsg = 0.0; // record the success percentage of every pub send and recv - int finishedThreadCount = 0; // record the number of finished publish threads - int rxMsgCount = 0; // record the times of successfull subscribe - ThreadData threadData[MAX_PUB_THREAD_COUNT]; // thread data to wrap client threadId for publish thread - - int rc = QCLOUD_RET_SUCCESS; - int test_result = 0; - int i = 0 , j = 0; - - // init the global variables - sg_terminate_yield_thread = false; - sg_rxMsgBufferTooBigCounter = 0; - sg_rxUnexpectedNumberCounter = 0; - sg_rePublishCount = 0; - sg_wrongYieldCount = 0; - - if (client == NULL) { - Log_e("MQTT client is invalid!"); - return QCLOUD_ERR_FAILURE; - } - - /* Firstly create the thread for IOT_MQTT_Yield() so we can read and handle MQTT packet */ - rc = pthread_create(&yield_thread, NULL, _mqtt_yield_thread_runner, client); - if (rc < 0) { - Log_e("Create Yield thread failed. err: %d - %s", rc, strerror(rc)); - return rc; - } - - /* create a thread to test subscribe and unsubscribe another topic */ - rc = pthread_create(&sub_unsub_thread, NULL, _mqtt_sub_unsub_thread_runner, client); - if (rc < 0) { - Log_e("Create Sub_unsub thread failed. err: %d - %s", rc, strerror(rc)); - return rc; - } - - /* subscribe the same test topic as publish threads */ - rc = _mqtt_subscribe_to_test_topic(client); - if (rc < 0) { - Log_e("Client subscribe failed: %d", rc); - return rc; - } - - /* setup the thread info for pub-threads */ - for(j = 0; j < MAX_PUB_THREAD_COUNT; j++) { - threadId[j] = j + 1; // self defined thread ID: 1 - MAX_PUB_THREAD_COUNT - sg_threadStatus[j] = 0; // thread status flag - for(i = 0; i < PUBLISH_COUNT; i++) { - sg_countArray[j][i] = 0; - } - } - - /* create multi threads to test IOT_MQTT_Publish() */ - for(i = 0; i < MAX_PUB_THREAD_COUNT; i++) { - threadData[i].client = client; - threadData[i].threadId = threadId[i]; - pubThreadReturn[i] = pthread_create(&publish_thread[i], NULL, _mqtt_publish_thread_runner, - &threadData[i]); - - if (pubThreadReturn[i] < 0) { - Log_e("Create publish thread(ID: %d) failed. err: %d - %s", - threadId[i], pubThreadReturn[i], strerror(pubThreadReturn[i])); - } - } - - /* wait for all pub-threads to finish their jobs */ - do { - finishedThreadCount = 0; - for(i = 0; i < MAX_PUB_THREAD_COUNT; i++) { - finishedThreadCount += sg_threadStatus[i]; - } - Log_i(">>>>>>>>Finished thread count : %d", finishedThreadCount); - sleep(1); - } while(finishedThreadCount < MAX_PUB_THREAD_COUNT); - - Log_i("Publishing is finished"); - - sg_terminate_yield_thread = true; - sg_terminate_subUnsub_thread = true; - - /* Allow time for yield_thread and sub_sunsub thread to exit */ - - /* Not using pthread_join because all threads should have terminated gracefully at this point. If they haven't, - * which should not be possible, something below will fail. */ - sleep(1); - - /* Calculating Test Results */ - for(i = 0; i < PUBLISH_COUNT; i++) { - for(j = 0; j < MAX_PUB_THREAD_COUNT; j++) { - if(sg_countArray[j][i] > 0) { - rxMsgCount++; - } - } - } - percentOfRxMsg = (float) rxMsgCount * 100 / (PUBLISH_COUNT * MAX_PUB_THREAD_COUNT); - - printf("\n\nMQTT Multi-thread Test Result : \n"); - printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); - if(RX_RECEIVE_PERCENTAGE <= percentOfRxMsg && - 0 == sg_rxMsgBufferTooBigCounter && - 0 == sg_rxUnexpectedNumberCounter && - 0 == sg_wrongYieldCount) - { - // test success - printf("Success! PercentOfRxMsg: %f %%\n", percentOfRxMsg); - printf("Published Messages: %d , Received Messages: %d \n", PUBLISH_COUNT * MAX_PUB_THREAD_COUNT, rxMsgCount); - printf("QoS 1 re publish count %u\n", sg_rePublishCount); - printf("Yield count without error during callback %u\n", sg_wrongYieldCount); - test_result = 0; - } else { - // test fail - printf("\nFailure! PercentOfRxMsg: %f %%\n", percentOfRxMsg); - printf("Published Messages: %d , Received Messages: %d \n", PUBLISH_COUNT * MAX_PUB_THREAD_COUNT, rxMsgCount); - printf("\"Received message was too big than anything sent\" count: %u\n", sg_rxMsgBufferTooBigCounter); - printf("\"The number received is out of the range\" count: %u\n", sg_rxUnexpectedNumberCounter); - printf("Yield count without error during callback %u\n", sg_wrongYieldCount); - test_result = -1; - } - printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); - - return test_result; -} - - -int main(int argc, char **argv) { - int rc; - - //Init log level - IOT_Log_Set_Level(eLOG_DEBUG); - - //Avoid broken pipe crash - signal(SIGPIPE, SIG_IGN); - - //Init connection - MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - //MQTT client connect - void * client = IOT_MQTT_Construct(&init_params); - if (client != NULL) { - Log_i("Cloud Device Construct Success"); - } else { - Log_e("Cloud Device Construct Failed"); - return QCLOUD_ERR_FAILURE; - } - - //Start rock & roll - rc = _mqtt_multi_thread_test(client); - if(0 != rc) { - Log_e("MQTT multi-thread test FAILED! RC: %d", rc); - } else { - Log_i("MQTT multi-thread test SUCCESS"); - } - - //Finish and destroy - rc = IOT_MQTT_Destroy(&client); - return rc; -} - -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_mqtt_sample.c deleted file mode 100644 index 1eee5c47..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_mqtt_sample.c +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" -#include "lite-utils.h" - - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - - -#define OTA_BUF_LEN (5000) - -static bool sg_pub_ack = false; -static int sg_packet_id = 0; - -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; - - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; - - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; - - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; - - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - if (sg_packet_id == packet_id) - sg_pub_ack = true; - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } -} - -/* demo of firmware info management in device side for resuming download from break point */ -#define VERSION_FILE_PATH "./local_fw_info.json" -#define KEY_VER "version" -#define KEY_MD5 "md5" -#define KEY_SIZE "downloadSize" -#define KEY_STATE "state" -#define KEY_PREVER "running_version" -static char * get_local_fw_version(char **ver, char **md5, char **size) -{ -#define INFO_FILE_MAX_LEN 256 - - FILE *fp; - int len; - int rlen; - char *preVer; - char *reportVer = NULL; - - fp = fopen(VERSION_FILE_PATH, "r"); - if(NULL == fp) { - Log_e("open file %s failed", VERSION_FILE_PATH); - goto exit; - } - - fseek(fp, 0L, SEEK_END); - len = ftell(fp); - if(len > INFO_FILE_MAX_LEN){ - Log_e("%s is too big, pls check", VERSION_FILE_PATH); - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } - - *ver = LITE_json_value_of(KEY_VER, JsonDoc); - *md5 = LITE_json_value_of(KEY_MD5, JsonDoc); - *size = LITE_json_value_of(KEY_SIZE, JsonDoc); - preVer = LITE_json_value_of(KEY_PREVER, JsonDoc); - - if((NULL != *ver) && (NULL != preVer) && (0 == strcmp(*ver, preVer))){ - reportVer = *ver; - HAL_Free(preVer); - }else{ - reportVer = preVer; - } - -exit: - - if(NULL != fp){ - fclose(fp); - } - - return reportVer; -#undef INFO_FILE_MAX_LEN -} - -/* update local firmware info for resuming download from break point */ -static int update_local_fw_info(const char *version, const char *preVer, const char *md5, uint32_t downloadedSize) -{ -#define INFO_FILE_MAX_LEN 256 - - FILE *fp; - int wlen; - int ret = QCLOUD_RET_SUCCESS; - char dataBuff[INFO_FILE_MAX_LEN]; - - memset(dataBuff, 0, INFO_FILE_MAX_LEN); - HAL_Snprintf(dataBuff, INFO_FILE_MAX_LEN, "{\"%s\":\"%s\", \"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\"}",\ - KEY_VER, version, KEY_MD5, md5, KEY_SIZE, downloadedSize, \ - KEY_PREVER, (NULL == preVer)?"1.0.0": preVer); - - fp = fopen(VERSION_FILE_PATH, "w"); - if(NULL == fp) { - Log_e("open file %s failed", VERSION_FILE_PATH); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - wlen = fwrite(dataBuff, 1, strlen(dataBuff), fp); - if(wlen != strlen(dataBuff)){ - Log_e("save version to file err"); - ret = QCLOUD_ERR_FAILURE; - } - -exit: - - if(NULL != fp){ - fclose(fp); - } - - return ret; -#undef INFO_FILE_MAX_LEN -} - -/* get local firmware offset for resuming download from break point */ -static int getFwOffset(void *h_ota, char *local_ver, char *local_md5, char *local_size, uint32_t *offset, uint32_t *size_file) -{ - char version[128], md5sum[33]; - uint32_t local_len; - int Ret; - - Ret = IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); - Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, size_file, 4); - - local_len = (NULL == local_size)?0:atoi(local_size); - - - if((NULL == local_ver)||(NULL == local_md5)||(NULL == local_size)){ - *offset = 0; - } - else if((0 != strcmp(local_ver, version))||(0 != strcmp(local_md5, md5sum))||(local_len > *size_file)){ - *offset = 0; - }else { - *offset = local_len; - } - - return Ret; -} - -/* calculate left MD5 for resuming download from break point */ -static int cal_exist_fw_md5(void *h_ota, FILE *fp, size_t size){ -#define BUFF_LEN 1024 - - char buff[BUFF_LEN]; - size_t rlen; - int Ret = QCLOUD_RET_SUCCESS; - - while((size > 0) && (!feof(fp))){ - rlen = (size > BUFF_LEN)?BUFF_LEN:size; - if(rlen != fread(buff, 1, rlen, fp)){ - Log_e("read data len not expected"); - Ret = QCLOUD_ERR_FAILURE; - break; - } - IOT_OTA_UpdateClientMd5(h_ota, buff, rlen); - size -= rlen; - } - return Ret; -#undef BUFF_LEN -} - -static int _setup_connect_init_params(MQTTInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; - initParams->event_handle.h_fp = event_handler; - - return QCLOUD_RET_SUCCESS; -} - -int main(int argc, char **argv) -{ - IOT_Log_Set_Level(eLOG_DEBUG); - int rc; - uint32_t firmware_valid; - char version[128], md5sum[33]; - uint32_t size_downloaded, size_file; - int len; - int ota_over = 0; - bool upgrade_fetch_success = true; - char buf_ota[OTA_BUF_LEN]; - FILE *fp = NULL; - uint32_t offset = 0; - - - MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } - - void *client = IOT_MQTT_Construct(&init_params); - if (client != NULL) { - Log_i("Cloud Device Construct Success"); - } else { - Log_e("Cloud Device Construct Failed"); - return QCLOUD_ERR_FAILURE; - } - - void *h_ota = IOT_OTA_Init(sg_devInfo.product_id, sg_devInfo.device_name, client); - if (NULL == h_ota) { - Log_e("initialize OTA failed"); - return QCLOUD_ERR_FAILURE; - } - - IOT_MQTT_Yield(client, 1000); //make sure subscribe success - - char *local_ver = NULL, *local_md5 = NULL, *local_size = NULL, *reportVer = NULL; - reportVer = get_local_fw_version(&local_ver, &local_md5, &local_size); - Log_d("local_ver:%s local_md5:%s, local_size:%s", local_ver, local_md5, local_size); - - /* Must report version first */ - if (0 > IOT_OTA_ReportVersion(h_ota, (NULL == reportVer)?"1.0.0": reportVer)) { - Log_e("report OTA version failed"); - goto exit; - } - - do { - Log_i("wait for ota upgrade command..."); - - IOT_MQTT_Yield(client, 200); - - if (IOT_OTA_IsFetching(h_ota)) { - - /*check pre-download finished or not*/ - /*if version & MD5 is the same,then pre-download not finished,get breakpoint continue download.otherwise the version is new*/ - rc = getFwOffset(h_ota, local_ver, local_md5, local_size, &offset, &size_file); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("get fw offset err,rc:%d",rc); - upgrade_fetch_success = false; - break; - } - - /*cal file md5*/ - //Log_d("Get offset:%d(%x)", offset, offset); - if(offset > 0){ - if (NULL == (fp = fopen("ota.bin", "ab+"))) { - Log_e("open file failed"); - upgrade_fetch_success = false; - break; - } - - if(QCLOUD_RET_SUCCESS != cal_exist_fw_md5(h_ota, fp, offset)){ - Log_e("cal exist fw md5 failed"); - upgrade_fetch_success = false; - break; - } - }else{ - if (NULL == (fp = fopen("ota.bin", "wb+"))) { - Log_e("open file failed"); - upgrade_fetch_success = false; - break; - } - } - - /*set offset and start http connect*/ - fseek(fp, offset, SEEK_SET); - rc = IOT_OTA_StartDownload(h_ota, offset, size_file); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("OTA download start err,rc:%d",rc); - upgrade_fetch_success = false; - break; - } - - do { - len = IOT_OTA_FetchYield(h_ota, buf_ota, OTA_BUF_LEN, 1); - if (len > 0) { - if (1 != fwrite(buf_ota, len, 1, fp)) { - Log_e("write data to file failed"); - upgrade_fetch_success = false; - break; - } - } else if (len < 0) { - Log_e("download fail rc=%d", len); - upgrade_fetch_success = false; - break; - } - fflush(fp); - - /* get OTA information and update local info */ - IOT_OTA_Ioctl(h_ota, IOT_OTAG_FETCHED_SIZE, &size_downloaded, 4); - IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, &size_file, 4); - IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); - IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - rc = update_local_fw_info(version, reportVer, md5sum, size_downloaded); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("update local fw info err,rc:%d", rc); - } - - IOT_MQTT_Yield(client, 100); - - } while (!IOT_OTA_IsFetchFinish(h_ota)); - - fclose(fp); - fp = NULL; - - /* Must check MD5 match or not */ - if (upgrade_fetch_success) { - IOT_OTA_Ioctl(h_ota, IOT_OTAG_CHECK_FIRMWARE, &firmware_valid, 4); - if (0 == firmware_valid) { - Log_e("The firmware is invalid"); - upgrade_fetch_success = false; - rc = update_local_fw_info(NULL, reportVer, NULL, 0); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("update local fw info err,rc:%d", rc); - } - } else { - Log_i("The firmware is valid"); - upgrade_fetch_success = true; - } - } - - ota_over = 1; - } - - HAL_SleepMs(2000); - } while(!ota_over); - - - if (upgrade_fetch_success) - { - /* begin execute OTA files, should report upgrade begin */ - sg_packet_id = IOT_OTA_ReportUpgradeBegin(h_ota); - if (0 > sg_packet_id) { - Log_e("report OTA begin failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - sg_pub_ack = false; - - //* add your own upgrade logic here*// - //* fw_upgrade..... - - if(QCLOUD_RET_SUCCESS == rc){ - /* if upgrade success */ - /* after execute OTA files, should report upgrade result */ - sg_packet_id = IOT_OTA_ReportUpgradeSuccess(h_ota, NULL); - if (0 > sg_packet_id) { - Log_e("report OTA result failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - rc = update_local_fw_info(version, version, md5sum, size_downloaded); // just for example, add your own logic - sg_pub_ack = false; - - }else{ - /* if upgrade fail */ - sg_packet_id = IOT_OTA_ReportUpgradeFail(h_ota, NULL); - if (0 > sg_packet_id) { - Log_e("report OTA result failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - rc = update_local_fw_info(NULL, reportVer, NULL, 0); // just for example, add your own logic - sg_pub_ack = false; - - } - } - -exit: - - if(NULL != fp){ - fclose(fp); - fp = NULL; - } - - if(NULL != local_ver){ - reportVer = (reportVer == local_ver)?NULL: reportVer; - HAL_Free(local_ver); - local_ver = NULL; - } - - if(NULL != local_md5){ - HAL_Free(local_md5); - local_md5 = NULL; - } - - if(NULL != local_size){ - HAL_Free(local_size); - local_size = NULL; - } - - if(NULL != reportVer){ - HAL_Free(reportVer); - reportVer = NULL; - } - - IOT_OTA_Destroy(h_ota); - - IOT_MQTT_Destroy(&client); - - return 0; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample.c deleted file mode 100644 index 928bc0b5..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample.c +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "utils_getopt.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" -#include "lite-utils.h" - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - - -#define MAX_LENGTH_OF_UPDATE_JSON_BUFFER 200 - -#define ROOM_TEMPERATURE 32.0f -static float sg_desire_temperature = 20.0f; -static float sg_report_temperature = ROOM_TEMPERATURE; - -static float sg_energy_consumption = 0.0f; -static bool sg_airconditioner_openned = false; - -static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; - -#define MAX_RECV_LEN (512 + 1) - - -// compare float value -bool _is_value_equal(float left, float right) -{ - if((leftright-0.01)) - return true; - else - return false; -} - - -// simulate room temperature change -static void _simulate_room_temperature(float *roomTemperature) { - float delta_change = 0; - - if (!sg_airconditioner_openned) { - if(!_is_value_equal(*roomTemperature, ROOM_TEMPERATURE)) { - delta_change = (*roomTemperature)>ROOM_TEMPERATURE ? -0.5: 0.5; - } - } else { - sg_energy_consumption += 1; - if (!_is_value_equal(*roomTemperature, sg_desire_temperature)) { - delta_change = (*roomTemperature)>sg_desire_temperature ? -1.0: 1.0; - } - } - - *roomTemperature += delta_change; -} - -// MQTT event callback -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; - - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; - - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; - - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; - - case MQTT_EVENT_SUBCRIBE_SUCCESS: - sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } -} - -// callback when MQTT msg arrives -static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) -{ - if (message == NULL) - return; - - const char *topicName = message->ptopic; - size_t topicNameLen = message->topic_len; - - if (topicName == NULL || topicNameLen == 0) { - return; - } - - Log_i("Receive Message With topicName:%.*s, payload:%.*s", - (int) topicNameLen, topicName, (int) message->payload_len, (char *) message->payload); - - - static char cloud_rcv_buf[MAX_RECV_LEN + 1]; - size_t len = (message->payload_len > MAX_RECV_LEN)?MAX_RECV_LEN:(message->payload_len); - - if(message->payload_len > MAX_RECV_LEN){ - Log_e("paload len exceed buffer size"); - } - - memcpy(cloud_rcv_buf, message->payload, len); - cloud_rcv_buf[len] = '\0'; // jsmn_parse relies on a string - - char* value = LITE_json_value_of("action", cloud_rcv_buf); - if (value != NULL) { - if(strcmp(value, "come_home") == 0) - { - sg_airconditioner_openned = true; - } - else if(strcmp(value, "leave_home") == 0) - { - sg_airconditioner_openned = false; - } - } - - HAL_Free(value); -} - -// Setup MQTT construct parameters -static int _setup_connect_init_params(ShadowInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - initParams->auto_connect_enable = 1; - initParams->event_handle.h_fp = event_handler; - - return QCLOUD_RET_SUCCESS; -} - -// subscrib MQTT topic -static int _register_subscribe_topics(void *client) -{ - static char topic_name[128] = {0}; - int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, "control"); - if (size < 0 || size > sizeof(topic_name) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = on_message_callback; - return IOT_Shadow_Subscribe(client, topic_name, &sub_params); -} - -int main(int argc, char **argv) -{ - int c; - while ((c = utils_getopt(argc, argv, "c:")) != EOF) - switch (c) - { - case 'c': - if (HAL_SetDevInfoFile(utils_optarg)) - return -1; - break; - - default: - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - , argv[0]); - - return -1; - } - - - int rc; - - //init log level - IOT_Log_Set_Level(eLOG_DEBUG); - - //init connection - ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } - - void *client = IOT_Shadow_Construct(&init_params); - if (client != NULL) { - Log_i("Cloud Device Construct Success"); - } else { - Log_e("Cloud Device Construct Failed"); - return QCLOUD_ERR_FAILURE; - } - - //register subscribe topics here - rc = _register_subscribe_topics(client); - if (rc < 0) { - Log_e("Client Subscribe Topic Failed: %d", rc); - return rc; - } - - while (IOT_Shadow_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || rc == QCLOUD_RET_MQTT_RECONNECTED) { - - rc = IOT_Shadow_Yield(client, 200); - - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { - HAL_SleepMs(1000); - continue; - } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } - - if (sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_SUCCESS && - sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_TIMEOUT && - sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_NACK) - { - Log_i("Wait for subscribe result. sg_subscribe_event_result = %d", sg_subscribe_event_result); - HAL_SleepMs(1000); - continue; - } - - _simulate_room_temperature(&sg_report_temperature); - Log_i("airConditioner state: %s", sg_airconditioner_openned ? "open" : "close"); - Log_i("currentTemperature: %f, energyConsumption: %f", sg_report_temperature, sg_energy_consumption); - - HAL_SleepMs(1000); - } - - rc = IOT_Shadow_Destroy(client); - - return rc; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_coap_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_coap_sample.c deleted file mode 100644 index c81e8c62..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_coap_sample.c +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "utils_getopt.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#define MAX_SIZE_OF_TOPIC_CONTENT 100 - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - -#define PROGRAM_NAME "door_coap_sample" -void printUsage() -{ - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - " [-t ]\n" - " [-a ]\n", - PROGRAM_NAME); -} - - -void event_handler(void *pcontext, CoAPEventMessage *message) -{ - switch (message->event_type) { - case COAP_EVENT_RECEIVE_ACK: - Log_i("message received ACK, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_RECEIVE_RESPCONTENT: /* not supported currently */ - break; - case COAP_EVENT_UNAUTHORIZED: - Log_i("coap client auth token expired or invalid, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_FORBIDDEN: - Log_i("coap URI is invalid for this device, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_INTERNAL_SERVER_ERROR: - Log_i("coap server internal error, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_ACK_TIMEOUT: - Log_i("message receive ACK timeout, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_SEPRESP_TIMEOUT: /* not supported currently */ - break; - default: - Log_e("unrecogonized event type: %d", message->event_type); - break; - } -} - -static int _setup_connect_init_params(CoAPInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->event_handle.h_fp = event_handler; - initParams->max_retry_count = 3; - - - return QCLOUD_RET_SUCCESS; -} - - -int main(int argc, char **argv) -{ - int c; - char action[16] = {0}; - char target_device_name[MAX_SIZE_OF_DEVICE_NAME+1] = {0}; - - while ((c = utils_getopt(argc, argv, "c:t:a:")) != EOF) - switch (c) - { - case 'c': - if (HAL_SetDevInfoFile(utils_optarg)) - return -1; - break; - - case 't': - strncpy(target_device_name, utils_optarg, MAX_SIZE_OF_DEVICE_NAME); - break; - - case 'a': - strncpy(action, utils_optarg, sizeof(action)-1); - break; - - default: - printUsage(); - - return -1; - } - - int rc = QCLOUD_RET_SUCCESS; - IOT_Log_Set_Level(eLOG_DEBUG); - - CoAPInitParams init_params = DEFAULT_COAPINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } - - void *coap_client = IOT_COAP_Construct(&init_params); - if (coap_client == NULL) { - Log_e("COAP Client construct failed."); - return QCLOUD_ERR_FAILURE; - } - else { - Log_e("%p", coap_client); - } - - - if(strcmp(action, "come_home") == 0 || strcmp(action, "leave_home") == 0) - { - char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; - SendMsgParams send_params = DEFAULT_SENDMSG_PARAMS; - - int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"%s\", \"targetDevice\": \"%s\"}", action, target_device_name); - if (size < 0 || size > sizeof(topic_content) - 1) - { - Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); - return -3; - } - - send_params.pay_load = topic_content; - send_params.pay_load_len = strlen(topic_content); - - char topicName[128] = ""; - sprintf(topicName, "%s/%s/event", sg_devInfo.product_id, sg_devInfo.device_name); - Log_i("topic name is %s", topicName); - - rc = IOT_COAP_SendMessage(coap_client, topicName, &send_params); - if (rc < 0) { - Log_e("client publish topic failed :%d.", rc); - } - else { - Log_d("client topic has been sent, msg_id: %d", rc); - } - - rc = IOT_COAP_Yield(coap_client, 200); - - if (rc != QCLOUD_RET_SUCCESS){ - Log_e("exit with error: %d", rc); - } - } - else - { - printUsage(); - return -2; - } - - IOT_COAP_Destroy(&coap_client); - - return QCLOUD_RET_SUCCESS; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_mqtt_sample.c deleted file mode 100644 index 1ddfffec..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/door_mqtt_sample.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include - -#include "utils_getopt.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#define MAX_SIZE_OF_TOPIC_CONTENT 100 - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - - -static bool sg_has_rev_ack = false; - - -#define PROGRAM_NAME "door_mqtt_sample" -void printUsage() -{ - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - " [-t ]\n" - " [-a ]\n", - PROGRAM_NAME); -} - - -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; - sg_has_rev_ack = true; - - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; - - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; - - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; - - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } -} - -// Setup MQTT construct parameters -static int _setup_connect_init_params(MQTTInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; - initParams->event_handle.h_fp = event_handler; - - return QCLOUD_RET_SUCCESS; -} - -// publish MQTT msg -static int _publish_msg(void *client, char* action, char* targetDeviceName) -{ - if(NULL == action || NULL == targetDeviceName) - return -1; - - char topic_name[128] = {0}; - sprintf(topic_name,"%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, "event"); - - PublishParams pub_params = DEFAULT_PUB_PARAMS; - pub_params.qos = QOS1; - - char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; - if(strcmp(action, "come_home") == 0 || strcmp(action, "leave_home") == 0) - { - int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"%s\", \"targetDevice\": \"%s\"}", action, targetDeviceName); - if (size < 0 || size > sizeof(topic_content) - 1) - { - Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); - return -3; - } - - pub_params.payload = topic_content; - pub_params.payload_len = strlen(topic_content); - } - else - { - printUsage(); - return -2; - } - - int rc = IOT_MQTT_Publish(client, topic_name, &pub_params); - if (rc < 0) { - Log_e("Client publish Topic:%s Failed :%d with content: %s", topic_name, rc, (char*)pub_params.payload); - return rc; - } - return 0; -} - - -int main(int argc, char **argv) -{ - int c; - char action[16] = {0}; - char target_device_name[MAX_SIZE_OF_DEVICE_NAME+1] = {0}; - - while ((c = utils_getopt(argc, argv, "c:t:a:")) != EOF) - switch (c) - { - case 'c': - if (HAL_SetDevInfoFile(utils_optarg)) - return -1; - break; - - case 't': - strncpy(target_device_name, utils_optarg, MAX_SIZE_OF_DEVICE_NAME); - break; - - case 'a': - strncpy(action, utils_optarg, sizeof(action)-1); - break; - - default: - printUsage(); - - return -1; - } - - - //init log level - IOT_Log_Set_Level(eLOG_DEBUG); - - int rc; - - //init connection - MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } - - void *client = IOT_MQTT_Construct(&init_params); - if (client != NULL) { - Log_i("Cloud Device Construct Success"); - } else { - Log_e("Cloud Device Construct Failed"); - return QCLOUD_ERR_FAILURE; - } - - //publish msg - rc = _publish_msg(client, action, target_device_name); - if (rc < 0) { - Log_e("Demo publish fail rc=%d", rc); - } - - while (IOT_MQTT_IsConnected(client) || - rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || - rc == QCLOUD_RET_MQTT_RECONNECTED ) - { - if (false != sg_has_rev_ack) break; - Log_i("Wait for publish ack"); - rc = IOT_MQTT_Yield(client, 200); - HAL_SleepMs(1000); - } - - rc = IOT_MQTT_Destroy(&client); - - return rc; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/shadow/shadow_sample.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/shadow/shadow_sample.c deleted file mode 100644 index f1084686..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/shadow/shadow_sample.c +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include "qcloud_iot_export.h" - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - -static char sg_shadow_update_buffer[200]; -size_t sg_shadow_update_buffersize = sizeof(sg_shadow_update_buffer) / sizeof(sg_shadow_update_buffer[0]); - -static DeviceProperty sg_shadow_property; -static int sg_current_update_count = 0; -static bool sg_delta_arrived = false; - -void OnDeltaCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) { - int rc = IOT_Shadow_JSON_ConstructDesireAllNull(pClient, sg_shadow_update_buffer, sg_shadow_update_buffersize); - - if (rc == QCLOUD_RET_SUCCESS) { - sg_delta_arrived = true; - } - else { - Log_e("construct desire failed, err: %d", rc); - } -} - -void OnShadowUpdateCallback(void *pClient, Method method, RequestAck requestAck, const char *pJsonDocument, void *pUserdata) { - Log_i("recv shadow update response, response ack: %d", requestAck); -} - -static int _setup_connect_init_params(ShadowInitParams* initParams) -{ - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; - -#ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; -#else - initParams->device_secret = sg_devInfo.device_secret; -#endif - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; - - return QCLOUD_RET_SUCCESS; -} - - -int demo_device_shadow() -{ - int rc = QCLOUD_ERR_FAILURE; - - void* shadow_client = NULL; - - //init connection - ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } - - shadow_client = IOT_Shadow_Construct(&init_params); - if (shadow_client == NULL) { - Log_e("shadow client constructed failed."); - return QCLOUD_ERR_FAILURE; - } - - // register delta property - sg_shadow_property.key = "updateCount"; - sg_shadow_property.data = &sg_current_update_count; - sg_shadow_property.type = JINT32; - rc = IOT_Shadow_Register_Property(shadow_client, &sg_shadow_property, OnDeltaCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Shadow_Destroy(shadow_client); - Log_e("register device shadow property failed, err: %d", rc); - return rc; - } - - // do get and sync operation before update - rc = IOT_Shadow_Get_Sync(shadow_client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("get device shadow failed, err: %d", rc); - return rc; - } - - while (IOT_Shadow_IsConnected(shadow_client) || QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT == rc || - QCLOUD_RET_MQTT_RECONNECTED == rc || QCLOUD_RET_SUCCESS == rc) { - - rc = IOT_Shadow_Yield(shadow_client, 200); - - if (QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT == rc) { - HAL_SleepMs(1000); - continue; - } - else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { - Log_e("exit with error: %d", rc); - return rc; - } - - if (sg_delta_arrived) { - rc = IOT_Shadow_Update_Sync(shadow_client, sg_shadow_update_buffer, sg_shadow_update_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - sg_delta_arrived = false; - if (rc == QCLOUD_RET_SUCCESS) - Log_i("shadow update success"); - } - - IOT_Shadow_JSON_ConstructReport(shadow_client, sg_shadow_update_buffer, sg_shadow_update_buffersize, 1, &sg_shadow_property); - rc = IOT_Shadow_Update(shadow_client, sg_shadow_update_buffer, sg_shadow_update_buffersize, OnShadowUpdateCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - sg_current_update_count++; - - // sleep for some time in seconds - HAL_SleepMs(1000); - } - - Log_e("loop exit with error: %d", rc); - - rc = IOT_Shadow_Destroy(shadow_client); - - return rc; -} - -int main() -{ - IOT_Log_Set_Level(eLOG_DEBUG); - - demo_device_shadow(); - - return 0; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_socket_inf.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_socket_inf.h deleted file mode 100644 index ae1aefe7..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_socket_inf.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - - - -#ifndef _AT_SOCKET_INF_H_ -#define _AT_SOCKET_INF_H_ - -#include -#include -#include "utils_list.h" - -#define UNUSED_SOCKET (-1) -#define MAX_AT_SOCKET_NUM (5) -#define AT_SOCKET_SEND_TIMEOUT_MS (1000) -#define AT_SOCKET_RECV_TIMEOUT_MS (1000) -#define IPV4_STR_MAX_LEN (16) - -typedef enum -{ - eNET_TCP = 6, - eNET_UDP = 17, - eNET_DEFAULT = 0xff -}eNetProto; - -typedef enum { - eSOCKET_ALLOCED = 0, - eSOCKET_CONNECTED , - eSOCKET_CLOSED -}eSocketState; - -/* AT receive package list structure */ -typedef struct at_recv_pkt -{ - List list; - size_t bfsz_totle; - size_t bfsz_index; - char *buff; -}at_recv_pkt; - -typedef enum -{ - AT_SOCKET_EVT_RECV = 0, - AT_SOCKET_EVT_CLOSED, -} at_socket_evt_t; - -typedef void (*at_evt_cb_t)(int fd, at_socket_evt_t event, char *buff, size_t bfsz); - -/*at device driver ops, use at_device_op_register register to at socket*/ -typedef struct { - int (*init)(void); - int (*get_local_mac)(char *macbuff, size_t bufflen); - int (*get_local_ip)(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen); - int (*parse_domain)(const char *host_name, char *host_ip, size_t host_ip_len); - int (*connect)(const char *ip, uint16_t port, eNetProto proto); - int (*send)(int fd, const void *buf, size_t len); - int (*recv_timeout)(int fd, void *buf, size_t len, uint32_t timeout); - int (*close)(int fd); - void (*set_event_cb)(at_socket_evt_t event, at_evt_cb_t cb); - char *deviceName; -} at_device_op_t; - -/*at socket context*/ -typedef struct -{ - int fd; /** socket fd */ - List* recvpkt_list; - char remote_ip[IPV4_STR_MAX_LEN]; - uint16_t remote_port; - uint32_t send_timeout_ms; - uint32_t recv_timeout_ms; - void *recv_lock; - at_device_op_t *dev_op; - eNetProto net_type; - eSocketState state; -}at_socket_ctx_t; - - -//at socket api -int at_device_op_register(at_device_op_t *device_op); -int at_socket_init(void); -int at_socket_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len); -int at_socket_get_local_mac(char *macbuff, size_t bufflen); -int at_socket_get_local_ip(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen); -int at_socket_connect(const char *host, uint16_t port, eNetProto eProto); -int at_socket_close(int fd); -int at_socket_send(int fd, const void *buf, size_t len); -int at_socket_recv(int fd, void *buf, size_t len); -#endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_utils.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_utils.h deleted file mode 100644 index 2030c31f..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_utils.h +++ /dev/null @@ -1,49 +0,0 @@ -/* -* Copyright (c) 2019-2021 Tencent Group. All rights reserved. -* License-Identifier: Apache-2.0 -* -* Licensed under the Apache License, Version 2.0 (the "License"); you may -* not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -*/ - -#ifndef _AT_UTILS_H_ -#define _AT_UTILS_H_ - -#include -#include -#include - -#define WIDTH_SIZE 32 - -#ifndef __INT_MAX__ -#define __INT_MAX__ 2147483647 -#endif - -#ifndef INT_MAX -#define INT_MAX (__INT_MAX__) -#endif - -#define AT_CMD_COMMA_MARK ',' -#define AT_CMD_DQUOTES_MARK '"' - -#define __is_print(ch) ((unsigned int)((ch) - ' ') < 127u - ' ') - -int at_vprintfln(const char *format, va_list args); -void at_print_raw_cmd(const char *name, const char *cmd, int size); -const char *at_get_last_cmd(int *cmd_size); -int at_req_parse_args(const char *req_args, const char *req_expr, ...); -int at_sscanf(const char * buf, const char * fmt, va_list args); -void at_strip(char *str, const char patten); -void chr_strip(char *str, const char patten); - -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client.h deleted file mode 100644 index 51bdae06..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client.h +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef IOT_COAP_CLIENT_H_ -#define IOT_COAP_CLIENT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -// #include - -#include "qcloud_iot_export.h" - -#include "coap_client_net.h" - -#include "network_interface.h" -#include "utils_list.h" -#include "utils_timer.h" - -#define ssize_t size_t -#define ENOSPC 1 - -/* COAP protocol version */ -#define COAP_MSG_VER (0x01) - -/* COAP init token */ -#define COAP_MSG_INIT_TOKEN (0x01020304) - -/* Minimal command timeout of CoAP ACK/RESP */ -#define MIN_COMMAND_TIMEOUT (500) - -/* Maximal command timeout of CoAP ACK/RESP */ -#define MAX_COMMAND_TIMEOUT (5000) - -/* Max size of conn Id */ -#define COAP_MAX_CONN_ID_LEN (6) - -/* Max size of Message id */ -#define COAP_MSG_MAX_MSG_ID ((1 << 16) - 1) - -/* Max size of Topic length */ -#define URI_PATH_MAX_LEN (128) - -/* CoAP auth success */ -#define COAP_TRUE (1) - -/* CoAP auth fail */ -#define COAP_FALSE (0) - -/* unique CoAP auth URI */ -#define COAP_AUTH_URI ("txauth9w0BAQsFA") - -/* Max size of token */ -#define COAP_MSG_MAX_TOKEN_LEN (8) - -/* COAP Max code class */ -#define COAP_MSG_MAX_CODE_CLASS (7) - -/* COAP Max code detail */ -#define COAP_MSG_MAX_CODE_DETAIL (31) - -/* Get field of Option num */ -#define COAP_MSG_OPTION_NUM(option) ((option)->option_num) - -/* Get field of Next Option */ -#define COAP_MSG_OP_NEXT(option) ((option)->next) - -/* If COAP msg is empty */ -#define COAP_MSG_IS_EMPTY(message) (((message)->code_class == 0) && ((message)->code_detail == 0)) - -/* If COAP msg is empty ACK */ -#define COAP_MSG_IS_EMPTY_ACK(message) (((message)->code_class == 2) && ((message)->code_detail == 3)) - -/* If COAP msg is RESP */ -#define COAP_MSG_IS_EMPTY_RSP(message) (((message)->code_class == 2) && ((message)->code_detail == 5)) - -/** - * @brief COAP msg type - */ -typedef enum { - COAP_MSG_REQ = 0, - COAP_MSG_SUCCESS = 2, - COAP_MSG_CLIENT_ERR = 4, - COAP_MSG_SERVER_ERR = 5, - COAP_MSG_SDKINTERNAL_ERR = 6, -} CoAPMessageClass; - -/** - * @brief COAP msg type - */ -typedef enum { - COAP_MSG_GET = 1, - COAP_MSG_POST = 2, - COAP_MSG_PUT = 3, - COAP_MSG_DELETE =4 -} CoAPRequestMethod; - -typedef enum { - /* CoAP Success Response code detail */ - COAP_MSG_CODE_201_CREATED = 01, /* Mapping to CoAP codeClass.codeDetail 2.01 */ - COAP_MSG_CODE_202_DELETED = 02, /* Mapping to CoAP codeClass.codeDetail 2.02 */ - COAP_MSG_CODE_203_VALID = 03, /* Mapping to CoAP codeClass.codeDetail 2.03 */ - COAP_MSG_CODE_204_CHANGED = 04, /* Mapping to CoAP codeClass.codeDetail 2.04 */ - COAP_MSG_CODE_205_CONTENT = 05, /* Mapping to CoAP codeClass.codeDetail 2.05 */ - COAP_MSG_CODE_231_CONTINUE = 31, /* Mapping to CoAP codeClass.codeDetail 2.31 */ - - /* CoAP Client Error Response code detail */ - COAP_MSG_CODE_400_BAD_REQUEST = 00, /* Mapping to CoAP codeClass.codeDetail 4.00 */ - COAP_MSG_CODE_401_UNAUTHORIZED = 01, /* Mapping to CoAP codeClass.codeDetail 4.01 */ - COAP_MSG_CODE_402_BAD_OPTION = 02, /* Mapping to CoAP codeClass.codeDetail 4.02 */ - COAP_MSG_CODE_403_FORBIDDEN = 03, /* Mapping to CoAP codeClass.codeDetail 4.03 */ - COAP_MSG_CODE_404_NOT_FOUND = 04, /* Mapping to CoAP codeClass.codeDetail 4.04 */ - COAP_MSG_CODE_405_METHOD_NOT_ALLOWED = 05, /* Mapping to CoAP codeClass.codeDetail 4.05 */ - COAP_MSG_CODE_406_NOT_ACCEPTABLE = 06, /* Mapping to CoAP codeClass.codeDetail 4.06 */ - COAP_MSG_CODE_408_REQUEST_ENTITY_INCOMPLETE = 8, /* Mapping to CoAP codeClass.codeDetail 4.08 */ - COAP_MSG_CODE_412_PRECONDITION_FAILED = 12, /* Mapping to CoAP codeClass.codeDetail 4.12 */ - COAP_MSG_CODE_413_REQUEST_ENTITY_TOO_LARGE = 13, /* Mapping to CoAP codeClass.codeDetail 4.13 */ - COAP_MSG_CODE_415_UNSUPPORTED_CONTENT_FORMAT = 15, /* Mapping to CoAP codeClass.codeDetail 4.15 */ - - /* CoAP Server Error Response code detail */ - COAP_MSG_CODE_500_INTERNAL_SERVER_ERROR = 00, /* Mapping to CoAP codeClass.codeDetail 5.00 */ - COAP_MSG_CODE_501_NOT_IMPLEMENTED = 01, /* Mapping to CoAP codeClass.codeDetail 5.01 */ - COAP_MSG_CODE_502_BAD_GATEWAY = 02, /* Mapping to CoAP codeClass.codeDetail 5.02 */ - COAP_MSG_CODE_503_SERVICE_UNAVAILABLE = 03, /* Mapping to CoAP codeClass.codeDetail 5.03 */ - COAP_MSG_CODE_504_GATEWAY_TIMEOUT = 04, /* Mapping to CoAP codeClass.codeDetail 5.04 */ - COAP_MSG_CODE_505_PROXYING_NOT_SUPPORTED = 05, /* Mapping to CoAP codeClass.codeDetail 5.05 */ - - COAP_MSG_CODE_600_TIMEOUT = 00, /* Mapping to self define CoAP codeClass.codeDetail 6.00 */ -} CoAPRespCodeDetail; - -/** - * @brief Option number enumeration - */ -typedef enum { - COAP_MSG_IF_MATCH = 1, // If-Match option number - COAP_MSG_URI_HOST = 3, // URI-Host option number - COAP_MSG_ETAG = 4, // Entity-Tag option number - COAP_MSG_IF_NONE_MATCH = 5, // If-None-Match option number - COAP_MSG_URI_PORT = 7, // URI-Port option number - COAP_MSG_LOCATION_PATH = 8, // Location-Path option number - COAP_MSG_URI_PATH = 11, // URI-Path option number - COAP_MSG_CONTENT_FORMAT = 12, // Content-Format option number - COAP_MSG_MAX_AGE = 14, // Max-Age option number - COAP_MSG_URI_QUERY = 15, // URI-Query option number - COAP_MSG_ACCEPT = 17, // Accept option number - COAP_MSG_LOCATION_QUERY = 20, // Location-Query option number - COAP_MSG_BLOCK2 = 23, // Block2 option number - COAP_MSG_BLOCK1 = 27, // Block1 option number - COAP_MSG_SIZE2 = 28, // Size2 option number - COAP_MSG_PROXY_URI = 35, // Proxy-URI option number - COAP_MSG_PROXY_SCHEME = 39, // Proxy-Scheme option number - COAP_MSG_SIZE1 = 60, // Size1 option number - - COAP_MSG_AUTH_TOKEN = 61, // auth token option number - COAP_MSG_NEED_RESP = 62, // CoAP need content response -} CoAPMsgOptionNum; - -/* CoAP QCloud IoT Client structure */ -typedef struct Client { - char is_authed; // CoAP Client auth or not - char conn_id[COAP_MAX_CONN_ID_LEN]; // conn id for a CoAP connection - - unsigned int message_token; // msg token - - char *auth_token; // auth token - int auth_token_len; - - uint16_t next_msg_id; // COAP msg id - - size_t send_buf_size; // size of write buffer - size_t read_buf_size; // size of read buffer - - unsigned char send_buf[COAP_SENDMSG_MAX_BUFLEN]; - unsigned char recv_buf[COAP_RECVMSG_MAX_BUFLEN]; - - void *lock_send_buf; // mutex/lock for write buffer - void *lock_list_wait_ack; // mutex/lock for wait ack list - - Network network_stack; // MQTT network stack - - uint32_t command_timeout_ms; // CoAP command timeout, unit:ms - - List* message_list; // msg list - - unsigned char max_retry_count; // Max retry count - - CoAPEventHandler event_handle; // event callback - -} CoAPClient; - -/** - * @brief CoAP Option - */ -typedef struct coap_msg_op -{ - unsigned short option_num; // Option number - unsigned val_len; // Option length - char *val; // Pointer to a buffer containing the option value - struct coap_msg_op *next; // Pointer to the next option structure in the list -} CoAPMsgOption; - -/** - * @brief CoAP Option list - */ -typedef struct -{ - CoAPMsgOption *first; // Pointer to the first option structure in the list - CoAPMsgOption *last; // Pointer to the last option structure in the list -} CoAPMsgOptionList; - -/** - * @brief CoAP node state - */ -typedef enum { - COAP_NODE_STATE_NORMANL = 0, - COAP_NODE_STATE_INVALID, -} CoAPNodeState; - -typedef struct { - CoAPNodeState node_state; - void *user_context; - unsigned short msg_id; - char acked; - unsigned char token_len; - unsigned char token[COAP_MSG_MAX_TOKEN_LEN]; - unsigned char retrans_count; - Timer start_time; - unsigned char *message; - unsigned int msglen; - OnRespCallback handler; -} CoAPMsgSendInfo; - -/** - * @brief COAP msg type - */ -typedef enum { - COAP_MSG_CON = 0x0, /**< msg need to wait for ACK */ - COAP_MSG_NON = 0x1, /**< msg no need to wait for ACK */ - COAP_MSG_ACK = 0x2, /**< msg ACK */ - COAP_MSG_RST = 0x3 /**< msg Reset */ -} CoAPMsgType; - -/** - * @brief CoAP message structure - */ -typedef struct -{ - unsigned version; // CoAP protocol version - CoAPMsgType type; // msg type - - unsigned code_class; // Code class - unsigned code_detail; // Code detail - - unsigned short msg_id; // msg id - - char *pay_load; // msg payload - size_t pay_load_len; // length of payload - - char token[COAP_MSG_MAX_TOKEN_LEN]; // msg token - unsigned token_len; // length of token - - CoAPMsgOptionList op_list; // Option list - - OnRespCallback handler; // CoAP Response msg callback - void *user_context; // user context -} CoAPMessage; - -#define DEFAULT_COAP_MESSAGE {COAP_MSG_VER, COAP_MSG_CON, COAP_MSG_REQ, COAP_MSG_POST, 0, NULL, 0, {0}, 0, {0}, NULL, NULL} - -/** - * @brief Init CoAPClient - * - * @param pClient reference to CoAP client - * @param pParams CoAP init parameters - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int qcloud_iot_coap_init(CoAPClient *pClient, CoAPInitParams *pParams); - -/** - * @brief Generate next CoAPMessage msg Id - * - * @param pClient reference to CoAP client - * @return msg Id - */ -uint16_t get_next_coap_msg_id(CoAPClient *pClient); - -/** - * @brief Generate next CoAPMessage msg token - * - * @param pClient reference to CoAP client - * @param tokenData msg token - * @return token length - */ -unsigned int get_coap_message_token(CoAPClient *client, char *tokenData); - -/** - * @brief set message type - * - * @param message CoAP msg - * @param - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_type_set(CoAPMessage *message, unsigned type); - -/** - * @brief set message code - * - * @param message CoAP msg - * @param code_class CoAPMessageClass - * @param code_detail - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_code_set(CoAPMessage *message, unsigned code_class, unsigned code_detail); - -/** - * @brief set message Id - * - * @param message CoAP msg - * @param msg_id - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_id_set(CoAPMessage *message, unsigned msg_id); - -/** - * @brief set msg token - * - * @param message CoAP msg - * @param buf token string - * @param len token length - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_token_set(CoAPMessage *message, char *buf, size_t len); - -/** - * @brief set msg payload - * - * @param message CoAP msg - * @param buf msg payload buffer - * @param len length of payload - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_payload_set(CoAPMessage *message, char *buf, size_t len); - -/** - * @brief add msg option - * - * @param message CoAP msg - * @param num option number - * @param len option length - * @param val option string - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_option_add(CoAPMessage *message, unsigned num, unsigned len, const char *val); - -/** - * @brief set msg callback - * - * @param message CoAP msg - * @param callback - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_callback_set(CoAPMessage *message, OnRespCallback callback); - -/** - * @brief set user context - * - * @param message CoAP msg - * @param userContext - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_context_set(CoAPMessage *message, void *userContext); - -/** - * @brief create CoAPMsgOption from option number/len/val - * - * @param num CoAP option number - * @param len CoAP option string len - * @param val CoAP option string value - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -CoAPMsgOption* qcloud_iot_coap_option_init(unsigned num, unsigned len, const char *val); - -/** - * @brief destroy CoAPMessage - * - * @param[in,out] message - */ -void coap_message_destroy(CoAPMessage *message); - -/** - * @brief Read and handle CoAP msg - * - * @param pClient CoAPClient - * @param timeout_ms timeout value in millisecond - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_message_cycle(CoAPClient *client, uint32_t timeout_ms); - -/** - * @brief Send CoAP msg - * - * @param client CoAPClient - * @param message msg to send - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -ssize_t coap_message_send(CoAPClient *client, CoAPMessage *message); - -/** - * @brief Read CoAP msg - * - * @param client CoAPClient - * @param timeout_ms timeout value in millisecond - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -ssize_t coap_message_recv(CoAPClient *client, uint32_t timeout_ms); - -/** - * @brief do CoAPClient auth - * - * @param client CoAPClient - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int coap_client_auth(CoAPClient *client); - -/** - * @brief Parse a message - * - * @param[in,out] message Pointer to a message structure - * @param[in] buf Pointer to a buffer containing the message - * @param[in] len Length of the buffer - * - * @returns Operation status - * @retval 0 Success - * @retval <0 Error - */ -ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len); - -/** - * @brief Format a message - * - * @param[in] message Pointer to a message structure - * @param[out] buf Pointer to a buffer to contain the formatted message - * @param[in] len Length of the buffer - * - * @returns Length of the formatted message or error code - * @retval >0 Length of the formatted message - * @retval <0 Error - */ -ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len); - - -void coap_msg_dump(CoAPMessage* msg); - -#ifdef __cplusplus -} -#endif - - -#endif /* IOT_COAP_CLIENT_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/gateway_common.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/gateway_common.h deleted file mode 100644 index 4cf089cd..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/gateway_common.h +++ /dev/null @@ -1,86 +0,0 @@ -#ifndef IOT_GATEWAY_COMMON_H_ -#define IOT_GATEWAY_COMMON_H_ - -#include "qcloud_iot_export.h" - -#define GATEWAY_PAYLOAD_BUFFER_LEN 1024 -#define GATEWAY_RECEIVE_BUFFER_LEN 1024 -#define GATEWAY_LOOP_MAX_COUNT 100 - - -/* The format of operation of gateway topic */ -#define GATEWAY_TOPIC_OPERATION_FMT "$gateway/operation/%s/%s" - -/* The format of operation result of gateway topic */ -#define GATEWAY_TOPIC_OPERATION_RESULT_FMT "$gateway/operation/result/%s/%s" - -/* The format of gateway client id */ -#define GATEWAY_CLIENT_ID_FMT "%s/%s" - -/* The format of operation result of gateway topic */ -#define GATEWAY_PAYLOAD_STATUS_FMT "{\"type\":\"%s\",\"payload\":{\"devices\":[{\"product_id\":\"%s\",\"device_name\":\"%s\"}]}}" - - - -/* Subdevice seesion status */ -typedef enum _SubdevSessionStatus { - /* Initial */ - SUBDEV_SEESION_STATUS_INIT, - - /* Online */ - SUBDEV_SEESION_STATUS_ONLINE, - - /* Offline */ - SUBDEV_SEESION_STATUS_OFFLINE, - - /* Maximum number of seesion status type */ - SUBDEV_SEESION_STATUS_MAX -}SubdevSessionStatus; - -/* The structure of subdevice session */ -typedef struct _SubdevSession { - char product_id[MAX_SIZE_OF_PRODUCT_ID+1]; - char device_name[MAX_SIZE_OF_DEVICE_NAME+1]; - SubdevSessionStatus session_status; - struct _SubdevSession *next; -} SubdevSession; - - -/* The structure of common reply data */ -typedef struct _ReplyData{ - int32_t result; - char client_id[MAX_SIZE_OF_CLIENT_ID+1]; -}ReplyData; - - -/* The structure of gateway data */ -typedef struct _GatewayData { - int32_t sync_status; - ReplyData online; - ReplyData offline; -} GatewayData; - - -/* The structure of gateway context */ -typedef struct _Gateway { - void *mqtt; - SubdevSession *session_list; - GatewayData gateway_data; - MQTTEventHandler event_handle; - int is_construct; -} Gateway; - - -SubdevSession* subdev_add_session(Gateway *gateway, char *product_id, char *device_name); - -SubdevSession* subdev_find_session(Gateway *gateway, char *product_id, char *device_name); - -int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name); - -int gateway_subscribe_unsubscribe_topic(Gateway *gateway, char *topic_filter, SubscribeParams *params, int is_subscribe); - -int gateway_subscribe_unsubscribe_default(Gateway *gateway, GatewayParam* param); - -int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, int32_t *result); - -#endif /* IOT_GATEWAY_COMMON_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/network_interface.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/network_interface.h deleted file mode 100644 index 84e9368b..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/network_interface.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef _NETWORK_INTERFACE_H_ -#define _NETWORK_INTERFACE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -#include "qcloud_iot_import.h" - -/* -* Type of network interface -*/ - -typedef enum { - NETWORK_TCP = 0, - NETWORK_UDP = 1, - NETWORK_TLS = 2, - NETWORK_DTLS = 3 -} NETWORK_TYPE; - -/** - * @brief Define structure for network stack - */ -typedef struct Network Network; - -/** - * @brief Define structure for network stack - * - * Network init/connect/read/write/disconnect/state - */ -struct Network { - int (*init)(Network *); - - int (*connect)(Network *); - - int (*read)(Network *, unsigned char *, size_t, uint32_t, size_t *); - - int (*write)(Network *, unsigned char *, size_t, uint32_t, size_t *); - - void (*disconnect)(Network *); - - int (*is_connected)(Network *); - - // connetion handle: - // for non-AT: 0 = not connected, non-zero = connected - // for AT: 0 = valid connection, MAX_UNSINGED_INT = invalid - uintptr_t handle; - -#ifndef AUTH_WITH_NOTLS - SSLConnectParams ssl_connect_params; -#endif - - const char *host; // server address - int port; // server port - NETWORK_TYPE type; -}; - -/* - * Init network stack - */ -int network_init(Network *pNetwork); - -/* return the handle */ -int is_network_connected(Network *pNetwork); - -/* network stack API */ -#ifdef AT_TCP_ENABLED - -#define AT_NO_CONNECTED_FD 0xffffffff - -int network_at_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); -int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); -void network_at_tcp_disconnect(Network *pNetwork); -int network_at_tcp_connect(Network *pNetwork); -int network_at_tcp_init(Network *pNetwork); - -#else -int network_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); -int network_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); -void network_tcp_disconnect(Network *pNetwork); -int network_tcp_connect(Network *pNetwork); -int network_tcp_init(Network *pNetwork); -#endif - -#ifndef AUTH_WITH_NOTLS -int network_tls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); -int network_tls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); -void network_tls_disconnect(Network *pNetwork); -int network_tls_connect(Network *pNetwork); -int network_tls_init(Network *pNetwork); -#endif - -#ifdef COAP_COMM_ENABLED -#ifdef AUTH_WITH_NOTLS -int network_udp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); -int network_udp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); -void network_udp_disconnect(Network *pNetwork); -int network_udp_connect(Network *pNetwork); -int network_udp_init(Network *pNetwork); -#else -int network_dtls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); -int network_dtls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); -void network_dtls_disconnect(Network *pNetwork); -int network_dtls_connect(Network *pNetwork); -int network_dtls_init(Network *pNetwork); -#endif -#endif - -#ifdef __cplusplus -} -#endif -#endif /* _NETWORK_INTERFACE_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h deleted file mode 100644 index 57007066..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef QCLOUD_IOT_COMMON_H_ -#define QCLOUD_IOT_COMMON_H_ - - - -/* IoT C-SDK APPID */ -#define QCLOUD_IOT_DEVICE_SDK_APPID "21010406" - -/* MQTT server domain */ -#define QCLOUD_IOT_MQTT_DIRECT_DOMAIN "iotcloud.tencentdevices.com" - -#define MQTT_SERVER_PORT_TLS 8883 -#define MQTT_SERVER_PORT_NOTLS 1883 - -/* CoAP server domain */ -#define QCLOUD_IOT_COAP_DEIRECT_DOMAIN "iotcloud.tencentdevices.com" - -#define COAP_SERVER_PORT 5684 - -/* server domain for dynamic registering device */ -#define DYN_REG_SERVER_URL "gateway.tencentdevices.com" -#define DYN_REG_SERVER_PORT 80 -#define DYN_REG_SERVER_PORT_TLS 443 - -/* URL for doing log upload */ -#define LOG_UPLOAD_SERVER_URL "http://devicelog.iot.cloud.tencent.com/cgi-bin/report-log" -#define LOG_UPLOAD_SERVER_DOMAIN "devicelog.iot.cloud.tencent.com" -#define LOG_UPLOAD_SERVER_PORT 80 - -/* Max size of a host name */ -#define HOST_STR_LENGTH 64 - -/* Max size of base64 encoded PSK = 64, after decode: 64/4*3 = 48*/ -#define DECODE_PSK_LENGTH 48 - - - -#endif /* QCLOUD_IOT_COMMON_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_param_check.h b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_param_check.h deleted file mode 100644 index 97e8f232..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_param_check.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifndef _UTILS_PARAM_CHECK_H_ -#define _UTILS_PARAM_CHECK_H_ - -#if defined(__cplusplus) -extern "C" { -#endif - -#include "qcloud_iot_export_log.h" - -#define NUMBERIC_SANITY_CHECK(num, err) \ - do { \ - if (0 == (num)) { \ - Log_e("Invalid argument, numeric 0"); \ - return (err); \ - } \ - } while(0) - -#define NUMBERIC_SANITY_CHECK_RTN(num) \ - do { \ - if (0 == (num)) { \ - Log_e("Invalid argument, numeric 0"); \ - return; \ - } \ - } while(0) - -#define POINTER_SANITY_CHECK(ptr, err) \ - do { \ - if (NULL == (ptr)) { \ - Log_e("Invalid argument, %s = %p", #ptr, ptr); \ - return (err); \ - } \ - } while(0) - -#define POINTER_SANITY_CHECK_RTN(ptr) \ - do { \ - if (NULL == (ptr)) { \ - Log_e("Invalid argument, %s = %p", #ptr, ptr); \ - return; \ - } \ - } while(0) - -#define STRING_PTR_SANITY_CHECK(ptr, err) \ - do { \ - if (NULL == (ptr)) { \ - Log_e("Invalid argument, %s = %p", #ptr, (ptr)); \ - return (err); \ - } \ - if (0 == strlen((ptr))) { \ - Log_e("Invalid argument, %s = '%s'", #ptr, (ptr)); \ - return (err); \ - } \ - } while(0) - -#define STRING_PTR_SANITY_CHECK_RTN(ptr) \ - do { \ - if (NULL == (ptr)) { \ - Log_e("Invalid argument, %s = %p", #ptr, (ptr)); \ - return; \ - } \ - if (0 == strlen((ptr))) { \ - Log_e("Invalid argument, %s = '%s'", #ptr, (ptr)); \ - return; \ - } \ - } while(0) - -#if defined(__cplusplus) -} -#endif - -#endif /* _UTILS_PARAM_CHECK_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_client.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_client.c deleted file mode 100644 index caea1cd1..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_client.c +++ /dev/null @@ -1,967 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#include -#include -#include -#include - -#include "utils_param_check.h" -#include "utils_timer.h" -#include "at_client.h" -#include "at_utils.h" - -#define AT_RESP_END_OK "OK" -#define AT_RESP_END_ERROR "ERROR" -#define AT_RESP_END_FAIL "FAIL" -#define AT_END_CR_LF "\r\n" - -sRingbuff g_ring_buff; -static at_client sg_at_client; -static uint32_t sg_flags = 0; - -/*this function can be called only by at_uart_isr, just push the data to the at_client ringbuffer.*/ -void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len) -{ - (void)ring_buff_push_data(&g_ring_buff, pdata, len); -} - -/** - * Create response object. - * - * @param buf_size the maximum response buffer size - * @param line_num the number of setting response lines - * = 0: the response data will auto return when received 'OK' or 'ERROR' - * != 0: the response data will return when received setting lines number data - * @param timeout the maximum response time - * - * @return != NULL: response object - * = NULL: no memory - */ -at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t timeout) -{ - at_response_t resp = NULL; - - resp = (at_response_t) HAL_Malloc(sizeof(at_response)); - if (resp == NULL) - { - Log_e("AT create response object failed! No memory for response object!"); - return NULL; - } - - resp->buf = (char *) HAL_Malloc(buf_size); - if (resp->buf == NULL) - { - Log_e("AT create response object failed! No memory for response buffer!"); - HAL_Free(resp); - return NULL; - } - - resp->buf_size = buf_size; - resp->line_num = line_num; - resp->line_counts = 0; - resp->timeout = timeout; - - return resp; -} - -/** - * Delete and free response object. - * - * @param resp response object - */ -void at_delete_resp(at_response_t resp) -{ - if (resp && resp->buf) - { - HAL_Free(resp->buf); - } - - if (resp) - { - HAL_Free(resp); - resp = NULL; - } -} - -void at_delayms(uint32_t delayms) -{ -#ifdef AT_OS_USED - HAL_SleepMs(delayms); -#else - HAL_DelayMs(delayms); -#endif - -} - -void at_setFlag(uint32_t flag) -{ - sg_flags |= flag&0xffffffff; -} - -void at_clearFlag(uint32_t flag) -{ - sg_flags &= (~flag)&0xffffffff; -} - -uint32_t at_getFlag(void) -{ - return sg_flags; -} - -bool at_waitFlag(uint32_t flag, uint32_t timeout) -{ - Timer timer; - bool Ret = false; - - countdown_ms(&timer, timeout); - do{ - if(flag == (at_getFlag()&flag)){ - Ret = true; - break; - } - at_delayms(1); - }while(!expired(&timer)); - - return Ret; -} - -/** - * Get one line AT response buffer by line number. - * - * @param resp response object - * @param resp_line line number, start from '1' - * - * @return != NULL: response line buffer - * = NULL: input response line error - */ -const char *at_resp_get_line(at_response_t resp, uint32_t resp_line) -{ - char *resp_buf = resp->buf; - char *resp_line_buf = NULL; - int line_num = 1; - - POINTER_SANITY_CHECK(resp, NULL); - - if (resp_line > resp->line_counts || resp_line <= 0) - { - Log_e("AT response get line failed! Input response line(%d) error!", resp_line); - return NULL; - } - - for (line_num = 1; line_num <= resp->line_counts; line_num++) - { - if (resp_line == line_num) - { - resp_line_buf = resp_buf; - - return resp_line_buf; - } - - resp_buf += strlen(resp_buf) + 1; - } - - return NULL; -} - -/** - * Get one line AT response buffer by keyword - * - * @param resp response object - * @param keyword query keyword - * - * @return != NULL: response line buffer - * = NULL: no matching data - */ -const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword) -{ - char *resp_buf = resp->buf; - char *resp_line_buf = NULL; - int line_num = 1; - - POINTER_SANITY_CHECK(resp, NULL); - POINTER_SANITY_CHECK(keyword, NULL); - - for (line_num = 1; line_num <= resp->line_counts; line_num++) - { - if (strstr(resp_buf, keyword)) - { - resp_line_buf = resp_buf; - - return resp_line_buf; - } - - resp_buf += strlen(resp_buf) + 1; - } - - return NULL; -} - -/** - * Get and parse AT response buffer arguments by line number. - * - * @param resp response object - * @param resp_line line number, start from '1' - * @param resp_expr response buffer expression - * - * @return -1 : input response line number error or get line buffer error - * 0 : parsed without match - * >0 : the number of arguments successfully parsed - */ -int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char *resp_expr, ...) -{ - va_list args; - int resp_args_num = 0; - const char *resp_line_buf = NULL; - - - POINTER_SANITY_CHECK(resp, -1); - POINTER_SANITY_CHECK(resp_expr, -1); - if ((resp_line_buf = at_resp_get_line(resp, resp_line)) == NULL) - { - return -1; - } - - va_start(args, resp_expr); - - resp_args_num = vsscanf(resp_line_buf, resp_expr, args); - - va_end(args); - - return resp_args_num; -} - -/** - * Get and parse AT response buffer arguments by keyword. - * - * @param resp response object - * @param keyword query keyword - * @param resp_expr response buffer expression - * - * @return -1 : input keyword error or get line buffer error - * 0 : parsed without match - * >0 : the number of arguments successfully parsed - */ -int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...) -{ - va_list args; - int resp_args_num = 0; - const char *resp_line_buf = NULL; - - - POINTER_SANITY_CHECK(resp, -1); - POINTER_SANITY_CHECK(resp_expr, -1); - if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == NULL) - { - return -1; - } - - va_start(args, resp_expr); - - resp_args_num = vsscanf(resp_line_buf, resp_expr, args); - - va_end(args); - - return resp_args_num; -} - -/** - * Send commands to AT server and wait response. - * - * @param client current AT client object - * @param resp AT response object, using NULL when you don't care response - * @param cmd_expr AT commands expression - * - * @return 0 : success - * -1 : response status error - * -2 : wait timeout - */ -int at_obj_exec_cmd(at_response_t resp, const char *cmd_expr, ...) -{ - POINTER_SANITY_CHECK(cmd_expr, QCLOUD_ERR_INVAL); - - va_list args; - int cmd_size = 0; - int result = QCLOUD_RET_SUCCESS; - const char *cmd = NULL; - at_client_t client = at_client_get(); - - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return QCLOUD_ERR_FAILURE; - } - - HAL_MutexLock(client->lock); - resp->line_counts = 0; - client->resp_status = AT_RESP_OK; - client->resp = resp; - - va_start(args, cmd_expr); - at_vprintfln(cmd_expr, args); - va_end(args); - - if (resp != NULL) - { -#ifndef AT_OS_USED - client->resp_status = AT_RESP_TIMEOUT; - at_client_yeild(NULL, resp->timeout); - if (client->resp_status != AT_RESP_OK) - { - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } -#else - if(HAL_SemaphoreWait(client->resp_sem, resp->timeout) < 0){ - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } - - if (client->resp_status != AT_RESP_OK) - { - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } -#endif - } - -__exit: - client->resp = NULL; - HAL_MutexUnlock(client->lock); - - return result; -} - -/** - * Send data to AT server, send data don't have end sign(eg: \r\n). - * - * @param client current AT client object - * @param buf send data buffer - * @param size send fixed data size - * @param timeout timeout for send - * - * @return >0: send data size - * =0: send failed - */ -int at_client_send(at_client_t client, const char *buf, int size, uint32_t timeout) -{ - POINTER_SANITY_CHECK(buf, 0); - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return 0; - } - -#ifdef AT_DEBUG - at_print_raw_cmd("send", buf, size); -#endif - - return HAL_AT_Uart_Send((void *)buf, size); -} - - -static int at_client_getchar(at_client_t client, char *pch, uint32_t timeout) -{ - int ret = QCLOUD_RET_SUCCESS; - Timer timer; - - countdown_ms(&timer, timeout); - do - { - -#ifndef AT_UART_RECV_IRQ - if(0 == HAL_AT_Uart_Recv((void *)pch, 1, NULL, timeout)) - { - continue; - } -#else - if(0 == ring_buff_pop_data(client->pRingBuff, (uint8_t *)pch, 1)) //push data to ringbuff @ AT_UART_IRQHandler - { - continue; - } -#endif - else - { - break; - } - } while (!expired(&timer)); - - if(expired(&timer)) - { - ret = QCLOUD_ERR_FAILURE; - } - - return ret; -} - -/** - * AT client receive fixed-length data. - * - * @param client current AT client object - * @param buf receive data buffer - * @param size receive fixed data size - * @param timeout receive data timeout (ms) - * - * @note this function can only be used in execution function of URC data - * - * @return >0: receive data size - * =0: receive failed - */ -int at_client_obj_recv(char *buf, int size, int timeout) -{ - int read_idx = 0; - int result = QCLOUD_RET_SUCCESS; - char ch; - - POINTER_SANITY_CHECK(buf, 0); - at_client_t client = at_client_get(); - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return 0; - } - - while (1) - { - if (read_idx < size) - { - result = at_client_getchar(client, &ch, timeout); - if (result != QCLOUD_RET_SUCCESS) - { - Log_e("AT Client receive failed, uart device get data error(%d)", result); - return 0; - } - - buf[read_idx++] = ch; - } - else - { - break; - } - } - -#ifdef AT_DEBUG - at_print_raw_cmd("urc_recv", buf, size); -#endif - - return read_idx; -} - -/** - * AT client set end sign. - * - * @param client current AT client object - * @param ch the end sign, can not be used when it is '\0' - */ -void at_set_end_sign(char ch) -{ - at_client_t client = at_client_get(); - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return; - } - - client->end_sign = ch; -} - -/** - * set URC(Unsolicited Result Code) table - * - * @param client current AT client object - * @param table URC table - * @param size table size - */ -void at_set_urc_table(at_client_t client, const at_urc_t urc_table, uint32_t table_sz) -{ - int idx; - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return; - } - - for (idx = 0; idx < table_sz; idx++) - { - POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_prefix); - POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_suffix); - } - - client->urc_table = urc_table; - client->urc_table_size = table_sz; -} - -at_client_t at_client_get(void) -{ - return &sg_at_client; -} - -static const at_urc *get_urc_obj(at_client_t client) -{ - int i, prefix_len, suffix_len; - int buf_sz; - char *buffer = NULL; - - if (client->urc_table == NULL) - { - return NULL; - } - - buffer = client->recv_buffer; - buf_sz = client->cur_recv_len; - - for (i = 0; i < client->urc_table_size; i++) - { - prefix_len = strlen(client->urc_table[i].cmd_prefix); - suffix_len = strlen(client->urc_table[i].cmd_suffix); - if (buf_sz < prefix_len + suffix_len) - { - continue; - } - if ((prefix_len ? !strncmp(buffer, client->urc_table[i].cmd_prefix, prefix_len) : 1) - && (suffix_len ? !strncmp(buffer + buf_sz - suffix_len, client->urc_table[i].cmd_suffix, suffix_len) : 1)) - { - //Log_d("matched:%s", client->urc_table[i].cmd_prefix); - return &client->urc_table[i]; - } - } - - return NULL; -} - -static int at_recv_readline(at_client_t client) -{ - int read_len = 0; - char ch = 0, last_ch = 0; - bool is_full = false; - int ret; - - memset(client->recv_buffer, 0x00, client->recv_bufsz); - client->cur_recv_len = 0; - - while (1) - { - ret = at_client_getchar(client, &ch, GET_CHAR_TIMEOUT_MS); - - if(QCLOUD_RET_SUCCESS != ret) - { - return -1; - } - - if (read_len < client->recv_bufsz) - { - client->recv_buffer[read_len++] = ch; - client->cur_recv_len = read_len; - } - else - { - is_full = true; - } - - /* is newline or URC data */ - if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign) || get_urc_obj(client)) - { - - if (is_full) - { - Log_e("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); - memset(client->recv_buffer, 0x00, client->recv_bufsz); - client->cur_recv_len = 0; - ring_buff_flush(client->pRingBuff); - return -1; - } - break; - } - last_ch = ch; - } - -#ifdef AT_DEBUG - at_print_raw_cmd("recvline", client->recv_buffer, read_len); -#endif - - return read_len; -} - - -#ifdef AT_OS_USED -static void *client_parser(void *userContex) -{ - int resp_buf_len = 0; - const at_urc *urc; - int line_counts = 0; - at_client_t client = at_client_get(); - - Log_d("client_parser start..."); - - while(1) - { - if (at_recv_readline(client) > 0) - { - -#ifdef AT_DEBUG - const char *cmd = NULL; - int cmdsize = 0; - cmd = at_get_last_cmd(&cmdsize); - Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); -#endif - if ((urc = get_urc_obj(client)) != NULL) - { - /* current receive is request, try to execute related operations */ - if (urc->func != NULL) - { - urc->func(client->recv_buffer, client->cur_recv_len); - } - - } - else if (client->resp != NULL) - { - if(client->end_sign != 0) // handle endsign - { - if(client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) - { - continue; - } - else - { - goto exit; - } - } - - /* current receive is response */ - client->recv_buffer[client->cur_recv_len - 1] = '\0'; - if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) - { - /* copy response lines, separated by '\0' */ - memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); - resp_buf_len += client->cur_recv_len; - - line_counts++; - } - else - { - client->resp_status = AT_RESP_BUFF_FULL; - Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); - } - /* check response result */ - if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 - && client->resp->line_num == 0) - { - /* get the end data by response result, return response state END_OK. */ - client->resp_status = AT_RESP_OK; - } - else if (strstr(client->recv_buffer, AT_RESP_END_ERROR) - || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) - { - client->resp_status = AT_RESP_ERROR; - } - else if (line_counts == client->resp->line_num && client->resp->line_num) - { - /* get the end data by response line, return response state END_OK.*/ - client->resp_status = AT_RESP_OK; - } - else - { - continue; - } -exit: - client->resp->line_counts = line_counts; - client->resp = NULL; - resp_buf_len = 0; - line_counts = 0; - HAL_SemaphorePost(client->resp_sem); - } - else - { -// Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); - } - } - else - { - //Log_d("read no new line"); - } - - } - return NULL; -} -#else -void at_client_yeild(at_urc *expect_urc, uint32_t timeout) -{ - int resp_buf_len = 0; - const at_urc *urc; - int line_counts = 0; - int prefix_len; - int suffix_len; - Timer timer; - at_client_t client = at_client_get(); - - Log_d("Entry..."); - countdown_ms(&timer, timeout); - do - { - if (at_recv_readline(client) > 0) - { -#ifdef AT_DEBUG - const char *cmd = NULL; - int cmdsize = 0; - cmd = at_get_last_cmd(&cmdsize); - Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); -#endif - if ((urc = get_urc_obj(client)) != NULL) - { - /* current receive is request, try to execute related operations */ - if (urc->func != NULL) - { - urc->func(client->recv_buffer, client->cur_recv_len); - } - - /*expect urc matched then break*/ - if(expect_urc != NULL) - { - prefix_len = strlen(expect_urc->cmd_prefix); - suffix_len = strlen(expect_urc->cmd_suffix); - if ((prefix_len ? !strncmp(urc->cmd_prefix, expect_urc->cmd_prefix, prefix_len) : 1) - && (suffix_len ? !strncmp(urc->cmd_suffix, expect_urc->cmd_suffix, suffix_len) : 1)){ - client->resp_status = AT_RESP_OK; - break; - } - } - } - else if (client->resp != NULL) - { - if(client->end_sign != 0) // handle endsign - { - if(client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) - { - continue; - } - else - { - client->resp_status = AT_RESP_OK; - client->resp->line_counts = line_counts; - client->resp = NULL; - //client->resp_notice = true; - resp_buf_len = 0; - line_counts = 0; - break; - } - } - - /* current receive is response */ - client->recv_buffer[client->cur_recv_len - 1] = '\0'; - if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) - { - /* copy response lines, separated by '\0' */ - memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); - resp_buf_len += client->cur_recv_len; - - line_counts++; - } - else - { - client->resp_status = AT_RESP_BUFF_FULL; - Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); - } - /* check response result */ - if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 - && client->resp->line_num == 0) - { - /* get the end data by response result, return response state END_OK. */ - client->resp_status = AT_RESP_OK; - } - else if (strstr(client->recv_buffer, AT_RESP_END_ERROR) - || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) - { - client->resp_status = AT_RESP_ERROR; - } - else if (line_counts == client->resp->line_num && client->resp->line_num) - { - /* get the end data by response line, return response state END_OK.*/ - client->resp_status = AT_RESP_OK; - } - else - { if(!expired(&timer)) - { - continue; - } - else - { - break; - } - } - - client->resp->line_counts = line_counts; - client->resp = NULL; - //client->resp_notice = true; - resp_buf_len = 0; - line_counts = 0; - break; - } - else - { - // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); - } - } - else - { - //Log_d("read no new line"); - } - }while(!expired(&timer)); -} -#endif - -/* initialize the client parameters */ -int at_client_para_init(at_client_t client) -{ - client->lock = HAL_MutexCreate(); - if(NULL == client->lock) - { - Log_e("create lock err"); - return QCLOUD_ERR_FAILURE; - } - -#ifdef AT_OS_USED - client->resp_sem = HAL_SemaphoreCreate(); - if (NULL == client->resp_sem) - { - Log_e("create sem err"); - return QCLOUD_ERR_FAILURE; - } - - client->parser = client_parser; -#endif - - char * ringBuff = HAL_Malloc(RING_BUFF_LEN); - if(NULL == ringBuff) - { - Log_e("malloc ringbuff err"); - return QCLOUD_ERR_FAILURE; - } - ring_buff_init(&g_ring_buff, ringBuff, RING_BUFF_LEN); - - char * recvBuff = HAL_Malloc(CLINET_BUFF_LEN); - if(NULL == recvBuff) - { - Log_e("malloc recvbuff err"); - return QCLOUD_ERR_FAILURE; - } - client->recv_buffer = recvBuff; - - - client->pRingBuff = &g_ring_buff; - client->recv_bufsz = CLINET_BUFF_LEN; - client->cur_recv_len = 0; - - client->resp = NULL; - - client->urc_table = NULL; - client->urc_table_size = 0; - client->end_sign = 0; - - return QCLOUD_RET_SUCCESS; -} - -/** - * AT client initialize. - * - * @param pClient pinter of at client which to be inited - * @return @see eTidResault - */ -int at_client_init(at_client_t *pClient) -{ - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - at_client_t client; - int result; - - client = at_client_get(); - - if(NULL == client) - { - Log_e("no at client get"); - result = QCLOUD_ERR_FAILURE; - goto exit; - } - - if(AT_STATUS_INITIALIZED == client->status) - { - Log_e("at client has been initialized"); - result = QCLOUD_ERR_FAILURE; - goto exit; - } - - result = at_client_para_init(client); - if (result == QCLOUD_RET_SUCCESS) - { - Log_d("AT client(V%s) initialize success.", AT_FRAME_VERSION); - client->status = AT_STATUS_INITIALIZED; - *pClient = client; - -#ifdef AT_OS_USED - // create thread for at parser - if(NULL != client->parser) - { -#define AT_PARSER_THREAD_STACK 6144 -#define AT_PARSER_THREAD_PRIORITY 0 - - client->thread_t = HAL_ThreadCreate( - AT_PARSER_THREAD_STACK, \ - AT_PARSER_THREAD_PRIORITY, - "at_client_parser", - client->parser, \ - client); - - result = client->thread_t ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; - if(QCLOUD_RET_SUCCESS == result){ - Log_d("create at_parser thread success!"); - }else{ - Log_d("create at_parser thread fail!"); - } - -#undef AT_PARSER_THREAD_STACK -#undef AT_PARSER_THREAD_PRIORITY - } -#endif - - } - else - { - *pClient = NULL; - client->status = AT_STATUS_UNINITIALIZED; - Log_e("AT client(V%s) initialize failed(%d).", AT_FRAME_VERSION, result); - } - -exit: - - return result; -} - -int at_client_deinit(at_client_t pClient){ - - //TO DO: - return QCLOUD_RET_SUCCESS; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_socket_inf.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_socket_inf.c deleted file mode 100644 index 837e2088..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_socket_inf.c +++ /dev/null @@ -1,415 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#include "utils_param_check.h" -#include "at_socket_inf.h" - -/** The global array of available at */ -static at_socket_ctx_t at_socket_ctxs[MAX_AT_SOCKET_NUM]; - -/**at socket operation mutex */ -static void *sg_at_socket_mutex; - -/**at device driver ops*/ -static at_device_op_t *sg_at_device_ops = NULL; - -#define MAX_RECV_PKT_PER_CHAIN (10) - -static at_device_op_t * _at_device_op_get(void) -{ - return sg_at_device_ops; -} - -static int _at_socket_ctx_free(at_socket_ctx_t *pCtx) -{ - POINTER_SANITY_CHECK(pCtx, QCLOUD_ERR_INVAL); - - pCtx->fd = UNUSED_SOCKET; - pCtx->net_type = eNET_DEFAULT; - - if(pCtx->recvpkt_list){ - list_destroy(pCtx->recvpkt_list); - pCtx->recvpkt_list = NULL; - } - - if(pCtx->recv_lock){ - HAL_MutexDestroy(pCtx->recv_lock); - pCtx->recv_lock = NULL; - } - - return QCLOUD_RET_SUCCESS; -} - -static at_socket_ctx_t *_at_socket_ctx_alloc(void) -{ - int i; - - for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { - if (at_socket_ctxs[i].state == eSOCKET_CLOSED) { - - at_socket_ctxs[i].net_type = eNET_DEFAULT; - at_socket_ctxs[i].send_timeout_ms = AT_SOCKET_SEND_TIMEOUT_MS; - at_socket_ctxs[i].recv_timeout_ms = AT_SOCKET_RECV_TIMEOUT_MS; - at_socket_ctxs[i].dev_op = _at_device_op_get(); - - at_socket_ctxs[i].recv_lock = HAL_MutexCreate(); - if(NULL == at_socket_ctxs[i].recv_lock){ - Log_e("create recv lock fail"); - goto exit; - } - at_socket_ctxs[i].recvpkt_list = list_new(); - if(NULL != at_socket_ctxs[i].recvpkt_list){ - at_socket_ctxs[i].recvpkt_list->free = HAL_Free; - }else { - Log_e("no memory to allocate recvpkt_list"); - goto exit; - } - - at_socket_ctxs[i].state = eSOCKET_ALLOCED; - return &at_socket_ctxs[i]; - } - } - -exit: - - if(i < MAX_AT_SOCKET_NUM){ - _at_socket_ctx_free(&at_socket_ctxs[i]); - } - - return NULL; -} - -static at_socket_ctx_t *_at_socket_find(int fd) -{ - int i; - - for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { - if (at_socket_ctxs[i].fd == fd) { - return &at_socket_ctxs[i]; - } - } - - return NULL; -} - -/* get a block to the AT socket receive list*/ -static int _at_recvpkt_put(List *rlist, const char *ptr, size_t length) -{ - at_recv_pkt *pkt = NULL; - - if(rlist->len > MAX_RECV_PKT_PER_CHAIN){ - Log_e("Too many recv packets wait for read"); - HAL_Free(pkt); - return QCLOUD_ERR_FAILURE; - } - - pkt = (at_recv_pkt *) HAL_Malloc(sizeof(struct at_recv_pkt)); - if (pkt == NULL){ - Log_e("No memory for receive packet table!"); - return QCLOUD_ERR_FAILURE; - } - - pkt->bfsz_totle = length; - pkt->bfsz_index = 0; - pkt->buff = (char *) ptr; - - ListNode *node = list_node_new(pkt); - if (NULL == node) { - Log_e("run list_node_new is error!"); - HAL_Free(pkt); - return QCLOUD_ERR_FAILURE; - } - - list_rpush(rlist, node); - - return length; -} - -/* get a block from AT socket receive list */ -static int _at_recvpkt_get(List *pkt_list, char *buff, size_t len) -{ - ListIterator *iter; - ListNode *node = NULL; - at_recv_pkt *pkt; - size_t readlen = 0, page_len = 0; - POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); - - if (pkt_list->len) { - iter = list_iterator_new(pkt_list, LIST_HEAD); - if (NULL == iter) { - Log_e("new listiterator fail"); - return QCLOUD_ERR_TCP_READ_FAIL; - } - - /*traverse recv pktlist*/ - do{ - node = list_iterator_next(iter); - if (!node) { - break; - } - - /*get recv packet*/ - pkt = (at_recv_pkt *)(node->val); - if(!pkt){ - Log_e("pkt is invalid!"); - list_remove(pkt_list, node); - continue; - } - - page_len = pkt->bfsz_totle - pkt->bfsz_index; - if(page_len >= (len - readlen)){ - memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, (len - readlen)); - pkt->bfsz_index += len - readlen; - readlen = len; - break; - }else{ - memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, page_len); - readlen += page_len; - - /*delete pkt after read*/ - HAL_Free(pkt->buff); - list_remove(pkt_list, node); - } - }while(1); - - list_iterator_destroy(iter); - } - - return readlen; -} - -static void _at_socket_recv_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) -{ - POINTER_SANITY_CHECK_RTN(buff); - at_socket_ctx_t *pAtSocket; - - if(event == AT_SOCKET_EVT_RECV){ - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); - if(_at_recvpkt_put(pAtSocket->recvpkt_list, buff, bfsz) < 0){ - Log_e("put recv package to list fail"); - HAL_Free(buff); - } - HAL_MutexUnlock(sg_at_socket_mutex); - } -} - -static void _at_socket_closed_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) -{ - //fancyxu - at_socket_ctx_t *pAtSocket; - pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); - - if(event == AT_SOCKET_EVT_CLOSED) { - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket->state = eSOCKET_CLOSED; - _at_socket_ctx_free(pAtSocket); - HAL_MutexUnlock(sg_at_socket_mutex); - } -} - -int at_device_op_register(at_device_op_t *device_op) -{ - int rc; - - if(NULL == sg_at_device_ops){ - sg_at_device_ops = device_op; - rc = QCLOUD_RET_SUCCESS; - }else{ - Log_e("pre device op already register"); - rc = QCLOUD_ERR_FAILURE; - } - - return rc; -} - -int at_socket_init(void) -{ - int i; - int rc = QCLOUD_RET_SUCCESS; - - for(i = 0; i < MAX_AT_SOCKET_NUM; i++){ - at_socket_ctxs[i].fd = UNUSED_SOCKET; - at_socket_ctxs[i].state = eSOCKET_CLOSED; - at_socket_ctxs[i].dev_op = NULL; - at_socket_ctxs[i].recvpkt_list = NULL; - } - - sg_at_socket_mutex = HAL_MutexCreate(); - if (sg_at_socket_mutex == NULL) { - Log_e("create sg_at_socket_mutex fail \n"); - rc = QCLOUD_ERR_FAILURE; - } - - if(NULL != sg_at_device_ops){ - if(QCLOUD_RET_SUCCESS == sg_at_device_ops->init()){ - Log_d("at device %s init success", (NULL == sg_at_device_ops->deviceName)?"noname":sg_at_device_ops->deviceName); - sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_RECV, _at_socket_recv_cb); - sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_CLOSED, _at_socket_closed_cb); - }else{ - Log_e("at device %s init fail", (NULL == sg_at_device_ops->deviceName)?"noname":sg_at_device_ops->deviceName); - } - } - - return rc; -} - -int at_socket_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) -{ - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->parse_domain, QCLOUD_ERR_INVAL); - - return at_op->parse_domain(host_name, host_ip, host_ip_len); -} - -int at_socket_get_local_mac(char *macbuff, size_t bufflen) -{ - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->get_local_mac, QCLOUD_ERR_INVAL); - - return at_op->get_local_mac(macbuff, bufflen); -} - -int at_socket_get_local_ip(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen) -{ - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->get_local_ip, QCLOUD_ERR_INVAL); - - return at_op->get_local_ip(ip, iplen, gw, gwlen, mask, masklen); -} - -int at_socket_connect(const char *host, uint16_t port, eNetProto eProto) -{ - at_socket_ctx_t *pAtSocket; - int fd; - - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket = _at_socket_ctx_alloc(); - HAL_MutexUnlock(sg_at_socket_mutex); - - if((NULL == pAtSocket) || (NULL == pAtSocket->dev_op)|| (NULL == pAtSocket->dev_op->connect)){ - Log_e("alloc socket fail"); - return QCLOUD_ERR_FAILURE; - } - - fd = pAtSocket->dev_op->connect(host, port, eProto); - if(fd < 0){ - Log_e("dev_op connect fail,pls check at device driver!"); - _at_socket_ctx_free(pAtSocket); - }else{ - pAtSocket->fd = fd + MAX_AT_SOCKET_NUM; - pAtSocket->state = eSOCKET_CONNECTED; - } - - return pAtSocket->fd; -} - -int at_socket_close(int fd) -{ - at_socket_ctx_t *pAtSocket; - - - pAtSocket = _at_socket_find(fd); - if(NULL==pAtSocket) { //server close the connection - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - } - - int rc; - if((eSOCKET_CONNECTED == pAtSocket->state) && (NULL != pAtSocket->dev_op) && (NULL != pAtSocket->dev_op->close)) { - rc = pAtSocket->dev_op->close(pAtSocket->fd - MAX_AT_SOCKET_NUM); - } else { - rc = QCLOUD_ERR_FAILURE; - } - return rc; -} - -int at_socket_send(int fd, const void *buf, size_t len) -{ - at_socket_ctx_t *pAtSocket; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->send, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - }else{ - return pAtSocket->dev_op->send(fd - MAX_AT_SOCKET_NUM, buf, len); - } -} - -int at_socket_recv(int fd, void *buf, size_t len) -{ - at_socket_ctx_t *pAtSocket; - size_t recv_len; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_READ_FAIL; - }else{ - HAL_MutexLock(pAtSocket->recv_lock); - - //call at device recv driver for os and nonos - if(pAtSocket->recvpkt_list->len == 0) { - if(pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, pAtSocket->recv_timeout_ms) != QCLOUD_RET_SUCCESS) { - Log_e("at device recv err"); //do not return yet - } - } - - /* receive packet list last transmission of remaining data */ - recv_len = _at_recvpkt_get(pAtSocket->recvpkt_list, (char *)buf, len); - HAL_MutexUnlock(pAtSocket->recv_lock); - } - - return recv_len; -} - -int at_socket_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) -{ - at_socket_ctx_t *pAtSocket; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - }else{ - return pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, timeout); - } -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_utils.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_utils.c deleted file mode 100644 index 1a9d4e91..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/at_utils.c +++ /dev/null @@ -1,372 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include - -#include "qcloud_iot_import.h" -#include "utils_param_check.h" -#include "at_utils.h" -#include "at_client.h" - -static char send_buf[CLINET_BUFF_LEN]; -static int last_cmd_len = 0; - -/** - * dump hex format data to console device - * - * @param name name for hex object, it will show on log header - * @param buf hex buffer - * @param size buffer size - */ -void at_print_raw_cmd(const char *name, const char *buf, int size) -{ - int i, j; - - for (i = 0; i < size; i += WIDTH_SIZE) - { - HAL_Printf("%s: %04X-%04X: ", name, i, i + WIDTH_SIZE); - for (j = 0; j < WIDTH_SIZE; j++) - { - if (i + j < size) - { - HAL_Printf("%02X ", buf[i + j]); - } - else - { - HAL_Printf(" "); - } - if ((j + 1) % 8 == 0) - { - HAL_Printf(" "); - } - } - HAL_Printf(" "); - for (j = 0; j < WIDTH_SIZE; j++) - { - if (i + j < size) - { - HAL_Printf("%c", __is_print(buf[i + j]) ? buf[i + j] : '.'); - } - } - HAL_Printf("\n\r"); - } -} - -const char *at_get_last_cmd(int *cmd_size) -{ - *cmd_size = last_cmd_len; - return send_buf; -} - -int at_vprintf(const char *format, va_list args) -{ - last_cmd_len = vsnprintf(send_buf, sizeof(send_buf), format, args); - -#ifdef AT_DEBUG - at_print_raw_cmd("send", send_buf, last_cmd_len); -#endif - - return HAL_AT_Uart_Send((uint8_t *)send_buf, last_cmd_len); -} - -int at_vprintfln(const char *format, va_list args) -{ - int len; - - len = at_vprintf(format, args); - - HAL_AT_Uart_Send("\r\n", 2); - - return len + 2; -} - -/** - * at_sscanf - Unformat a buffer into a list of arguments, rewrite sscanf - * @buf: input buffer - * @fmt: format of buffer - * @args: arguments - */ -int at_sscanf(const char * buf, const char * fmt, va_list args) -{ - const char *str = buf; - char *next; - int num = 0; - int qualifier; - int base; - int field_width = -1; - int is_sign = 0; - - while(*fmt && *str) { - /* skip any white space in format */ - /* white space in format matchs any amount of - * white space, including none, in the input. - */ - if (isspace(*fmt)) { - while (isspace(*fmt)) - ++fmt; - while (isspace(*str)) - ++str; - } - - /* anything that is not a conversion must match exactly */ - if (*fmt != '%' && *fmt) { - if (*fmt++ != *str++) - break; - continue; - } - - if (!*fmt) - break; - ++fmt; - - /* skip this conversion. - * advance both strings to next white space - */ - if (*fmt == '*') { - while (!isspace(*fmt) && *fmt) - fmt++; - while (!isspace(*str) && *str) - str++; - continue; - } - - /* get field width */ - if (isdigit(*fmt)) - field_width = atoi(fmt); - - /* get conversion qualifier */ - qualifier = -1; - if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') { - qualifier = *fmt; - fmt++; - } - base = 10; - is_sign = 0; - - if (!*fmt || !*str) - break; - - switch(*fmt++) { - case 'c': - { - char *s = (char *) va_arg(args,char*); - if (field_width == -1) - field_width = 1; - do { - *s++ = *str++; - } while(field_width-- > 0 && *str); - num++; - } - continue; - case 's': - { - char *s = (char *) va_arg(args, char *); - if(field_width == -1) - field_width = INT_MAX; - /* first, skip leading white space in buffer */ - while (isspace(*str)) - str++; - - /* now copy until next white space */ - while (*str && ((*str) != ',')) { - if(isspace(*str)){ - str++; - }else{ - *s++ = *str++; - } - } - *s = '\0'; - num++; - } - continue; - /* S for special handling for MQTTPUB JSON content */ - case 'S': - { - char *s = (char *) va_arg(args, char *); - if(field_width == -1) - field_width = INT_MAX; - /* first, skip leading white space in buffer */ - while (isspace(*str)) - str++; - - /* now copy until next white space */ - while (*str) { - if(isspace(*str)){ - str++; - }else{ - *s++ = *str++; - } - } - *s = '\0'; - num++; - } - continue; - case 'n': - /* return number of characters read so far */ - { - int *i = (int *)va_arg(args,int*); - *i = str - buf; - } - continue; - case 'o': - base = 8; - break; - case 'x': - case 'X': - base = 16; - break; - case 'd': - case 'i': - is_sign = 1; - case 'u': - break; - case '%': - /* looking for '%' in str */ - if (*str++ != '%') - return num; - continue; - default: - /* invalid format; stop here */ - return num; - } - - /* have some sort of integer conversion. - * first, skip white space in buffer. - */ - while (isspace(*str)) - str++; - - if (!*str || !isdigit(*str)) - break; - - switch(qualifier) { - case 'h': - if (is_sign) { - short *s = (short *) va_arg(args,short *); - *s = (short) strtol(str,&next,base); - } else { - unsigned short *s = (unsigned short *) va_arg(args, unsigned short *); - *s = (unsigned short) strtoul(str, &next, base); - } - break; - case 'l': - if (is_sign) { - long *l = (long *) va_arg(args,long *); - *l = strtol(str,&next,base); - } else { - unsigned long *l = (unsigned long*) va_arg(args,unsigned long*); - *l = strtoul(str,&next,base); - } - break; - case 'L': - if (is_sign) { - long long *l = (long long*) va_arg(args,long long *); - *l = strtoll(str,&next,base); - } else { - unsigned long long *l = (unsigned long long*) va_arg(args,unsigned long long*); - *l = strtoull(str,&next,base); - } - break; - case 'Z': - { - unsigned long *s = (unsigned long*) va_arg(args,unsigned long*); - *s = (unsigned long) strtoul(str,&next,base); - } - break; - default: - if (is_sign) { - int *i = (int *) va_arg(args, int*); - *i = (int) strtol(str,&next,base); - } else { - unsigned int *i = (unsigned int*) va_arg(args, unsigned int*); - *i = (unsigned int) strtoul(str,&next,base); - } - break; - } - num++; - - if (!next) - break; - str = next; - } - return num; -} - -/** - * AT server request arguments parse arguments - * - * @param req_args request arguments - * @param req_expr request expression - * - * @return -1 : parse arguments failed - * 0 : parse without match - * >0 : The number of arguments successfully parsed - */ -int at_req_parse_args(const char *req_args, const char *req_expr, ...) -{ - va_list args; - int req_args_num = 0; - - POINTER_SANITY_CHECK(req_args, 0); - POINTER_SANITY_CHECK(req_expr, 0); - - va_start(args, req_expr); - - //req_args_num = vsscanf(req_args, req_expr, args); - req_args_num = at_sscanf(req_args, req_expr, args); - - - va_end(args); - - return req_args_num; -} - -void at_strip(char *str, const char patten) -{ - char *start, *end; - - start = str; - end = str + strlen(str) -1; - - if(*str == patten) - { - start++; - } - - if(*end == patten) - { - *end-- = '\0'; - } - - strcpy(str, start); -} - -void chr_strip(char *str, const char patten) -{ - char *end = str + strlen(str); - - while(*str != '\0') - { - if(*str == patten) - { - memmove(str, str+1, end - str); - } - str++; - } -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/network_at_tcp.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/network_at_tcp.c deleted file mode 100644 index 09a97a36..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/at_socket/network_at_tcp.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2019-2021 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#ifdef AT_TCP_ENABLED - -#include -#include -#include - -#include "network_interface.h" -#include "utils_param_check.h" -#include "utils_timer.h" -#include "at_socket_inf.h" - -int network_at_tcp_init(Network *pNetwork) -{ - int rc; - - /*at device init entry: at_client init, device driver register to at_socket*/ - rc = at_device_init(); - if(QCLOUD_RET_SUCCESS != rc) - { - Log_e("at device init fail,rc:%d",rc); - return rc; - } - - /*do after at device init*/ - rc = at_socket_init(); - if(QCLOUD_RET_SUCCESS != rc) - { - Log_e("at socket init fail,rc:%d",rc); - } - - return rc; -} - -int network_at_tcp_connect(Network *pNetwork) -{ - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - - int fd = at_socket_connect(pNetwork->host, pNetwork->port, eNET_TCP); - - if (fd < 0) { - Log_e("fail to connect with TCP server: %s:%u", pNetwork->host, pNetwork->port); - pNetwork->handle = AT_NO_CONNECTED_FD; - return -1; - } - else { - Log_d("connected with TCP server: %s:%u", pNetwork->host, pNetwork->port); - pNetwork->handle = fd; - return 0; - } -} - -int network_at_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) -{ - int ret, err_code; - uint32_t len_recv; - Timer timer; - - InitTimer(&timer); - countdown_ms(&timer, timeout_ms); - - len_recv = 0; - err_code = 0; - - do { - if (expired(&timer)) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; - break; - } - - ret = at_socket_recv(pNetwork->handle, data + len_recv, datalen - len_recv); - - if (ret > 0) { - len_recv += ret; - } - else if (ret == 0) { - err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; - } - else {//ret < 0 - Log_e("recv fail\n"); - err_code = QCLOUD_ERR_TCP_READ_FAIL; - break; - } - - } while ((len_recv < datalen)); - - if (err_code == QCLOUD_ERR_TCP_READ_TIMEOUT && len_recv == 0) { - err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; - } - - *read_len = len_recv; - - return (datalen == len_recv) ? QCLOUD_RET_SUCCESS : err_code; -} - -int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) -{ - int ret; - uint32_t len_sent; - Timer timer; - int net_err = 0; - - InitTimer(&timer); - countdown_ms(&timer, timeout_ms); - - len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ - - do { - ret = at_socket_send(pNetwork->handle, data + len_sent, datalen - len_sent); - - if (ret > 0) { - len_sent += ret; - } - else if (0 == ret) { - Log_e("No data be sent\n"); - } - else { - Log_e("send fail, ret:%d\n", ret); - net_err = 1; - break; - } - } while (!net_err && (len_sent < datalen) && (!expired(&timer))); - - *written_len = (size_t)len_sent; - - return (len_sent > 0 && net_err == 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_TCP_WRITE_FAIL; -} - -void network_at_tcp_disconnect(Network *pNetwork) -{ - int rc; - - rc = at_socket_close((int)pNetwork->handle); - if (QCLOUD_RET_SUCCESS != rc) { - Log_e("socket close error\n"); - } - - return ; -} - -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/network_interface.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/network_interface.c deleted file mode 100644 index 1a88c45d..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/network_interface.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "network_interface.h" -#include "qcloud_iot_export_error.h" -#include "utils_param_check.h" - -int is_network_connected(Network *pNetwork) { - return pNetwork->handle; -} - -#ifdef AT_TCP_ENABLED -int is_network_at_connected(Network *pNetwork) { - return pNetwork->handle== AT_NO_CONNECTED_FD ? 0: pNetwork->handle == AT_NO_CONNECTED_FD; -} -#endif - -int network_init(Network *pNetwork) -{ - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - - // to avoid process crash when writing to a broken socket -#if defined(__linux__) - signal(SIGPIPE, SIG_IGN); -#endif - - switch(pNetwork->type) { - case NETWORK_TCP: -#ifdef AT_TCP_ENABLED - pNetwork->init = network_at_tcp_init; - pNetwork->connect = network_at_tcp_connect; - pNetwork->read = network_at_tcp_read; - pNetwork->write = network_at_tcp_write; - pNetwork->disconnect = network_at_tcp_disconnect; - pNetwork->is_connected = is_network_at_connected; - pNetwork->handle = AT_NO_CONNECTED_FD; -#else - pNetwork->init = network_tcp_init; - pNetwork->connect = network_tcp_connect; - pNetwork->read = network_tcp_read; - pNetwork->write = network_tcp_write; - pNetwork->disconnect = network_tcp_disconnect; - pNetwork->is_connected = is_network_connected; - pNetwork->handle = 0; -#endif - break; - -#ifndef AUTH_WITH_NOTLS - case NETWORK_TLS: - pNetwork->init = network_tls_init; - pNetwork->connect = network_tls_connect; - pNetwork->read = network_tls_read; - pNetwork->write = network_tls_write; - pNetwork->disconnect = network_tls_disconnect; - pNetwork->is_connected = is_network_connected; - pNetwork->handle = 0; - break; -#endif - -#ifdef COAP_COMM_ENABLED -#ifdef AUTH_WITH_NOTLS - case NETWORK_UDP: - pNetwork->init = network_udp_init; - pNetwork->connect = network_udp_connect; - pNetwork->read = network_udp_read; - pNetwork->write = network_udp_write; - pNetwork->disconnect = network_udp_disconnect; - pNetwork->is_connected = is_network_connected; - pNetwork->handle = 0; - break; -#else - case NETWORK_DTLS: - pNetwork->init = network_dtls_init; - pNetwork->connect = network_dtls_connect; - pNetwork->read = network_dtls_read; - pNetwork->write = network_dtls_write; - pNetwork->disconnect = network_dtls_disconnect; - pNetwork->is_connected = is_network_connected; - pNetwork->handle = 0; - break; -#endif -#endif - default: - Log_e("unknown network type: %d", pNetwork->type); - return QCLOUD_ERR_INVAL; - } - return pNetwork->init(pNetwork); -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client.c deleted file mode 100644 index 68b99507..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client.c +++ /dev/null @@ -1,361 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" -#include "qcloud_iot_common.h" - -#include "coap_client.h" - -#include "qcloud_iot_ca.h" -#include "qcloud_iot_device.h" -#include "utils_param_check.h" -#include "utils_base64.h" - - -static char s_qcloud_iot_host[HOST_STR_LENGTH] = {0}; -static int s_qcloud_iot_port = COAP_SERVER_PORT; - -#ifndef AUTH_WITH_NOTLS -#ifndef AUTH_MODE_CERT -static unsigned char sg_psk_str[DECODE_PSK_LENGTH]; -#endif -#endif - -static uint16_t _get_random_start_packet_id(void) -{ - srand((unsigned)HAL_Timer_current_sec()); - return rand() % 65536 + 1; -} - -void* IOT_COAP_Construct(CoAPInitParams *pParams) -{ - POINTER_SANITY_CHECK(pParams, NULL); - STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); - STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); - - CoAPClient *coap_client = NULL; - if ((coap_client = (CoAPClient*) HAL_Malloc (sizeof(CoAPClient))) == NULL) { - Log_e("memory not enough to malloc COAPClient"); - return NULL; - } - - if (iot_device_info_init() == QCLOUD_RET_SUCCESS) { - iot_device_info_set(pParams->product_id, pParams->device_name); - } - - int rc = qcloud_iot_coap_init(coap_client, pParams); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("coap init failed: %d", rc); - HAL_Free(coap_client); - return NULL; - } - - if (coap_client->network_stack.connect(&coap_client->network_stack) != QCLOUD_RET_SUCCESS) { - Log_e("coap connect failed: %d", rc); - HAL_Free(coap_client); - return NULL; - } - else { - Log_i("coap connect success"); - } - - coap_client_auth(coap_client); - while (coap_client->is_authed == -1) { - IOT_COAP_Yield(coap_client, 200); - } - - if (coap_client->is_authed == COAP_TRUE) { - Log_i("device auth successfully, connid: %s", coap_client->conn_id); - return coap_client; - } else { - Log_e("device auth failed, connid: %s", coap_client->conn_id); - void *client = coap_client; - IOT_COAP_Destroy(&client); - return NULL; - } -} - -void IOT_COAP_Destroy(void **pClient) { - POINTER_SANITY_CHECK_RTN(*pClient); - - CoAPClient *coap_client = (CoAPClient *)(*pClient); - - if ((coap_client)->network_stack.handle != 0) { - (coap_client)->network_stack.disconnect(&(coap_client)->network_stack); - } - - list_destroy(coap_client->message_list); - - HAL_MutexDestroy(coap_client->lock_send_buf); - HAL_MutexDestroy(coap_client->lock_list_wait_ack); - - if (coap_client->auth_token != NULL) { - HAL_Free(coap_client->auth_token); - coap_client->auth_token = NULL; - } - coap_client->auth_token_len = 0; - coap_client->is_authed = -1; - - HAL_Free(*pClient); - *pClient = NULL; - - Log_i("coap release!"); -} - -int IOT_COAP_Yield(void *pClient, uint32_t timeout_ms) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - CoAPClient* coap_client = (CoAPClient*)pClient; - - return coap_message_cycle(coap_client, timeout_ms); -} - -int IOT_COAP_SendMessage(void *pClient, char *topicName, SendMsgParams *sendParams) { - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(topicName, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(sendParams, QCLOUD_ERR_INVAL); - - if (strlen(topicName) > URI_PATH_MAX_LEN) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); - } - - int ret = QCLOUD_RET_SUCCESS; - - CoAPClient* coap_client = (CoAPClient*)pClient; - - CoAPMessage send_message = DEFAULT_COAP_MESSAGE; - - coap_message_type_set(&send_message, COAP_MSG_CON); - coap_message_code_set(&send_message, COAP_MSG_REQ, COAP_MSG_POST); - - coap_message_id_set(&send_message, get_next_coap_msg_id(coap_client)); - - char message_token[8] = {0}; - int len = get_coap_message_token(pClient, message_token); - coap_message_token_set(&send_message, message_token, len); - - send_message.pay_load = (char *) HAL_Malloc (sendParams->pay_load_len); - if (NULL == send_message.pay_load) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - - coap_message_payload_set(&send_message, sendParams->pay_load, sendParams->pay_load_len); - - coap_message_option_add(&send_message, COAP_MSG_URI_PATH, strlen(topicName), topicName); - coap_message_option_add(&send_message, COAP_MSG_AUTH_TOKEN, coap_client->auth_token_len, coap_client->auth_token); - if (sendParams->need_resp == false) { - coap_message_option_add(&send_message, COAP_MSG_NEED_RESP, 1, "0"); - coap_message_context_set(&send_message, sendParams->user_context); - } - else { - coap_message_option_add(&send_message, COAP_MSG_NEED_RESP, 1, "1"); - coap_message_callback_set(&send_message, sendParams->resp_callback); - coap_message_context_set(&send_message, sendParams->user_context); - } - - ret = coap_message_send(coap_client, &send_message); - - HAL_Free(send_message.pay_load); - - if (ret != QCLOUD_RET_SUCCESS) { - IOT_FUNC_EXIT_RC(ret) - } - - IOT_FUNC_EXIT_RC(send_message.msg_id) -} - -int IOT_COAP_GetMessageId(void *pMessage) { - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK(pMessage, QCLOUD_ERR_INVAL); - CoAPMessage *message = (CoAPMessage *)pMessage; - - IOT_FUNC_EXIT_RC(message->msg_id) -} - -int IOT_COAP_GetMessagePayload(void *pMessage, char **payload, int *payloadLen) { - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK(pMessage, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(payload, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(payloadLen, QCLOUD_ERR_INVAL); - - CoAPMessage *message = (CoAPMessage *)pMessage; - if (message->code_class != COAP_MSG_SUCCESS || message->code_detail != COAP_MSG_CODE_205_CONTENT) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) - } - - *payload = message->pay_load; - *payloadLen = message->pay_load_len; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int IOT_COAP_GetMessageCode(void *pMessage) { - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK(pMessage, QCLOUD_ERR_INVAL); - - CoAPMessage *message = (CoAPMessage *)pMessage; - - int rc = COAP_EVENT_ACK_TIMEOUT; - - if (message->code_class == COAP_MSG_SUCCESS) { - rc = COAP_EVENT_RECEIVE_RESPCONTENT; - } - else if (message->code_class == COAP_MSG_CLIENT_ERR) { - if (message->code_detail == COAP_MSG_CODE_401_UNAUTHORIZED) { - rc = COAP_EVENT_UNAUTHORIZED; - } - else { - rc = COAP_EVENT_FORBIDDEN; - } - } - else if (message->code_class == COAP_MSG_SERVER_ERR) { - rc = COAP_EVENT_INTERNAL_SERVER_ERROR; - } - else if (message->code_class == COAP_MSG_SDKINTERNAL_ERR) { - rc = COAP_EVENT_SEPRESP_TIMEOUT; - } - else { - /** - * no more error code - */ - Log_e("not supported code class: %d", message->code_class); - } - - IOT_FUNC_EXIT_RC(rc) -} - -int qcloud_iot_coap_init(CoAPClient *pClient, CoAPInitParams *pParams) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); - - memset(pClient, 0x0, sizeof(CoAPClient)); - - int size = HAL_Snprintf(s_qcloud_iot_host, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_COAP_DEIRECT_DOMAIN); - if (size < 0 || size > HOST_STR_LENGTH - 1) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - pClient->is_authed = -1; - - if (pParams->command_timeout < MIN_COMMAND_TIMEOUT) - pParams->command_timeout = MIN_COMMAND_TIMEOUT; - if (pParams->command_timeout > MAX_COMMAND_TIMEOUT) - pParams->command_timeout = MAX_COMMAND_TIMEOUT; - pClient->command_timeout_ms = pParams->command_timeout; - -#ifndef AUTH_WITH_NOTLS -#ifdef AUTH_MODE_CERT - bool certEmpty = (pParams->cert_file == NULL || pParams->key_file == NULL); - if (certEmpty) { - Log_e("cert file or key file is empty!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - } - Log_d("cert file: %s", pParams->cert_file); - Log_d("key file: %s", pParams->key_file); - - // device param for TLS connection - pClient->network_stack.ssl_connect_params.cert_file = pParams->cert_file; - pClient->network_stack.ssl_connect_params.key_file = pParams->key_file; - pClient->network_stack.ssl_connect_params.ca_crt = iot_ca_get(); - pClient->network_stack.ssl_connect_params.ca_crt_len = strlen(pClient->network_stack.ssl_connect_params.ca_crt); - -#else - pClient->network_stack.ssl_connect_params.psk_id = iot_device_info_get()->client_id; - if (pParams->device_secret != NULL) { - size_t src_len = strlen(pParams->device_secret); - size_t len; - memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); - qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); - pClient->network_stack.ssl_connect_params.psk = (char *)sg_psk_str; - pClient->network_stack.ssl_connect_params.psk_length = len; - pClient->network_stack.ssl_connect_params.ca_crt = iot_ca_get(); - pClient->network_stack.ssl_connect_params.ca_crt_len = strlen(pClient->network_stack.ssl_connect_params.ca_crt); - } else { - Log_e("psk is empty!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - } -#endif - - pClient->network_stack.host = s_qcloud_iot_host; - pClient->network_stack.port = s_qcloud_iot_port; -#else - pClient->network_stack.host = s_qcloud_iot_host; - pClient->network_stack.port = s_qcloud_iot_port; -#endif - - pClient->auth_token = NULL; - pClient->auth_token_len = 0; - // next_msg_id, random: 1- 65536 - pClient->next_msg_id = _get_random_start_packet_id(); - pClient->read_buf_size = COAP_RECVMSG_MAX_BUFLEN; - pClient->send_buf_size = COAP_SENDMSG_MAX_BUFLEN; - - pClient->lock_send_buf = HAL_MutexCreate(); - if (pClient->lock_send_buf == NULL) { - Log_e("create send buf lock failed"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - pClient->lock_list_wait_ack = HAL_MutexCreate(); - if (pClient->lock_list_wait_ack == NULL) { - Log_e("create send buf lock failed"); - goto error; - } - - pClient->message_list = list_new(); - pClient->max_retry_count = pParams->max_retry_count; - pClient->event_handle = pParams->event_handle; - - // init network stack - qcloud_iot_coap_network_init(&(pClient->network_stack)); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); - -error: - if (pClient->lock_send_buf != NULL) { - HAL_MutexDestroy(pClient->lock_send_buf); - pClient->lock_send_buf = NULL; - } - - if (pClient->lock_list_wait_ack != NULL) { - HAL_MutexDestroy(pClient->lock_list_wait_ack); - pClient->lock_list_wait_ack = NULL; - } - - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); -} - -#ifdef __cplusplus -} -#endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_auth.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_auth.c deleted file mode 100644 index f4f8d3bc..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_auth.c +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" -#include "qcloud_iot_common.h" - -#include "coap_client.h" - -#include "qcloud_iot_device.h" -#include "utils_param_check.h" - -static void _coap_client_auth_callback(void *message, void *userContext) -{ - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK_RTN(message); - POINTER_SANITY_CHECK_RTN(userContext); - - CoAPClient *client = (CoAPClient *)userContext; - CoAPMessage *msg = (CoAPMessage *)message; - - if (msg->code_class == COAP_MSG_SUCCESS && msg->code_detail == COAP_MSG_CODE_205_CONTENT) { - Log_i("auth token message success, code_class: %d code_detail: %d", msg->code_class, msg->code_detail); - if (msg->pay_load_len == 0 || msg->pay_load == NULL || strlen(msg->pay_load) == 0) { - client->is_authed = COAP_FALSE; - Log_e("auth token response empty"); - } - else { - client->auth_token_len = msg->pay_load_len; - client->auth_token = HAL_Malloc(client->auth_token_len); - strncpy(client->auth_token, msg->pay_load,client->auth_token_len); - client->is_authed = COAP_TRUE; - Log_d("auth_token_len = %d, auth_token = %.*s", client->auth_token_len, client->auth_token_len, client->auth_token); - } - } - else { - client->is_authed = COAP_FALSE; - Log_e("auth token message failed, code_class: %d code_detail: %d", msg->code_class, msg->code_detail); - } - - IOT_FUNC_EXIT -} - -static void get_coap_next_conn_id(CoAPClient *pclient) { - int i = 0; - - srand((unsigned)HAL_Timer_current_sec()); - - for (i = 0; i < COAP_MAX_CONN_ID_LEN - 1; i++) { - int flag = rand() % 3; - - switch(flag) { - case 0: - pclient->conn_id[i] = (rand() % 26) + 'a'; - break; - case 1: - pclient->conn_id[i] = (rand() % 26) + 'A'; - break; - case 2: - pclient->conn_id[i] = (rand() % 10) + '0'; - break; - } - } - - pclient->conn_id[COAP_MAX_CONN_ID_LEN - 1] = '\0'; - - return; -} - -int coap_client_auth(CoAPClient *pclient) { - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK(pclient, QCLOUD_ERR_COAP_NULL); - - int ret = QCLOUD_RET_SUCCESS; - - CoAPClient* coap_client = (CoAPClient*)pclient; - CoAPMessage send_message = DEFAULT_COAP_MESSAGE; - - coap_message_type_set(&send_message, COAP_MSG_CON); - coap_message_code_set(&send_message, COAP_MSG_REQ, COAP_MSG_POST); - - coap_message_id_set(&send_message, get_next_coap_msg_id(coap_client)); - - char message_token[8] = {0}; - int len = get_coap_message_token(pclient, message_token); - coap_message_token_set(&send_message, message_token, len); - - len = MAX_SIZE_OF_PRODUCT_ID + strlen(iot_device_info_get()->device_name) - + strlen(COAP_AUTH_URI) + 4; - char *auth_path = (char*)HAL_Malloc(len); - HAL_Snprintf(auth_path, len, "%s/%s/%s", iot_device_info_get()->product_id, - iot_device_info_get()->device_name, COAP_AUTH_URI); - coap_message_option_add(&send_message, COAP_MSG_URI_PATH, strlen(auth_path), auth_path); - HAL_Free(auth_path); - - coap_message_option_add(&send_message, COAP_MSG_NEED_RESP, 1, "0"); - - coap_message_callback_set(&send_message, _coap_client_auth_callback); - coap_message_context_set(&send_message, pclient); - - get_coap_next_conn_id(coap_client); - - send_message.pay_load_len = strlen(QCLOUD_IOT_DEVICE_SDK_APPID) + COAP_MAX_CONN_ID_LEN + 2; - send_message.pay_load = (char *) HAL_Malloc (send_message.pay_load_len); - if (NULL == send_message.pay_load) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - - char *temp_pay_load = (char*)HAL_Malloc(send_message.pay_load_len); - if (NULL == temp_pay_load) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - - HAL_Snprintf(temp_pay_load, send_message.pay_load_len, "%s;%s", QCLOUD_IOT_DEVICE_SDK_APPID, coap_client->conn_id); - - coap_message_payload_set(&send_message, temp_pay_load, send_message.pay_load_len); - - ret = coap_message_send(coap_client, &send_message); - - HAL_Free(temp_pay_load); - HAL_Free(send_message.pay_load); - - IOT_FUNC_EXIT_RC(ret) -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_common.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_common.c deleted file mode 100644 index 461e6f1b..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_common.c +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#include "coap_client.h" - -#include "utils_param_check.h" - -/** - * @brief Free an option structure that was allocated by coap_msg_op_new - * - * @param[in,out] op Pointer to the option structure - */ -static void _coap_msg_op_delete(CoAPMsgOption *option) { - IOT_FUNC_ENTRY - HAL_Free(option->val); - HAL_Free(option); - IOT_FUNC_EXIT -} - -/** - * @brief Deinitialise an option linked-list structure - * - * @param[in,out] list Pointer to an option linked-list structure - */ -static void _coap_msg_op_list_destroy(CoAPMsgOptionList *list) { - IOT_FUNC_ENTRY - - CoAPMsgOption *prev = NULL; - CoAPMsgOption *option = NULL; - - option = list->first; - while (option != NULL) - { - prev = option; - option = option->next; - _coap_msg_op_delete(prev); - } - memset(list, 0, sizeof(CoAPMsgOptionList)); - - IOT_FUNC_EXIT -} - -uint16_t get_next_coap_msg_id(CoAPClient *pClient) { - IOT_FUNC_ENTRY - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - unsigned int id = 0; - id = pClient->next_msg_id = (uint16_t) ((COAP_MSG_MAX_MSG_ID == pClient->next_msg_id) ? 1 : (pClient->next_msg_id + 1)); - - IOT_FUNC_EXIT_RC(id) -} - -unsigned int get_coap_message_token(CoAPClient *client, char *tokenData) -{ - unsigned int value = client->message_token; - tokenData[0] = ((value & 0x00FF) >> 0); - tokenData[1] = ((value & 0xFF00) >> 8); - tokenData[2] = ((value & 0xFF0000) >> 16); - tokenData[3] = ((value & 0xFF000000) >> 24); - client->message_token++; - return sizeof(unsigned int); -} - -int coap_message_type_set(CoAPMessage *message, unsigned type) { - IOT_FUNC_ENTRY - - if ((type != COAP_MSG_CON) - && (type != COAP_MSG_NON) - && (type != COAP_MSG_ACK) - && (type != COAP_MSG_RST)) - { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) - } - message->type = type; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_code_set(CoAPMessage *message, unsigned code_class, unsigned code_detail) { - IOT_FUNC_ENTRY - - if (code_class > COAP_MSG_MAX_CODE_CLASS) - { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) - } - if (code_detail > COAP_MSG_MAX_CODE_DETAIL) - { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) - } - message->code_class = code_class; - message->code_detail = code_detail; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_id_set(CoAPMessage *message, unsigned msg_id) { - IOT_FUNC_ENTRY - - if (msg_id > COAP_MSG_MAX_MSG_ID) - { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) - } - message->msg_id = msg_id; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_token_set(CoAPMessage *message, char *buf, size_t len) { - IOT_FUNC_ENTRY - - if (len > COAP_MSG_MAX_TOKEN_LEN) - { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) - } - memcpy(message->token, buf, len); - message->token_len = len; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_payload_set(CoAPMessage *message, char *buf, size_t len) { - IOT_FUNC_ENTRY - - message->pay_load_len = 0; - - if (len > 0) - { - if (message->pay_load == NULL) - { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) - } - - memcpy(message->pay_load, buf, len); - message->pay_load_len = len; - } - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_option_add(CoAPMessage *message, unsigned num, unsigned len, const char *val) { - IOT_FUNC_ENTRY - - CoAPMsgOption *prev = NULL; - CoAPMsgOption *option = NULL; - CoAPMsgOptionList *list = &message->op_list; - - if ((option = qcloud_iot_coap_option_init(num, len, val)) == NULL) { - Log_e("allocate new option failed."); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) - } - - if (list->first == NULL) { - /* empty list */ - list->first = option; - list->last = option; - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) - } - - if (option->option_num < list->first->option_num) { - /* start of the list */ - option->next = list->first; - list->first = option; - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) - } - - prev = list->first; - while (prev != list->last) { - /* middle of the list */ - if ((prev->option_num <= option->option_num) && (option->option_num < prev->next->option_num)) - { - option->next = prev->next; - prev->next = option; - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) - } - prev = prev->next; - } - - /* end of the list */ - list->last->next = option; - list->last = option; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_callback_set(CoAPMessage *message, OnRespCallback callback) { - IOT_FUNC_ENTRY - - message->handler = callback; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_context_set(CoAPMessage *message, void *userContext) { - IOT_FUNC_ENTRY - - message->user_context = userContext; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -CoAPMsgOption * qcloud_iot_coap_option_init(unsigned num, unsigned len, const char *val) { - IOT_FUNC_ENTRY - - CoAPMsgOption *option = NULL; - - option = (CoAPMsgOption *) HAL_Malloc (sizeof(CoAPMsgOption)); - if (option == NULL) { - Log_e("no space to malloc option"); - return NULL; - } - - option->option_num = num; - option->val_len = len; - option->val = (char *) HAL_Malloc (len); - if (option->val == NULL) - { - HAL_Free(option); - option = NULL; - Log_e("no space to malloc option"); - return NULL; - } - - memcpy(option->val, val, len); - option->next = NULL; - - return option; -} - -void coap_message_destroy(CoAPMessage *message) -{ - IOT_FUNC_ENTRY - - _coap_msg_op_list_destroy(&message->op_list); - - if (message->pay_load != NULL) - { - HAL_Free(message->pay_load); - } - - memset(message, 0, sizeof(CoAPMessage)); - - IOT_FUNC_EXIT -} - -void coap_msg_dump(CoAPMessage* msg) -{ - Log_i("msg->version = %u",msg->version); - Log_i("msg->type = %d",msg->type); - Log_i("msg->code_class = %u",msg->code_class); - Log_i("msg->code_detail = %u",msg->code_detail); - Log_i("msg->msg_id = %d",msg->msg_id); - Log_i("msg->pay_load_len = %d",msg->pay_load_len); - Log_i("msg->pay_load: %s",msg->pay_load); - - Log_i("msg->token_len = %u",msg->token_len); - Log_i("msg->token: %s",msg->token); - return; -} - - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_message.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_message.c deleted file mode 100644 index 0dbeaf23..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_message.c +++ /dev/null @@ -1,441 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -// #include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#include "coap_client.h" -#include "coap_client_net.h" - -#include "utils_param_check.h" -#include "utils_timer.h" - -#define PROCESS_ACK_CMD (0) -#define PROCESS_PIGGY_CMD (1) -#define PROCESS_RESP_CMD (2) -#define PROCESS_WAIT_CMD (3) - -static void _event_message_type_set(CoAPEventMessage* eventMsg, CoAPMessage *message, uint16_t processCmd) { - if (message->code_class == COAP_MSG_SUCCESS && message->code_detail == COAP_MSG_CODE_205_CONTENT) { - eventMsg->event_type = processCmd == PROCESS_RESP_CMD ? COAP_EVENT_RECEIVE_RESPCONTENT : - COAP_EVENT_RECEIVE_ACK; - } - else if (message->code_class == COAP_MSG_CLIENT_ERR && message->code_detail == COAP_MSG_CODE_401_UNAUTHORIZED) { - eventMsg->event_type = COAP_EVENT_UNAUTHORIZED; - Log_e("coap messagefailed, message id: %d, failure reason: %d.%d", - message->msg_id, message->code_class, message->code_detail); - } - else if (message->code_class == COAP_MSG_CLIENT_ERR && message->code_detail == COAP_MSG_CODE_403_FORBIDDEN) { - eventMsg->event_type = COAP_EVENT_FORBIDDEN; - Log_e("coap message failed, message id: %d, failure reason: %d.%d", - message->msg_id, message->code_class, message->code_detail); - } - else { - eventMsg->event_type = COAP_EVENT_INTERNAL_SERVER_ERROR; - Log_e("coap message failed, message id: %d, failure reason: %d.%d", - message->msg_id, message->code_class, message->code_detail); - } -} - -static int _coap_message_list_proc(CoAPClient *client, CoAPMessage *message, uint16_t processCmd) -{ - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(client, QCLOUD_ERR_INVAL); - - HAL_MutexLock(client->lock_list_wait_ack); - - if (client->message_list->len <= 0) { - HAL_MutexUnlock(client->lock_list_wait_ack); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - ListIterator *iter; - ListNode *node = NULL; - ListNode *temp_node = NULL; - CoAPMsgSendInfo *send_info = NULL; - - if ((iter = list_iterator_new(client->message_list, LIST_TAIL)) == NULL) { - HAL_MutexUnlock(client->lock_list_wait_ack); - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); - } - - for (;;) { - node = list_iterator_next(iter); - - if (NULL != temp_node) { - list_remove(client->message_list, temp_node); - Log_i("remove node"); - temp_node = NULL; - } - - if (NULL == node) { - break; - } - - send_info = (CoAPMsgSendInfo*) node->val; - if (NULL == send_info) { - Log_e("node's value is invalid!"); - continue; - } - - if (processCmd == PROCESS_ACK_CMD) { - if (send_info->msg_id == message->msg_id) { - send_info->acked = 1; /* ACK is received */ - InitTimer(&send_info->start_time); - countdown_ms(&send_info->start_time, client->command_timeout_ms); - } - } - else if (processCmd == PROCESS_RESP_CMD) { - if (0 != send_info->token_len && send_info->token_len == message->token_len - && 0 == memcmp(send_info->token, message->token, message->token_len)) { - message->user_context = send_info->user_context; - - if (send_info->handler != NULL) { - send_info->handler(message, send_info->user_context); - } - else if (NULL != client->event_handle.h_fp) { //event handle process - CoAPEventMessage event_msg = {0}; - _event_message_type_set(&event_msg, message, processCmd); - event_msg.message = message; - message->msg_id = send_info->msg_id; - client->event_handle.h_fp(client->event_handle.context, &event_msg); - } - else { - Log_e("nether response callback nor event callback is set"); - } - - Log_d("remove the message id %d from list", send_info->msg_id); - send_info->node_state = COAP_NODE_STATE_INVALID; - } - } - else if (processCmd == PROCESS_PIGGY_CMD) { - if (send_info->msg_id == message->msg_id) { - message->user_context = send_info->user_context; - - if (send_info->handler != NULL) { - send_info->handler(message, send_info->user_context); - } - else if (NULL != client->event_handle.h_fp) { //event handle process - CoAPEventMessage event_msg = {0}; - _event_message_type_set(&event_msg, message, processCmd); - event_msg.message = (void *)(uintptr_t)(message->msg_id); - client->event_handle.h_fp(client->event_handle.context, &event_msg); - } - else { - Log_e("nether response callback nor event callback is set"); - } - - Log_d("remove the message id %d from list", send_info->msg_id); - - send_info->acked = 1; /* ACK is received */ - send_info->node_state = COAP_NODE_STATE_INVALID; - } - } - else if (processCmd == PROCESS_WAIT_CMD) { - - if (COAP_NODE_STATE_INVALID == send_info->node_state) { - temp_node = node; - continue; - } - - if (left_ms(&send_info->start_time) > 0) { - continue; - } - - if (send_info->retrans_count < client->max_retry_count && (0 == send_info->acked)) { - InitTimer(&send_info->start_time); - countdown_ms(&send_info->start_time, client->command_timeout_ms); - send_info->retrans_count++; - Log_d("start to retansmit the message id %d len %d", send_info->msg_id, send_info->msglen); - size_t written_len = 0; - int ret = client->network_stack.write(&client->network_stack, send_info->message, send_info->msglen, - left_ms(&send_info->start_time), &written_len); - if (ret != QCLOUD_RET_SUCCESS) { - Log_e("retansmit the message id %d failed.", send_info->msg_id, send_info->msglen); - continue; - } - } - else { - send_info->node_state = COAP_NODE_STATE_INVALID; - temp_node = node; - - if (send_info->handler != NULL) { - message->type = COAP_MSG_ACK; - message->user_context = send_info->user_context; - message->code_class = COAP_MSG_SDKINTERNAL_ERR; - message->code_detail = COAP_MSG_CODE_600_TIMEOUT; - message->msg_id = send_info->msg_id; - send_info->handler(message, send_info->user_context); - } - else if (NULL != client->event_handle.h_fp){ - CoAPEventMessage event_msg = {0}; - if (send_info->acked) { - event_msg.event_type = COAP_EVENT_SEPRESP_TIMEOUT; - } - else { - event_msg.event_type = COAP_EVENT_ACK_TIMEOUT; - } - event_msg.message = (void *)(uintptr_t)(send_info->msg_id); - client->event_handle.h_fp(client->event_handle.context, &event_msg); - } - else { - Log_e("nether response callback nor event callback is set"); - } - - continue; - } - } - } - - list_iterator_destroy(iter); - HAL_MutexUnlock(client->lock_list_wait_ack); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -/** - * @brief Send ACK to server - * - * @param client reference to CoAP client - * @param msgId msg Id - * - * @returns Operation status - * @retval 0 Success - * @retval <0 Error - */ -static int _coap_client_send_ack(CoAPClient *client, int msgId) { - IOT_FUNC_ENTRY - - CoAPMessage ack = DEFAULT_COAP_MESSAGE; - int ret = 0; - - if ((ret = coap_message_type_set(&ack, COAP_MSG_ACK)) != QCLOUD_RET_SUCCESS) - { - coap_message_destroy(&ack); - IOT_FUNC_EXIT_RC(ret) - } - - if ((ret = coap_message_id_set(&ack, msgId)) != QCLOUD_RET_SUCCESS) - { - coap_message_destroy(&ack); - IOT_FUNC_EXIT_RC(ret) - } - - ret = coap_message_send(client, &ack); - coap_message_destroy(&ack); - - IOT_FUNC_EXIT_RC(ret) -} - -static int _coap_piggyresp_message_handle(CoAPClient *client, CoAPMessage *message) { - IOT_FUNC_ENTRY - - int rc = _coap_message_list_proc(client, message, PROCESS_PIGGY_CMD); - - IOT_FUNC_EXIT_RC(rc) -} - -static int _coap_ack_message_handle(CoAPClient *client, CoAPMessage *message) { - IOT_FUNC_ENTRY - - int rc = _coap_message_list_proc(client, message, PROCESS_ACK_CMD); - - IOT_FUNC_EXIT_RC(rc) -} - -static int _coap_resp_message_handle(CoAPClient *client, CoAPMessage *message) { - IOT_FUNC_ENTRY - - int rc = 0; - - if (COAP_MSG_CON == message->type) { - rc = _coap_client_send_ack(client, message->msg_id); - Log_d("send ack message for id: %d rc: %d", message->msg_id, rc); - } - - rc = _coap_message_list_proc(client, message, PROCESS_RESP_CMD); - - IOT_FUNC_EXIT_RC(rc) -} - -static void _coap_message_handle(CoAPClient *client, unsigned char *buf, unsigned short datalen) { - IOT_FUNC_ENTRY - - int rc = QCLOUD_RET_SUCCESS; - CoAPMessage recv_message; - memset(&recv_message, 0x00, sizeof(CoAPMessage)); - - if ((rc = deserialize_coap_message(&recv_message, (char*)buf, datalen)) != QCLOUD_RET_SUCCESS) { - Log_e("deserialize message failed: %d", rc); - } - - if (recv_message.type == COAP_MSG_ACK && COAP_MSG_IS_EMPTY_ACK(&recv_message)) { //empty ACK - Log_d("receive coap ACK message, id %d", recv_message.msg_id); - _coap_ack_message_handle(client, &recv_message); - } - else if (recv_message.type == COAP_MSG_ACK && !COAP_MSG_IS_EMPTY(&recv_message)) { //piggy Response - Log_d("receive coap piggy ACK message, id %d", recv_message.msg_id); - _coap_piggyresp_message_handle(client, &recv_message); - } - else if (recv_message.type == COAP_MSG_CON && COAP_MSG_IS_EMPTY_RSP(&recv_message)) { //payload Response - Log_d("receive coap response message, id: %d", recv_message.msg_id); - _coap_resp_message_handle(client, &recv_message); - } - else if (recv_message.type == COAP_MSG_NON && COAP_MSG_IS_EMPTY_RSP(&recv_message)) { //payload Response - Log_d("receive coap response message, id: %d", recv_message.msg_id); - _coap_resp_message_handle(client, &recv_message); - } - else { - Log_e("not recgonized recv message type"); - } - - if (recv_message.pay_load != NULL) { - HAL_Free(recv_message.pay_load); - recv_message.pay_load_len = 0; - } - - IOT_FUNC_EXIT -} - -static int _coap_message_list_add(CoAPClient *client, CoAPMessage *message, int len) { - IOT_FUNC_ENTRY - - CoAPMsgSendInfo *send_info = (CoAPMsgSendInfo*)HAL_Malloc(sizeof(CoAPMsgSendInfo)); - if (send_info == NULL) { - Log_e("no memory to malloc SendInfo"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) - } - - send_info->node_state = COAP_NODE_STATE_NORMANL; - send_info->acked = 0; - send_info->user_context = message->user_context; - send_info->msg_id = message->msg_id; - send_info->handler = message->handler; - send_info->msglen = len; - - if (COAP_MSG_CON == message->type) { - send_info->retrans_count = 0; - InitTimer(&send_info->start_time); - countdown_ms(&send_info->start_time, client->command_timeout_ms); - } - else { - - } - - send_info->token_len = message->token_len; - memcpy(send_info->token, message->token, message->token_len); - send_info->message = (unsigned char *)HAL_Malloc(len); - - if (NULL != send_info->message) { - memcpy(send_info->message, client->send_buf, len); - } - - ListNode *node = list_node_new(send_info); - if (NULL == node) { - Log_e("run list_node_new is error!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) - } - - HAL_MutexLock(client->lock_list_wait_ack); - list_rpush(client->message_list, node); - HAL_MutexUnlock(client->lock_list_wait_ack); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int coap_message_cycle(CoAPClient *client, uint32_t timeout_ms) { - POINTER_SANITY_CHECK(client, QCLOUD_ERR_INVAL); - - int rc = coap_message_recv(client, timeout_ms); - - if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_ERR_SSL_READ_TIMEOUT) { - IOT_FUNC_EXIT_RC(rc) - } - - CoAPMessage message = DEFAULT_COAP_MESSAGE; - rc = _coap_message_list_proc(client, &message, PROCESS_WAIT_CMD); - - IOT_FUNC_EXIT_RC(rc) -} - -ssize_t coap_message_send(CoAPClient *client, CoAPMessage *message) -{ - IOT_FUNC_ENTRY - - ssize_t ret; - size_t written_len = 0; - - HAL_MutexLock(client->lock_send_buf); - - if ((ret = serialize_coap_message(message, (char*)client->send_buf, - client->send_buf_size)) < 0) - { - Log_e("failed to serialize coap message"); - HAL_MutexUnlock(client->lock_send_buf); - IOT_FUNC_EXIT_RC(ret) - } - - ret = client->network_stack.write(&client->network_stack, client->send_buf, - ret, 0, &written_len); - - if (ret == QCLOUD_RET_SUCCESS) { - if (message->type == COAP_MSG_CON && message->code_class == COAP_MSG_REQ) { - ret = _coap_message_list_add(client, message, written_len); - Log_i("add coap message id: %d into wait list ret: %d", message->msg_id, ret); - } else { - Log_i("The message doesn't need to be retransmitted"); - } - } - else { - Log_e("coap net fail to write rc: %d", ret); - } - - HAL_MutexUnlock(client->lock_send_buf); - - IOT_FUNC_EXIT_RC(ret) -} - -ssize_t coap_message_recv(CoAPClient *client, uint32_t timeout_ms) -{ - IOT_FUNC_ENTRY - - size_t read_lean = 0; - int rc = 0; - - rc = client->network_stack.read(&client->network_stack, client->recv_buf, client->read_buf_size, timeout_ms, &read_lean); - switch(rc) { - case QCLOUD_RET_SUCCESS: - _coap_message_handle(client, client->recv_buf, read_lean); - break; - case QCLOUD_ERR_SSL_READ_TIMEOUT: - break; - default: - break; - } - - IOT_FUNC_EXIT_RC(rc) -} - -#ifdef __cplusplus -} -#endif - - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c deleted file mode 100644 index 0d68ddb5..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#include "mqtt_client.h" - -#include "qcloud_iot_ca.h" -#include "qcloud_iot_device.h" -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_common.h" - -#include "utils_base64.h" -#include "utils_list.h" -#include "log_upload.h" -#include "lite-utils.h" - - -static char s_qcloud_iot_host[HOST_STR_LENGTH] = {0}; -#ifdef AUTH_WITH_NOTLS -static int s_qcloud_iot_port = MQTT_SERVER_PORT_NOTLS; -#else -static int s_qcloud_iot_port = MQTT_SERVER_PORT_TLS; -#endif - -#ifndef AUTH_MODE_CERT -static unsigned char sg_psk_str[DECODE_PSK_LENGTH]; -#endif - - -static int g_last_err_code = 0; - -static uint16_t _get_random_start_packet_id(void) -{ - srand((unsigned)HAL_GetTimeMs()); - return rand() % 65536 + 1; -} - -int IOT_MQTT_GetErrCode(void) -{ - return g_last_err_code; -} - -void* IOT_MQTT_Construct(MQTTInitParams *pParams) -{ - g_last_err_code = QCLOUD_ERR_INVAL; - POINTER_SANITY_CHECK(pParams, NULL); - STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); - STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); - - int rc = iot_device_info_set(pParams->product_id, pParams->device_name); - if ( rc != QCLOUD_RET_SUCCESS) { - Log_e("failed to set device info: %d", rc); - g_last_err_code = rc; - return NULL; - } - - Qcloud_IoT_Client* mqtt_client = NULL; - - // create and init MQTTClient - if ((mqtt_client = (Qcloud_IoT_Client*) HAL_Malloc (sizeof(Qcloud_IoT_Client))) == NULL) { - Log_e("malloc MQTTClient failed"); - g_last_err_code = QCLOUD_ERR_MALLOC; - return NULL; - } - - rc = qcloud_iot_mqtt_init(mqtt_client, pParams); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("mqtt init failed: %d", rc); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } - - MQTTConnectParams connect_params = DEFAULT_MQTTCONNECT_PARAMS; - connect_params.client_id = iot_device_info_get()->client_id; - // Upper limit of keep alive interval is (11.5 * 60) seconds - connect_params.keep_alive_interval = Min(pParams->keep_alive_interval_ms / 1000, 690); - connect_params.clean_session = pParams->clean_session; - connect_params.auto_connect_enable = pParams->auto_connect_enable; -#if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - size_t src_len = strlen(pParams->device_secret); - size_t len; - memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); - rc = qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); - connect_params.device_secret = (char *)sg_psk_str; - connect_params.device_secret_len = len; - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Device secret decode err, secret:%s", pParams->device_secret); - qcloud_iot_mqtt_fini(mqtt_client); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } -#endif - - rc = qcloud_iot_mqtt_connect(mqtt_client, &connect_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("mqtt connect with id: %s failed: %d", mqtt_client->options.conn_id, rc); - qcloud_iot_mqtt_fini(mqtt_client); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } - else { - Log_i("mqtt connect with id: %s success", mqtt_client->options.conn_id); - g_last_err_code = QCLOUD_RET_SUCCESS; - } - -#ifdef LOG_UPLOAD - //log subscribe topics - if (is_log_uploader_init()) { - int log_level; - rc = qcloud_get_log_level(mqtt_client, &log_level); - //rc = qcloud_log_topic_subscribe(mqtt_client); - if (rc < 0) { - Log_e("client get log topic failed: %d", rc); - } - set_log_mqtt_client((void *)mqtt_client); - - IOT_Log_Upload(true); - } -#endif - - return mqtt_client; -} - -int IOT_MQTT_Destroy(void **pClient) { - POINTER_SANITY_CHECK(*pClient, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)(*pClient); - - int rc = qcloud_iot_mqtt_disconnect(mqtt_client); - - int i = 0; - for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { - /* notify this event to topic subscriber */ - if (NULL != mqtt_client->sub_handles[i].sub_event_handler) - mqtt_client->sub_handles[i].sub_event_handler(mqtt_client, - MQTT_EVENT_CLIENT_DESTROY, mqtt_client->sub_handles[i].handler_user_data); - - if (NULL != mqtt_client->sub_handles[i].topic_filter) { - HAL_Free((void *)mqtt_client->sub_handles[i].topic_filter); - mqtt_client->sub_handles[i].topic_filter = NULL; - } - - } - -#ifdef MQTT_RMDUP_MSG_ENABLED - reset_repeat_packet_id_buffer(); -#endif - - HAL_MutexDestroy(mqtt_client->lock_generic); - HAL_MutexDestroy(mqtt_client->lock_write_buf); - - HAL_MutexDestroy(mqtt_client->lock_list_sub); - HAL_MutexDestroy(mqtt_client->lock_list_pub); - - list_destroy(mqtt_client->list_pub_wait_ack); - list_destroy(mqtt_client->list_sub_wait_ack); - - HAL_Free(*pClient); - *pClient = NULL; -#ifdef LOG_UPLOAD - set_log_mqtt_client(NULL); -#endif - Log_i("mqtt release!"); - - return rc; -} - -int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) { - - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - int rc = qcloud_iot_mqtt_yield(mqtt_client, timeout_ms); - -#ifdef LOG_UPLOAD - /* do instant log uploading if MQTT communication error */ - if (rc == QCLOUD_RET_SUCCESS) - IOT_Log_Upload(false); - else - IOT_Log_Upload(true); -#endif - - return rc; -} - -int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams) -{ - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - - return qcloud_iot_mqtt_publish(mqtt_client, topicName, pParams); -} - -int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParams) { - - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - - return qcloud_iot_mqtt_subscribe(mqtt_client, topicFilter, pParams); -} - -int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter) { - - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - - return qcloud_iot_mqtt_unsubscribe(mqtt_client, topicFilter); -} - -bool IOT_MQTT_IsConnected(void *pClient) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - - IOT_FUNC_EXIT_RC(get_client_conn_state(mqtt_client) == 1) -} - -#if 0 -static inline void _strlowr(char *str) -{ - while(*str != '\0') - { - *str = tolower(*str); - str++; - } -} -#endif - -int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); - - memset(pClient, 0x0, sizeof(Qcloud_IoT_Client)); - - - int size = HAL_Snprintf(s_qcloud_iot_host, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_MQTT_DIRECT_DOMAIN); - if (size < 0 || size > HOST_STR_LENGTH - 1) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - // enable below code for some special platform - //_strlowr(s_qcloud_iot_host); - - int i = 0; - for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { - pClient->sub_handles[i].topic_filter = NULL; - pClient->sub_handles[i].message_handler = NULL; - pClient->sub_handles[i].sub_event_handler = NULL; - pClient->sub_handles[i].qos = QOS0; - pClient->sub_handles[i].handler_user_data = NULL; - } - - if (pParams->command_timeout < MIN_COMMAND_TIMEOUT) - pParams->command_timeout = MIN_COMMAND_TIMEOUT; - if (pParams->command_timeout > MAX_COMMAND_TIMEOUT) - pParams->command_timeout = MAX_COMMAND_TIMEOUT; - pClient->command_timeout_ms = pParams->command_timeout; - - // packet id, random from [1 - 65536] - pClient->next_packet_id = _get_random_start_packet_id(); - pClient->write_buf_size = QCLOUD_IOT_MQTT_TX_BUF_LEN; - pClient->read_buf_size = QCLOUD_IOT_MQTT_RX_BUF_LEN; - pClient->is_ping_outstanding = 0; - pClient->was_manually_disconnected = 0; - pClient->counter_network_disconnected = 0; - - pClient->event_handle = pParams->event_handle; - - pClient->lock_generic = HAL_MutexCreate(); - if (NULL == pClient->lock_generic) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - set_client_conn_state(pClient, NOTCONNECTED); - - if ((pClient->lock_write_buf = HAL_MutexCreate()) == NULL) { - Log_e("create write buf lock failed."); - goto error; - } - if ((pClient->lock_list_sub = HAL_MutexCreate()) == NULL) { - Log_e("create sub list lock failed."); - goto error; - } - if ((pClient->lock_list_pub = HAL_MutexCreate()) == NULL) { - Log_e("create pub list lock failed."); - goto error; - } - - if ((pClient->list_pub_wait_ack = list_new()) == NULL) { - Log_e("create pub wait list failed."); - goto error; - } - pClient->list_pub_wait_ack->free = HAL_Free; - - if ((pClient->list_sub_wait_ack = list_new()) == NULL) { - Log_e("create sub wait list failed."); - goto error; - } - pClient->list_sub_wait_ack->free = HAL_Free; - -#ifndef AUTH_WITH_NOTLS - // device param for TLS connection -#ifdef AUTH_MODE_CERT - bool certEmpty = (pParams->cert_file == NULL || pParams->key_file == NULL); - if (certEmpty) { - Log_e("cert file or key file is empty!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - } - Log_d("cert file: %s", pParams->cert_file); - Log_d("key file: %s", pParams->key_file); - - pClient->network_stack.ssl_connect_params.cert_file = pParams->cert_file; - pClient->network_stack.ssl_connect_params.key_file = pParams->key_file; - pClient->network_stack.ssl_connect_params.ca_crt = iot_ca_get(); - pClient->network_stack.ssl_connect_params.ca_crt_len = strlen(pClient->network_stack.ssl_connect_params.ca_crt); -#else - if (pParams->device_secret != NULL) { - size_t src_len = strlen(pParams->device_secret); - size_t len; - memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); - qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); - pClient->network_stack.ssl_connect_params.psk = (char *)sg_psk_str; - pClient->network_stack.ssl_connect_params.psk_length = len; - } else { - Log_e("psk is empty!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - } - pClient->network_stack.ssl_connect_params.psk_id = iot_device_info_get()->client_id; - if (iot_device_info_get()->client_id == NULL) { - Log_e("psk id is empty!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - } - pClient->network_stack.ssl_connect_params.ca_crt = NULL; //iot_ca_get(); - pClient->network_stack.ssl_connect_params.ca_crt_len = 0; //strlen(pClient->network_stack.ssl_connect_params.ca_crt); -#endif - - pClient->network_stack.host = s_qcloud_iot_host; - pClient->network_stack.port = s_qcloud_iot_port; - pClient->network_stack.ssl_connect_params.timeout_ms = - pClient->command_timeout_ms > QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT ? pClient->command_timeout_ms:QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT; - -#else - pClient->network_stack.host = s_qcloud_iot_host; - pClient->network_stack.port = s_qcloud_iot_port; -#endif - - // init network stack - qcloud_iot_mqtt_network_init(&(pClient->network_stack)); - - // ping timer and reconnect delay timer - InitTimer(&(pClient->ping_timer)); - InitTimer(&(pClient->reconnect_delay_timer)); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); - -error: - if (pClient->list_pub_wait_ack) { - pClient->list_pub_wait_ack->free(pClient->list_pub_wait_ack); - pClient->list_pub_wait_ack = NULL; - } - if (pClient->list_sub_wait_ack) { - pClient->list_sub_wait_ack->free(pClient->list_sub_wait_ack); - pClient->list_sub_wait_ack = NULL; - } - if (pClient->lock_generic) { - HAL_MutexDestroy(pClient->lock_generic); - pClient->lock_generic = NULL; - } - if (pClient->lock_list_sub) { - HAL_MutexDestroy(pClient->lock_list_sub); - pClient->lock_list_sub = NULL; - } - if (pClient->lock_list_pub) { - HAL_MutexDestroy(pClient->lock_list_pub); - pClient->lock_list_pub = NULL; - } - if (pClient->lock_write_buf) { - HAL_MutexDestroy(pClient->lock_write_buf); - pClient->lock_write_buf = NULL; - } - - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) -} - -int qcloud_iot_mqtt_fini(Qcloud_IoT_Client *mqtt_client) -{ - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(mqtt_client, QCLOUD_ERR_INVAL); - - HAL_MutexDestroy(mqtt_client->lock_generic); - HAL_MutexDestroy(mqtt_client->lock_write_buf); - - HAL_MutexDestroy(mqtt_client->lock_list_sub); - HAL_MutexDestroy(mqtt_client->lock_list_pub); - - list_destroy(mqtt_client->list_pub_wait_ack); - list_destroy(mqtt_client->list_sub_wait_ack); - - Log_i("release mqtt client resources"); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - pClient->options.auto_connect_enable = (uint8_t) value; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - bool is_enabled = false; - if (pClient->options.auto_connect_enable == 1) { - is_enabled = true; - } - - IOT_FUNC_EXIT_RC(is_enabled); -} - -int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - IOT_FUNC_EXIT_RC(pClient->counter_network_disconnected); -} - -int qcloud_iot_mqtt_reset_network_disconnected_count(Qcloud_IoT_Client *pClient) { - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - - pClient->counter_network_disconnected = 0; - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/dynreg/dynreg.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/dynreg/dynreg.c deleted file mode 100644 index 13fdb709..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/dynreg/dynreg.c +++ /dev/null @@ -1,501 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#include "qcloud_iot_ca.h" -#include "qcloud_iot_device.h" -#include "qcloud_iot_common.h" -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" -#include "utils_httpc.h" -#include "utils_hmac.h" -#include "utils_aes.h" -#include "lite-utils.h" -#include "utils_base64.h" - - -#define REG_URL_MAX_LEN (128) -#define DYN_REG_SIGN_LEN (64) -#define DYN_BUFF_DATA_MORE (10) -#define BASE64_ENCODE_OUT_LEN(x) (((x+3)*4)/3) -#define DYN_REG_RES_HTTP_TIMEOUT_MS (2000) -#define FILE_PATH_MAX_LEN (128) - -#ifdef AUTH_MODE_CERT -#define DYN_RESPONSE_BUFF_LEN (5*1024) -#define DECODE_BUFF_LEN (5*1024) -#else -#define DYN_RESPONSE_BUFF_LEN (256) -#define DECODE_BUFF_LEN (256) -#endif - - -/* Knuth's TAOCP section 3.6 */ -#define M ((1U<<31) -1) -#define A 48271 -#define Q 44488 // M/A -#define R 3399 // M%A; R < Q !!! - -#define CODE_RESAULT "code" -#define ENCRYPT_TYPE "encryptionType" -#define PSK_DATA "psk" -#define CERT_DATA "clientCert" -#define KEY_DATA "clientKey" - -typedef enum { - eCERT_TYPE = 1, - ePSK_TYPE = 2, -}eAuthType; - -/*Global value*/ -static unsigned int _seed=1; - -int rand_r(unsigned int* seed) -{ - int32_t X; - - X = *seed; - X = A*(X%Q) - R * (int32_t) (X/Q); - if (X < 0) - X += M; - - *seed = X; - return X; -} - -int rand_d(void) -{ - return rand_r(&_seed); -} - -void srand_d(unsigned int i) -{ - _seed=i; -} - -static int _get_json_resault_code(char *json) -{ - int resault = -1; - char *v = LITE_json_value_of(CODE_RESAULT, json); - - if (v == NULL) - { - Log_e("Invalid json content: %s", json); - return -1; - } - - if (LITE_get_int32(&resault, v) != QCLOUD_RET_SUCCESS) - { - Log_e("Invalid json content: %s", json); - HAL_Free(v); - return -1; - } - - HAL_Free(v); - - return resault; -} - -static int _get_json_encry_type(char *json) -{ - int type = -1; - char *v = LITE_json_value_of(ENCRYPT_TYPE, json); - - if (v == NULL) { - Log_e("Get encry type fail, %s", json); - return -1; - } - - if (LITE_get_int32(&type, v) != QCLOUD_RET_SUCCESS) { - Log_e("Invalid json content: %s", json); - HAL_Free(v); - return -1; - } - - HAL_Free(v); - - return type; -} - -#ifndef AUTH_MODE_CERT - -static char * _get_json_psk(char *json) -{ - - char *psk = LITE_json_value_of(PSK_DATA, json); - - if (psk == NULL) { - Log_e("Get psk fail: %s", json); - } - - return psk; -} - -#else -static char * _get_json_cert_data(char *json) -{ - - char *cert = LITE_json_value_of(CERT_DATA, json); - - if (cert == NULL) { - Log_e("Get clientCert fail: %s", json); - } - - return cert; -} - -static char * _get_json_key_data(char *json) -{ - - char *key = LITE_json_value_of(KEY_DATA, json); - - if (key == NULL) { - Log_e("Get clientCert fail: %s", json); - } - - return key; -} - -/*\\n in data change to '\n'*/ -static void _deal_transfer(char *data, uint32_t dataLen) -{ - int i; - - for(i = 0; i < dataLen; i++){ - if((data[i] == '\\')&&(data[i+1] == 'n')){ - data[i] = ' '; - data[i+1] = '\n'; - } - } - -} - -static int _cert_file_save(const char *fileName, char *data, uint32_t dataLen) -{ - FILE *fp; - char filePath[FILE_PATH_MAX_LEN]; - uint32_t len; - int Ret = QCLOUD_ERR_FAILURE; - - - memset(filePath, 0, FILE_PATH_MAX_LEN); - HAL_Snprintf(filePath, FILE_PATH_MAX_LEN, "./certs/%s", fileName); - - if( ( fp = fopen(filePath, "w+" ) ) == NULL ) { - Log_e("fail to open file %s", fileName); - goto exit; - } - - _deal_transfer(data, dataLen); - len =fprintf(fp,"%s",data); - fclose(fp); - - if(len == dataLen){ - Log_d("save %s file succes", fileName); - Ret = QCLOUD_RET_SUCCESS; - } - -exit: - return Ret; -} - -#endif - -static int _parse_devinfo(char *jdoc, DeviceInfo *pDevInfo) -{ - int ret = 0; - size_t len; - int datalen; - int enType; - unsigned int keybits; - char key[UTILS_AES_BLOCK_LEN + 1]; - char decodeBuff[DECODE_BUFF_LEN] = {0}; - unsigned char iv[16]; - char *payload = NULL; - -#ifdef AUTH_MODE_CERT - char *clientCert; - char *clientKey; -#else - char *psk; -#endif - - Log_d("recv: %s", jdoc); - - ret = _get_json_resault_code(jdoc); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("response err, ret:%d", ret); - goto exit; - } - - payload = LITE_json_value_of("payload", jdoc); - if (payload == NULL) { - Log_e("Invalid json content: %s", jdoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - }else{ - Log_d("payload:%s", payload); - } - - ret = qcloud_iot_utils_base64decode((uint8_t *)decodeBuff, sizeof(decodeBuff), &len, (uint8_t *)payload, strlen(payload)); - if (ret != QCLOUD_RET_SUCCESS) { - Log_e("Response decode err, response:%s", payload); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - datalen = len + (UTILS_AES_BLOCK_LEN - len%UTILS_AES_BLOCK_LEN); - keybits = AES_KEY_BITS_128; - memset(key, 0, UTILS_AES_BLOCK_LEN); - strncpy(key, pDevInfo->product_secret, UTILS_AES_BLOCK_LEN); - memset( iv , '0', UTILS_AES_BLOCK_LEN); - ret = utils_aes_cbc((uint8_t *)decodeBuff, datalen, (uint8_t *)decodeBuff, - DECODE_BUFF_LEN, UTILS_AES_DECRYPT, (uint8_t *)key, keybits, iv); - if(QCLOUD_RET_SUCCESS == ret){ - //Log_d("The decrypted data is:%s", decodeBuff); - - }else{ - Log_e("data decry err,ret:%d", ret); - goto exit; - } - - enType = _get_json_encry_type(decodeBuff); - if(enType < 0){ - Log_e("invlid encryt type, decrypt maybe faild"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - -#ifdef AUTH_MODE_CERT - if(eCERT_TYPE != enType){ - Log_e("encryt type should be cert type"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - clientCert = _get_json_cert_data(decodeBuff); - if(NULL != clientCert){ - memset(pDevInfo->dev_cert_file_name, 0, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - HAL_Snprintf(pDevInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME, "%s_cert.crt", pDevInfo->device_name); - if(QCLOUD_RET_SUCCESS != _cert_file_save(pDevInfo->dev_cert_file_name, clientCert, strlen(clientCert))){ - Log_e("save %s file fail", pDevInfo->dev_cert_file_name); - ret = QCLOUD_ERR_FAILURE; - } - - HAL_Free(clientCert); - - }else{ - Log_e("Get clientCert data fail"); - ret = QCLOUD_ERR_FAILURE; - } - - clientKey = _get_json_key_data(decodeBuff); - if(NULL != clientKey){ - memset(pDevInfo->dev_key_file_name, 0, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - HAL_Snprintf(pDevInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME, "%s_private.key", pDevInfo->device_name); - if(QCLOUD_RET_SUCCESS != _cert_file_save(pDevInfo->dev_key_file_name, clientKey, strlen(clientKey))){ - Log_e("save %s file fail", pDevInfo->dev_key_file_name); - ret = QCLOUD_ERR_FAILURE; - } - - HAL_Free(clientKey); - - }else{ - Log_e("Get clientCert data fail"); - ret = QCLOUD_ERR_FAILURE; - } - -#else - if(ePSK_TYPE != enType){ - Log_e("encryt type should be psk type"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - psk = _get_json_psk(decodeBuff); - if(NULL != psk){ - if(strlen(psk) > MAX_SIZE_OF_DEVICE_SECRET){ - Log_e("psk exceed max len,%s", psk); - strcpy(pDevInfo->device_secret, psk); - }else{ - strncpy(pDevInfo->device_secret, psk, MAX_SIZE_OF_DEVICE_SECRET); - pDevInfo->device_secret[MAX_SIZE_OF_DEVICE_SECRET] = '\0'; - } - HAL_Free(psk); - }else{ - Log_e("Get psk data fail"); - } -#endif -exit: - - if(payload){ - HAL_Free(payload); - } - - return ret; -} - -static int _post_reg_request_by_http(char *request_buf, DeviceInfo *pDevInfo) -{ - int Ret = 0; - HTTPClient http_client; /* http client */ - HTTPClientData http_data; /* http client data */ - - const char *url_format = "%s://%s/register/dev"; - char url[REG_URL_MAX_LEN] = {0}; - int port; - const char *ca_crt = NULL; - char respbuff[DYN_RESPONSE_BUFF_LEN]; - - /*format URL*/ -#ifndef AUTH_WITH_NOTLS - HAL_Snprintf(url, REG_URL_MAX_LEN, url_format, "https", DYN_REG_SERVER_URL); - port = DYN_REG_SERVER_PORT_TLS; - ca_crt = iot_ca_get(); -#else - HAL_Snprintf(url, REG_URL_MAX_LEN, url_format, "http", DYN_REG_SERVER_URL); - port = DYN_REG_SERVER_PORT; -#endif - - - memset((char *)&http_client, 0, sizeof(HTTPClient)); - memset((char *)&http_data, 0, sizeof(HTTPClientData)); - - http_client.header = "Accept: text/xml,application/json;*/*\r\n"; - - http_data.post_content_type = "application/x-www-form-urlencoded"; - http_data.post_buf = request_buf; - http_data.post_buf_len = strlen(request_buf); - - Ret = qcloud_http_client_common(&http_client, url, port, ca_crt, HTTP_POST, &http_data); - if (QCLOUD_RET_SUCCESS != Ret) { - Log_e("qcloud_http_client_common failed, Ret = %d", Ret); - return Ret; - } - - memset(respbuff, 0, DYN_RESPONSE_BUFF_LEN); - http_data.response_buf_len = DYN_RESPONSE_BUFF_LEN; - http_data.response_buf = respbuff; - - Ret = qcloud_http_recv_data(&http_client, DYN_REG_RES_HTTP_TIMEOUT_MS, &http_data); - if (QCLOUD_RET_SUCCESS != Ret) { - Log_e("dynamic register response fail, Ret = %d", Ret); - } else { - /*Parse dev info*/ - Ret = _parse_devinfo(http_data.response_buf, pDevInfo); - if(QCLOUD_RET_SUCCESS != Ret){ - Log_e("parse device info err"); - } - } - - qcloud_http_client_close(&http_client); - - return Ret; -} - -static int _cal_dynreg_sign(DeviceInfo *pDevInfo, char *signout, int max_signlen, int nonce, uint32_t timestamp) -{ - int sign_len; - size_t olen = 0; - char *pSignSource = NULL; - const char *sign_fmt ="deviceName=%s&nonce=%d&productId=%s×tamp=%d"; - char sign[DYN_REG_SIGN_LEN] = {0}; - - /*format sign data*/ - sign_len = strlen(sign_fmt) + strlen(pDevInfo->device_name) + strlen(pDevInfo->product_id)+ sizeof(int) + sizeof(uint32_t) + DYN_BUFF_DATA_MORE; - pSignSource = HAL_Malloc(sign_len); - if (pSignSource == NULL) { - Log_e("malloc sign source buff fail"); - return QCLOUD_ERR_FAILURE; - } - memset(pSignSource, 0, sign_len); - HAL_Snprintf((char *)pSignSource, sign_len, sign_fmt, pDevInfo->device_name, nonce, pDevInfo->product_id, timestamp); - - /*cal hmac sha1*/ - utils_hmac_sha1(pSignSource, strlen(pSignSource), sign, pDevInfo->product_secret, strlen(pDevInfo->product_secret)); - - /*base64 encode*/ - qcloud_iot_utils_base64encode((uint8_t *)signout, max_signlen, &olen, (const uint8_t *)sign, strlen(sign)); - - HAL_Free(pSignSource); - - return (olen > max_signlen)?QCLOUD_ERR_FAILURE:QCLOUD_RET_SUCCESS; -} - -int IOT_DynReg_Device(DeviceInfo *pDevInfo) -{ - const char *para_format = "{\"deviceName\":\"%s\",\"nonce\":%d,\"productId\":\"%s\",\"timestamp\":%d,\"signature\":\"%s\"}"; - int nonce; - int Ret; - uint32_t timestamp; - int len; - char sign[DYN_REG_SIGN_LEN] = {0}; - char *pRequest = NULL; - - if(strlen(pDevInfo->product_secret) < UTILS_AES_BLOCK_LEN){ - Log_e("product key inllegal"); - return QCLOUD_ERR_FAILURE; - } - - srand_d(HAL_GetTimeMs()); - nonce = rand_d(); - timestamp = time(0); - - /*cal sign*/ - if(QCLOUD_RET_SUCCESS == _cal_dynreg_sign(pDevInfo, sign, DYN_REG_SIGN_LEN, nonce, timestamp)){ - Log_d("sign:%s", sign); - }else{ - Log_e("cal sign fail"); - return QCLOUD_ERR_FAILURE; - } - - /*format http request*/ - len = strlen(para_format) + strlen(pDevInfo->product_id) + strlen(pDevInfo->device_name) + sizeof(int)\ - + sizeof(uint32_t) + strlen(sign) + DYN_BUFF_DATA_MORE; - pRequest = HAL_Malloc(len); - if(!pRequest){ - Log_e("malloc request memory fail"); - return QCLOUD_ERR_FAILURE; - } - memset(pRequest, 0, len); - HAL_Snprintf(pRequest, len, para_format, pDevInfo->device_name, nonce, pDevInfo->product_id, timestamp, sign); - Log_d("request:%s",pRequest); - - Log_d("resbuff len:%d", DYN_RESPONSE_BUFF_LEN); - /*post request*/ - Ret =_post_reg_request_by_http(pRequest, pDevInfo); - if(QCLOUD_RET_SUCCESS == Ret){ - Log_d("request dev info success"); - }else{ - Log_e("request dev info fail"); - } - - HAL_Free(pRequest); - - return Ret; -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_api.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_api.c deleted file mode 100644 index a8e0bc76..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_api.c +++ /dev/null @@ -1,299 +0,0 @@ -#include - -#include "utils_param_check.h" - -#include "gateway_common.h" -#include "mqtt_client.h" - - -Gateway g_gateway = {0}; - -void _gateway_event_handler(void *client, void *context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; - Gateway* gateway = (Gateway*)context; - - POINTER_SANITY_CHECK_RTN(context); - POINTER_SANITY_CHECK_RTN(msg); - MQTTMessage* topic_info = (MQTTMessage*)msg->msg; - - switch (msg->event_type) { - case MQTT_EVENT_SUBCRIBE_SUCCESS: - case MQTT_EVENT_UNSUBCRIBE_SUCCESS: - Log_d("gateway sub|unsub(%d) success, packet-id=%u", msg->event_type, (unsigned int)packet_id); - if (gateway->gateway_data.sync_status == packet_id) { - gateway->gateway_data.sync_status = 0; - return; - } - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: - case MQTT_EVENT_SUBCRIBE_NACK: - case MQTT_EVENT_UNSUBCRIBE_NACK: - Log_d("gateway timeout|nack(%d) event, packet-id=%u", msg->event_type, (unsigned int)packet_id); - if (gateway->gateway_data.sync_status == packet_id) { - gateway->gateway_data.sync_status = -1; - return; - } - break; - - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_d("gateway topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - topic_info->topic_len, - topic_info->ptopic, - topic_info->payload_len, - topic_info->payload); - break; - - default: - break; - } - - if (gateway->event_handle.h_fp != NULL) { - gateway->event_handle.h_fp(client, gateway->event_handle.context, msg); - } - - return; -} - - -void* IOT_Gateway_Construct(GatewayInitParam* init_param) -{ - int rc = 0; - GatewayParam param = DEFAULT_GATEWAY_PARAMS; - POINTER_SANITY_CHECK(init_param, NULL); - - if (g_gateway.is_construct) { - Log_e("gateway have been construct"); - IOT_FUNC_EXIT_RC(NULL); - } - - memset(&g_gateway, 0, sizeof(Gateway)); - - /* replace user event handle */ - g_gateway.event_handle.h_fp = init_param->init_param.event_handle.h_fp; - g_gateway.event_handle.context = init_param->init_param.event_handle.context; - - /* set _gateway_event_handler as mqtt event handle */ - init_param->init_param.event_handle.h_fp = _gateway_event_handler; - init_param->init_param.event_handle.context = &g_gateway; - - /* construct MQTT client */ - g_gateway.mqtt = IOT_MQTT_Construct(&init_param->init_param); - if (NULL == g_gateway.mqtt) { - Log_e("construct MQTT failed"); - IOT_FUNC_EXIT_RC(NULL); - } - - /* subscribe default topic */ - param.product_id = init_param->init_param.product_id; - param.device_name = init_param->init_param.device_name; - rc = gateway_subscribe_unsubscribe_default(&g_gateway, ¶m); - if (QCLOUD_RET_SUCCESS != rc) { - Log_e("subscribe default topic failed"); - IOT_Gateway_Destroy((void*)&g_gateway); - IOT_FUNC_EXIT_RC(NULL); - } - - g_gateway.is_construct = 1; - - return &g_gateway; -} - - -int IOT_Gateway_Subdev_Online(void *client, GatewayParam* param) -{ - int rc = 0; - char topic[MAX_SIZE_OF_CLOUD_TOPIC +1] = {0}; - char payload[GATEWAY_PAYLOAD_BUFFER_LEN +1] = {0}; - int size = 0; - SubdevSession* session = NULL; - PublishParams params = DEFAULT_PUB_PARAMS; - Gateway* gateway = (Gateway*)client; - - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); - - STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); - - session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); - if (NULL == session) { - Log_d("there is no session, create a new session"); - - /* create subdev session */ - session = subdev_add_session(gateway, param->subdev_product_id, param->subdev_device_name); - if (NULL == session) { - Log_e("create session error!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_CREATE_SESSION_FAIL); - } - } else { - if (SUBDEV_SEESION_STATUS_ONLINE == session->session_status) { - Log_i("device have online"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_ONLINE); - } - } - - - size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC+1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, param->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) - { - Log_e("buf size < topic length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - - size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN+1, GATEWAY_PAYLOAD_STATUS_FMT, "online", param->subdev_product_id, param->subdev_device_name); - if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) - { - Log_e("buf size < payload length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - size = HAL_Snprintf(gateway->gateway_data.online.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, param->subdev_product_id, param->subdev_device_name); - if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) - { - Log_e("buf size < client_id length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - gateway->gateway_data.online.result = -1; - - params.qos = QOS0; - params.payload_len = strlen(payload); - params.payload = (char *) payload; - - - /* publish packet */ - rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.online.result); - if (QCLOUD_RET_SUCCESS != rc) { - subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); - IOT_FUNC_EXIT_RC(rc); - } - - session->session_status = SUBDEV_SEESION_STATUS_ONLINE; - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - - -int IOT_Gateway_Subdev_Offline(void *client, GatewayParam* param) -{ - int rc = 0; - char topic[MAX_SIZE_OF_CLOUD_TOPIC+1] = {0}; - char payload[GATEWAY_PAYLOAD_BUFFER_LEN+1] = {0}; - int size = 0; - SubdevSession* session = NULL; - Gateway* gateway = (Gateway*)client; - - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); - - STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); - - session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); - if (NULL == session) { - Log_d("no session, can not offline"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_NO_EXIST); - - } - if (SUBDEV_SEESION_STATUS_OFFLINE == session->session_status) { - Log_i("device have offline"); - /* free session */ - subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_OFFLINE); - } - - size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC+1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, param->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) - { - Log_e("buf size < topic length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - - size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN+1, GATEWAY_PAYLOAD_STATUS_FMT, "offline", param->subdev_product_id, param->subdev_device_name); - if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) - { - Log_e("buf size < payload length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - size = HAL_Snprintf(gateway->gateway_data.offline.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, param->subdev_product_id, param->subdev_device_name); - if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) - { - Log_e("buf size < client_id length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - gateway->gateway_data.offline.result = -1; - - - - PublishParams params = DEFAULT_PUB_PARAMS; - params.qos = QOS0; - params.payload_len = strlen(payload); - params.payload = (char *) payload; - - /* publish packet */ - rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.offline.result); - if (QCLOUD_RET_SUCCESS != rc) { - IOT_FUNC_EXIT_RC(rc); - } - - session->session_status = SUBDEV_SEESION_STATUS_OFFLINE; - - /* free session */ - subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - - -int IOT_Gateway_Destroy(void *client) -{ - Gateway* gateway = (Gateway*)client; - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - - return IOT_MQTT_Destroy(&gateway->mqtt); -} - - -int IOT_Gateway_Yield(void *client, uint32_t timeout_ms) -{ - Gateway* gateway = (Gateway*)client; - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - - return IOT_MQTT_Yield(gateway->mqtt, timeout_ms); -} - -int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params) -{ - Gateway* gateway = (Gateway*)client; - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - - return IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); -} - - -int IOT_Gateway_Unsubscribe(void *client, char *topic_filter) -{ - Gateway* gateway = (Gateway*)client; - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - - return IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); -} - - -int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params) -{ - Gateway* gateway = (Gateway*)client; - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - - return IOT_MQTT_Publish(gateway->mqtt, topic_name, params); - -} - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_common.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_common.c deleted file mode 100644 index 176f8b89..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/gateway/gateway_common.c +++ /dev/null @@ -1,343 +0,0 @@ - -#include "lite-utils.h" -#include "mqtt_client.h" -#include "gateway_common.h" - - -static char cloud_rcv_buf[GATEWAY_RECEIVE_BUFFER_LEN]; - - -static bool get_json_type(char *json, char **v) { - *v= LITE_json_value_of("type", json); - return *v == NULL ? false : true; -} - -static bool get_json_devices(char *json, char **v) { - *v = LITE_json_value_of("payload.devices", json); - return *v == NULL ? false: true; -} - -static bool get_json_result(char *json, int32_t* res) { - char *v = LITE_json_value_of("result", json); - if (v == NULL) { - return false; - } - if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { - HAL_Free(v); - return false; - } - HAL_Free(v); - return true; -} - -static bool get_json_product_id(char *json, char **v) { - *v = LITE_json_value_of("product_id", json); - return *v == NULL ? false: true; -} - - -static bool get_json_device_name(char *json, char **v) { - *v = LITE_json_value_of("device_name", json); - return *v == NULL ? false: true; -} - -static void _gateway_message_handler(void *client, MQTTMessage *message, void *user_data) -{ - Qcloud_IoT_Client *mqtt = NULL; - Gateway *gateway = NULL; - char *topic = NULL; - size_t topic_len = 0; - int cloud_rcv_len = 0; - char *type = NULL; - char *devices = NULL, *devices_strip = NULL; - char *product_id = NULL; - char *device_name = NULL; - int32_t result = 0; - char client_id[MAX_SIZE_OF_CLIENT_ID+1] = {0}; - int size = 0; - - POINTER_SANITY_CHECK_RTN(client); - POINTER_SANITY_CHECK_RTN(message); - - mqtt = (Qcloud_IoT_Client *)client; - gateway = (Gateway*)mqtt->event_handle.context; - POINTER_SANITY_CHECK_RTN(gateway); - - topic = (char *)message->ptopic; - topic_len = message->topic_len; - if (NULL == topic || topic_len <= 0) { - Log_e("topic == NULL or topic_len <= 0."); - return; - } - - if (message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN) { - Log_e("message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN."); - return; - } - - cloud_rcv_len = Min(GATEWAY_RECEIVE_BUFFER_LEN - 1, message->payload_len); - memcpy(cloud_rcv_buf, message->payload, cloud_rcv_len + 1); - cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string - - if (!get_json_type(cloud_rcv_buf, &type)) - { - Log_e("Fail to parse type from msg: %s", cloud_rcv_buf); - return; - } - - if (!get_json_devices(cloud_rcv_buf, &devices)) - { - Log_e("Fail to parse devices from msg: %s", cloud_rcv_buf); - HAL_Free(type); - return; - } - - if(devices[0] == '[') { - devices_strip = devices+1; - } else { - devices_strip = devices; - } - - if (!get_json_result(devices_strip, &result)) { - Log_e("Fail to parse result from msg: %s", cloud_rcv_buf); - HAL_Free(type); - HAL_Free(devices); - return; - } - if (!get_json_product_id(devices_strip, &product_id)) { - Log_e("Fail to parse product_id from msg: %s", cloud_rcv_buf); - HAL_Free(type); - HAL_Free(devices); - return; - } - if (!get_json_device_name(devices_strip, &device_name)) { - Log_e("Fail to parse device_name from msg: %s", cloud_rcv_buf); - HAL_Free(type); - HAL_Free(devices); - HAL_Free(product_id); - return; - } - - size = HAL_Snprintf(client_id, MAX_SIZE_OF_CLIENT_ID+1, GATEWAY_CLIENT_ID_FMT, product_id, device_name); - if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID){ - Log_e("generate client_id fail."); - HAL_Free(type); - HAL_Free(devices); - HAL_Free(product_id); - HAL_Free(device_name); - return; - } - - - if (strncmp(type, "online", sizeof("online")-1) == 0) { - if(strncmp(client_id, gateway->gateway_data.online.client_id, size) == 0) { - Log_i("client_id(%s), online success. result %d", client_id, result); - gateway->gateway_data.online.result = result; - } - } else if(strncmp(type, "offline", sizeof("offline")-1) == 0) { - if(strncmp(client_id, gateway->gateway_data.offline.client_id, size) == 0) { - Log_i("client_id(%s), offline success. result %d", client_id, result); - gateway->gateway_data.offline.result = result; - } - } - - HAL_Free(type); - HAL_Free(devices); - HAL_Free(product_id); - HAL_Free(device_name); - return; - -} - -int gateway_subscribe_unsubscribe_topic(Gateway *gateway, char *topic_filter, SubscribeParams *params, int is_subscribe) -{ - int rc = 0; - int loop_count = 0; - uint32_t status = -1; - - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(params, QCLOUD_ERR_INVAL); - - STRING_PTR_SANITY_CHECK(topic_filter, QCLOUD_ERR_INVAL); - - params->qos = QOS1; - gateway->gateway_data.sync_status = status; - - if (is_subscribe) { - /* subscribe */ - rc = IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); - } else { - /* unsubscribe */ - rc = IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); - } - - if (rc < 0) { - Log_e("subscribe or un(%d), result(%d)", is_subscribe, rc); - IOT_FUNC_EXIT_RC(rc); - } - - gateway->gateway_data.sync_status = status = rc; - while (status == gateway->gateway_data.sync_status) { - if (loop_count > GATEWAY_LOOP_MAX_COUNT) { - Log_i("loop max count, time out"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - IOT_Gateway_Yield(gateway, 200); - loop_count++; - } - - if(gateway->gateway_data.sync_status != 0) { - Log_e("gateway->gateway_data.sync_status(%u) != 0", gateway->gateway_data.sync_status); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -int gateway_subscribe_unsubscribe_default(Gateway *gateway, GatewayParam *param) -{ - int rc = 0; - int size = 0; - char topic_filter[MAX_SIZE_OF_CLOUD_TOPIC+1] = {0}; - SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; - - POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); - - STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); - STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); - - //subscribe online/offline operation reslut - size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_CLOUD_TOPIC+1, GATEWAY_TOPIC_OPERATION_RESULT_FMT, param->product_id, param->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) - { - Log_e("buf size < topic length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - subscribe_params.on_message_handler = _gateway_message_handler; - rc = gateway_subscribe_unsubscribe_topic(gateway, topic_filter, &subscribe_params, IOT_TRUE); - if (QCLOUD_RET_SUCCESS != rc) { - IOT_FUNC_EXIT_RC(rc); - } - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -SubdevSession* subdev_find_session(Gateway *gateway, char *product_id, char *device_name) -{ - SubdevSession* session = NULL; - - POINTER_SANITY_CHECK(gateway, NULL); - STRING_PTR_SANITY_CHECK(product_id, NULL); - STRING_PTR_SANITY_CHECK(device_name, NULL); - - session = gateway->session_list; - - /* session is exist */ - while(session) { - if (0 == strncmp(session->product_id, product_id, strlen(product_id)) && - 0 == strncmp(session->device_name, device_name, strlen(device_name))) { - IOT_FUNC_EXIT_RC(session); - } - session = session->next; - } - - IOT_FUNC_EXIT_RC(NULL); -} - -SubdevSession* subdev_add_session(Gateway *gateway, char *product_id, char *device_name) -{ - SubdevSession* session = NULL; - - POINTER_SANITY_CHECK(gateway, NULL); - STRING_PTR_SANITY_CHECK(product_id, NULL); - STRING_PTR_SANITY_CHECK(device_name, NULL); - - session = HAL_Malloc(sizeof(SubdevSession)); - if(session == NULL) { - Log_e("Not enough memory"); - IOT_FUNC_EXIT_RC(NULL); - } - - /* add session to list */ - session->next = gateway->session_list; - gateway->session_list = session; - - int size = strlen(product_id); - strncpy(session->product_id, product_id, size); - session->product_id[size] = '\0'; - size = strlen(device_name); - strncpy(session->device_name, device_name, size); - session->device_name[size] = '\0'; - session->session_status = SUBDEV_SEESION_STATUS_INIT; - - IOT_FUNC_EXIT_RC(session); -} - -int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name) -{ - SubdevSession* cur_session = NULL; - SubdevSession* pre_session = NULL; - - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_FAILURE); - STRING_PTR_SANITY_CHECK(product_id, QCLOUD_ERR_FAILURE); - STRING_PTR_SANITY_CHECK(device_name, QCLOUD_ERR_FAILURE); - - pre_session = cur_session = gateway->session_list; - - if (NULL == cur_session) { - Log_e("session list is empty"); - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); - } - - /* session is exist */ - while(cur_session) { - if (0 == strncmp(cur_session->product_id, product_id, strlen(product_id)) && - 0 == strncmp(cur_session->device_name, device_name, strlen(device_name)) ) { - if (cur_session == gateway->session_list) { - gateway->session_list = cur_session->next; - } else { - pre_session->next = cur_session->next; - } - HAL_Free(cur_session); - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); - } - pre_session = cur_session; - cur_session = cur_session->next; - } - - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); -} - - -int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, int32_t *result) -{ - int rc = 0; - int loop_count = 0; - int32_t res = *result; - - POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); - - rc = IOT_Gateway_Publish(gateway, topic, params); - if(rc < 0) { - Log_e("publish fail."); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - /* wait for response */ - while (res == *result) { - if (loop_count > GATEWAY_LOOP_MAX_COUNT) { - Log_i("loop max count, time out."); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT); - } - - IOT_Gateway_Yield(gateway, 200); - loop_count++; - } - - if(*result != 0) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_mqtt.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_mqtt.c deleted file mode 100644 index 3c068531..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_mqtt.c +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - - -#ifdef __cplusplus -extern "C" { -#endif - -#include "config.h" -#ifdef LOG_UPLOAD - -#include - -#include "mqtt_client.h" -#include "lite-utils.h" -#include "qcloud_iot_device.h" -#include "log_upload.h" - -typedef struct _log_mqtt_state { - bool topic_sub_ok; - bool result_recv_ok; - int log_level; -}LogMQTTState; - -static LogMQTTState sg_state = { - .topic_sub_ok = false, - .result_recv_ok = false, - .log_level = eLOG_ERROR}; - - -static bool _get_json_log_level(char *json, int32_t* res) -{ - char *v = LITE_json_value_of("log_level", json); - if (v == NULL) { - Log_e("Invalid log level from JSON: %s", json); - return false; - } - if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { - Log_e("Invalid log level from JSON: %s", json); - HAL_Free(v); - return false; - } - HAL_Free(v); - return true; -} - -static void _log_level_sub_cb(void *pClient, MQTTMessage *message, void *pUserData) -{ -#define LOG_JSON_LENGTH 128 - char json_buf[LOG_JSON_LENGTH] = {0}; - int32_t json_buf_len = 0; - if (message == NULL) { - return; - } - LogMQTTState *state = (LogMQTTState *)pUserData; - - json_buf_len = Min(LOG_JSON_LENGTH - 1, message->payload_len); - memcpy(json_buf, message->payload, json_buf_len); - json_buf[json_buf_len] = '\0'; // json_parse relies on a string - - Log_d("Recv Msg Topic:%s, payload:%s", message->ptopic, json_buf); - int log_level; - if (!_get_json_log_level(json_buf, &log_level)) { - return ; - } - - switch(log_level) { - case eLOG_DISABLE: - Log_w("Upload log level change to: %d", log_level); - clear_upload_buffer(); - set_log_upload_in_comm_err(true); - IOT_Log_Set_Upload_Level(eLOG_ERROR); - break; - case eLOG_ERROR: - case eLOG_WARN: - case eLOG_INFO: - case eLOG_DEBUG: - if (log_level < IOT_Log_Get_Upload_Level()) - clear_upload_buffer(); - IOT_Log_Set_Upload_Level((LOG_LEVEL)log_level); - Log_w("Upload log level change to: %d", log_level); - set_log_upload_in_comm_err(false); - break; - default: - Log_e("Invalid log level: %d", log_level); - break; - } - - state->log_level = log_level; - state->result_recv_ok = true; - -} - -static void _log_mqtt_sub_event_handler(void *pclient, MQTTEventType event_type, void *pUserData) -{ - LogMQTTState *state = (LogMQTTState *)pUserData; - - switch(event_type) { - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_d("mqtt log topic subscribe success"); - state->topic_sub_ok = true; - break; - - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("mqtt log topic subscribe timeout"); - state->topic_sub_ok = false; - break; - - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("mqtt log topic subscribe NACK"); - state->topic_sub_ok = false; - break; - case MQTT_EVENT_UNSUBSCRIBE: - Log_i("mqtt log topic has been unsubscribed"); - state->topic_sub_ok = false;; - break; - case MQTT_EVENT_CLIENT_DESTROY: - Log_i("mqtt client has been destroyed"); - state->topic_sub_ok = false;; - break; - default: - return; - } -} - -static int _iot_log_level_get_publish(void *pClient) -{ - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - static unsigned int sg_client_token = 1; - - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - DeviceInfo *dev_info = iot_device_info_get(); - POINTER_SANITY_CHECK(dev_info, QCLOUD_ERR_INVAL); - - char topic_name[128] = {0}; - char payload_content[128] = {0}; - - HAL_Snprintf(topic_name, sizeof(topic_name), "$log/operation/%s/%s", dev_info->product_id, dev_info->device_name); - HAL_Snprintf(payload_content, sizeof(payload_content), "{\"type\": \"get_log_level\", " - "\"clientToken\": \"%s-%u\"}", dev_info->product_id, sg_client_token++); - - PublishParams pub_params = DEFAULT_PUB_PARAMS; - pub_params.qos = QOS0; - pub_params.payload = payload_content; - pub_params.payload_len = strlen(payload_content); - - return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); -} - -int qcloud_log_topic_subscribe(void *client) -{ - /* subscribe the log topic: "$log/operation/result/${productId}/${deviceName}" */ - char topic_name[128] = {0}; - int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$log/operation/result/%s/%s", - iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > sizeof(topic_name) - 1) - { - Log_e("topic content buf not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } - - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _log_level_sub_cb; - sub_params.on_sub_event_handler = _log_mqtt_sub_event_handler; - sub_params.user_data = (void *)&sg_state; - sub_params.qos = QOS0; - - return IOT_MQTT_Subscribe(client, topic_name, &sub_params); - -} - - -int qcloud_get_log_level(void* pClient, int *log_level) -{ - int ret = 0; - int cntSub = 0; - int cntRev = 0; - - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - - // subscribe log topic: $log/operation/get/${productid}/${devicename} - // skip this if the subscription is done and valid - if(!sg_state.topic_sub_ok){ - for(cntSub = 0; cntSub < 3; cntSub++){ - ret = qcloud_log_topic_subscribe(mqtt_client); - if (ret < 0) { - Log_w("qcloud_log_topic_subscribe failed: %d, cnt: %d", ret, cntSub); - continue; - } - - /* wait for sub ack */ - ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); - if(sg_state.topic_sub_ok) { - break; - } - } - } - - // return failure if subscribe failed - if(!sg_state.topic_sub_ok){ - Log_e("Subscribe log topic failed!"); - return QCLOUD_ERR_FAILURE; - } - - sg_state.result_recv_ok = false; - // publish msg to get log level - ret = _iot_log_level_get_publish(mqtt_client); - if (ret < 0) { - Log_e("client publish log topic failed :%d", ret); - return ret; - } - - do { - ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); - cntRev++; - } while(!sg_state.result_recv_ok && cntRev < 20); - - *log_level = sg_state.log_level; - if (sg_state.result_recv_ok) - ret = QCLOUD_RET_SUCCESS; - else - ret = QCLOUD_ERR_FAILURE; - - return ret; -} - -#endif - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_coap.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_coap.c deleted file mode 100644 index 5716ffe2..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_coap.c +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" - -#ifndef OTA_MQTT_CHANNEL - -#include "ota_client.h" - -#include - -typedef struct { - void *coap; - - const char *product_id; - const char *device_name; - - char topic_upgrade[OTA_MAX_TOPIC_LEN]; - - OnOTAMessageCallback msg_callback; - - void *context; -} OTA_CoAP_Struct_t; - -static void _otacoap_upgrage_cb(void* coap_message, void *pcontext) { - int ret_code = IOT_COAP_GetMessageCode(coap_message); - - switch (ret_code) { - case COAP_EVENT_RECEIVE_ACK: - Log_i("received OTA message ACK, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_RECEIVE_RESPCONTENT: - { - Log_i("received OTA message respconetent."); - char* payload = NULL; - int payload_len = 0; - int ret = -1; - ret = IOT_COAP_GetMessagePayload(coap_message, &payload, &payload_len); - if (ret == QCLOUD_RET_SUCCESS) { - OTA_CoAP_Struct_t *handle = (OTA_CoAP_Struct_t *) pcontext; - if (NULL != handle->msg_callback) { - handle->msg_callback(handle->context, payload, payload_len); - } - } - else { - Log_e("message received response, content error."); - } - } - break; - case COAP_EVENT_UNAUTHORIZED: - Log_e("coap client auth token expired or invalid, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_FORBIDDEN: - Log_e("coap URI is invalid for this device, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_INTERNAL_SERVER_ERROR: - Log_e("coap server internal error, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_ACK_TIMEOUT: - Log_e("message receive ACK timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_SEPRESP_TIMEOUT: - Log_i("message received ACK but receive response timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - default: - break; - } -} - -/* Generate topic name according to @OTATopicType, @productId, @deviceName */ -/* and then copy to @buf. */ -/* 0, successful; -1, failed */ -static int _otacoap_gen_topic_name(char *buf, size_t bufLen, const char *OTATopicType, const char *productId, const char *deviceName) -{ - IOT_FUNC_ENTRY; - - int ret; - - ret = HAL_Snprintf(buf, bufLen, "$ota/%s/%s/%s", OTATopicType, productId, deviceName); - - if(ret >= bufLen) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); - - if (ret < 0) { - Log_e("HAL_Snprintf failed"); - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); - } - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -/* report progress of OTA */ -static int _otacoap_publish(OTA_CoAP_Struct_t *handle, const char *topicType, const char *msg, bool needResp) -{ - IOT_FUNC_ENTRY; - - int ret; - char topic_name[OTA_MAX_TOPIC_LEN]; - - SendMsgParams send_params = DEFAULT_SENDMSG_PARAMS; - send_params.pay_load = (void *)msg; - send_params.pay_load_len = strlen(msg); - send_params.resp_callback = _otacoap_upgrage_cb; - send_params.need_resp = needResp; - send_params.user_context = handle; - - /* inform OTA to topic: "/ota/device/progress/$(product_id)/$(device_name)" */ - ret = _otacoap_gen_topic_name(topic_name, OTA_MAX_TOPIC_LEN, topicType, handle->product_id, handle->device_name); - if (ret < 0) { - Log_e("generate topic name of info failed"); - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); - } - - ret = IOT_COAP_SendMessage(handle->coap, topic_name, &send_params); - if (ret < 0) { - Log_e("publish failed"); - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_OSC_FAILED); - } - - IOT_FUNC_EXIT_RC(ret); -} - -void *qcloud_osc_init(const char *productId, const char *deviceName, void *channel, OnOTAMessageCallback callback, void *context) -{ - OTA_CoAP_Struct_t *h_osc = NULL; - - if (NULL == (h_osc = HAL_Malloc(sizeof(OTA_CoAP_Struct_t)))) { - Log_e("allocate for h_osc failed"); - goto do_exit; - } - - memset(h_osc, 0, sizeof(OTA_CoAP_Struct_t)); - - h_osc->coap = channel; - h_osc->product_id = productId; - h_osc->device_name = deviceName; - h_osc->msg_callback = callback; - h_osc->context = context; - - return h_osc; - -do_exit: - if (NULL != h_osc) { - HAL_Free(h_osc); - } - - return NULL; -} - -int qcloud_osc_deinit(void *handle) -{ - IOT_FUNC_ENTRY; - - if (NULL != handle) { - HAL_Free(handle); - } - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); -} - -/* report progress of OTA */ -int qcloud_osc_report_progress(void *handle, const char *msg) -{ - return _otacoap_publish(handle, "report", msg, false); -} - -/* report version of OTA firmware */ -int qcloud_osc_report_version(void *handle, const char *msg) -{ - return _otacoap_publish(handle, "report", msg, true); -} - -/* report upgrade begin of OTA firmware */ -int qcloud_osc_report_upgrade_result(void *handle, const char *msg) -{ - return _otacoap_publish(handle, "report", msg, false); -} - -/* OSC, OTA signal channel */ -#endif - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client.c deleted file mode 100644 index cc90232f..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client.c +++ /dev/null @@ -1,879 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include "shadow_client.h" - -#include -#include -#include - -#include "utils_param_check.h" -#include "shadow_client_json.h" -#include "shadow_client_common.h" - - -static void _init_request_params(RequestParams *pParams, Method method, OnRequestCallback callback, void *userContext, uint8_t timeout_sec) { - pParams->method = method; - pParams->user_context = userContext; - pParams->timeout_sec = timeout_sec; - pParams->request_callback = callback; -} - -/** - * @brief check return value of snprintf - * - * @param returnCode return value of snprintf - * @param maxSizeOfWrite max size of write buffer - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -static inline int _check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) { - - if (returnCode >= maxSizeOfWrite) { - return QCLOUD_ERR_JSON_BUFFER_TRUNCATED; - } else if (returnCode < 0) { - return QCLOUD_ERR_JSON; - } - - return QCLOUD_RET_SUCCESS; -} - -static void _shadow_event_handler(void *pclient, void *context, MQTTEventMsg *msg) { - uintptr_t packet_id = (uintptr_t)msg->msg; - Qcloud_IoT_Shadow *shadow_client = (Qcloud_IoT_Shadow *)context; - MQTTMessage* topic_info = (MQTTMessage*)msg->msg; - - switch (msg->event_type) { - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_d("shadow subscribe success, packet-id=%u", (unsigned int)packet_id); - if (shadow_client->inner_data.sync_status > 0) - shadow_client->inner_data.sync_status = 0; - break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_d("shadow subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - if (shadow_client->inner_data.sync_status > 0) - shadow_client->inner_data.sync_status = -1; - break; - case MQTT_EVENT_SUBCRIBE_NACK: - Log_d("shadow subscribe nack, packet-id=%u", (unsigned int)packet_id); - if (shadow_client->inner_data.sync_status > 0) - shadow_client->inner_data.sync_status = -1; - break; - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_d("shadow topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - topic_info->topic_len, - topic_info->ptopic, - topic_info->payload_len, - topic_info->payload); - break; - default: - /* Log_i("Should NOT arrive here."); */ - break; - } - if (shadow_client->event_handle.h_fp != NULL) - { - shadow_client->event_handle.h_fp(shadow_client, shadow_client->event_handle.context, msg); - } -} - -static void _copy_shadow_init_params_to_mqtt(MQTTInitParams *pMqttInitParams, ShadowInitParams *shadowInitParams) -{ - pMqttInitParams->device_name = shadowInitParams->device_name; - pMqttInitParams->product_id = shadowInitParams->product_id; - -#ifdef AUTH_MODE_CERT - pMqttInitParams->cert_file = shadowInitParams->cert_file; - pMqttInitParams->key_file = shadowInitParams->key_file; -#else - pMqttInitParams->device_secret = shadowInitParams->device_secret; -#endif - - pMqttInitParams->command_timeout = shadowInitParams->command_timeout; - pMqttInitParams->keep_alive_interval_ms = shadowInitParams->keep_alive_interval_ms; - pMqttInitParams->clean_session = shadowInitParams->clean_session; - pMqttInitParams->auto_connect_enable = shadowInitParams->auto_connect_enable; -} - -static void _update_ack_cb(void *pClient, Method method, RequestAck requestAck, const char *pReceivedJsonDocument, void *pUserdata) -{ - Log_d("requestAck=%d", requestAck); - - if (NULL != pReceivedJsonDocument) { - Log_d("Received Json Document=%s", pReceivedJsonDocument); - } else { - Log_d("Received Json Document is NULL"); - } - - *((RequestAck *)pUserdata) = requestAck; -} - -void* IOT_Shadow_Construct(ShadowInitParams *pParams) -{ - POINTER_SANITY_CHECK(pParams, NULL); - - Qcloud_IoT_Shadow *shadow_client = NULL; - if ((shadow_client = (Qcloud_IoT_Shadow *)HAL_Malloc(sizeof(Qcloud_IoT_Shadow))) == NULL) { - Log_e("memory not enough to malloc ShadowClient"); - } - - MQTTInitParams mqtt_init_params; - _copy_shadow_init_params_to_mqtt(&mqtt_init_params, pParams); - - mqtt_init_params.event_handle.h_fp = _shadow_event_handler; - mqtt_init_params.event_handle.context = shadow_client; - - void *mqtt_client = NULL; - if ((mqtt_client = IOT_MQTT_Construct(&mqtt_init_params)) == NULL) { - HAL_Free(shadow_client); - goto End; - } - - shadow_client->mqtt = mqtt_client; - shadow_client->shadow_type = pParams->shadow_type; - shadow_client->event_handle = pParams->event_handle; - shadow_client->inner_data.result_topic = NULL; - shadow_client->inner_data.token_num = 0; - - int rc; - - rc = qcloud_iot_shadow_init(shadow_client); - if (rc != QCLOUD_RET_SUCCESS) { - IOT_MQTT_Destroy(&(shadow_client->mqtt)); - HAL_Free(shadow_client); - goto End; - } - - rc = subscribe_operation_result_to_cloud(shadow_client); - if (rc < 0) - { - Log_e("Subcribe $shadow/operation/results fail!"); - } - else { - shadow_client->inner_data.sync_status = rc; - while (rc == shadow_client->inner_data.sync_status) { - IOT_Shadow_Yield(shadow_client, 100); - } - if (0 == shadow_client->inner_data.sync_status) { - Log_i("Sync device data successfully"); - } else { - Log_e("Sync device data failed"); - } - } - - return shadow_client; - -End: - return NULL; -} - -int IOT_Shadow_Publish(void *handle, char *topicName, PublishParams *pParams) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; - - return qcloud_iot_mqtt_publish(shadow->mqtt, topicName, pParams); -} - -int IOT_Shadow_Subscribe(void *handle, char *topicFilter, SubscribeParams *pParams) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; - - return qcloud_iot_mqtt_subscribe(shadow->mqtt, topicFilter, pParams); -} - -int IOT_Shadow_Unsubscribe(void *handle, char *topicFilter) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; - - return qcloud_iot_mqtt_unsubscribe(shadow->mqtt, topicFilter); -} - -bool IOT_Shadow_IsConnected(void *handle) -{ - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - - IOT_FUNC_EXIT_RC(IOT_MQTT_IsConnected(pshadow->mqtt)) -} - -int IOT_Shadow_Destroy(void *handle) -{ - IOT_FUNC_ENTRY; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* shadow_client = (Qcloud_IoT_Shadow*)handle; - qcloud_iot_shadow_reset(handle); - - IOT_MQTT_Destroy(&shadow_client->mqtt); - - if (NULL != shadow_client->mutex) { - HAL_MutexDestroy(shadow_client->mutex); - } - - if (NULL != shadow_client->inner_data.result_topic) { - HAL_Free(shadow_client->inner_data.result_topic); - shadow_client->inner_data.result_topic = NULL; - } - - HAL_Free(handle); - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) -} - -int IOT_Shadow_Yield(void *handle, uint32_t timeout_ms) { - - IOT_FUNC_ENTRY; - int rc; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; - POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); - - handle_expired_request(pshadow); - - rc = IOT_MQTT_Yield(pshadow->mqtt, timeout_ms); - - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Shadow_Register_Property(void *handle, DeviceProperty *pProperty, OnPropRegCallback callback) { - - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - int rc; - - if (IOT_MQTT_IsConnected(pshadow->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - if (shadow_common_check_property_existence(pshadow, pProperty)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_SHADOW_PROPERTY_EXIST); - - rc = shadow_common_register_property_on_delta(pshadow, pProperty, callback); - - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Shadow_UnRegister_Property(void *handle, DeviceProperty *pProperty) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - - if (IOT_MQTT_IsConnected(pshadow->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - if (!shadow_common_check_property_existence(pshadow, pProperty)) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_SHADOW_NOT_PROPERTY_EXIST); - } - int rc = shadow_common_remove_property(pshadow, pProperty); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Shadow_Update(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnRequestCallback callback, void *userContext, uint32_t timeout_ms) { - - IOT_FUNC_ENTRY; - int rc; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* shadow = (Qcloud_IoT_Shadow*)handle; - - if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { - Log_e("shadow is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // subscribe topic $shadow/operation/result if not subscribed yet - if (shadow->inner_data.sync_status < 0) { - subscribe_operation_result_to_cloud(shadow); - } - - Log_d("UPDATE Request Document: %s", pJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, UPDATE, callback, userContext, timeout_ms/1000); - - rc = do_shadow_request(shadow, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Shadow_Update_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) { - - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* shadow = (Qcloud_IoT_Shadow*)handle; - - if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { - Log_e("shadow is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - RequestAck ack_update = ACK_NONE; - rc = IOT_Shadow_Update(handle, pJsonDoc, sizeOfBuffer, _update_ack_cb, &ack_update, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - - while (ACK_NONE == ack_update) { - IOT_Shadow_Yield(handle, 200); - } - - if (ACK_ACCEPTED == ack_update) { - rc = QCLOUD_RET_SUCCESS; - } else if (ACK_TIMEOUT == ack_update) { - rc = QCLOUD_ERR_SHADOW_UPDATE_TIMEOUT; - } else if (ACK_REJECTED == ack_update) { - rc = QCLOUD_ERR_SHADOW_UPDATE_REJECTED; - } - - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Shadow_Get(void *handle, OnRequestCallback callback, void *userContext, uint32_t timeout_ms) { - - IOT_FUNC_ENTRY; - int rc; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* shadow = (Qcloud_IoT_Shadow*)handle; - - if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // subscribe topic $shadow/operation/result if not subscribed yet - if (shadow->inner_data.sync_status < 0) { - subscribe_operation_result_to_cloud(shadow); - } - - char getRequestJsonDoc[MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN]; - build_empty_json(&(shadow->inner_data.token_num), getRequestJsonDoc); - Log_d("GET Request Document: %s", getRequestJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, GET, callback, userContext, timeout_ms/1000); - - rc = do_shadow_request(shadow, &request_params, getRequestJsonDoc, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN); - IOT_FUNC_EXIT_RC(rc); -} - -int IOT_Shadow_Get_Sync(void *handle, uint32_t timeout_ms) { - - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Shadow* shadow = (Qcloud_IoT_Shadow*)handle; - - if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - RequestAck ack_update = ACK_NONE; - rc = IOT_Shadow_Get(handle, _update_ack_cb, &ack_update, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - - while (ACK_NONE == ack_update) { - IOT_Shadow_Yield(handle, 200); - } - - if (ACK_ACCEPTED == ack_update) { - rc = QCLOUD_RET_SUCCESS; - } else if (ACK_TIMEOUT == ack_update) { - rc = QCLOUD_ERR_SHADOW_GET_TIMEOUT; - } else if (ACK_REJECTED == ack_update) { - rc = QCLOUD_ERR_SHADOW_GET_REJECTED; - } - - IOT_FUNC_EXIT_RC(rc); -} - -/** - * @brief Init a shadow JSON string, add the initial field of "{\"state\":{" - * - * @param jsonBuffer JSON string buffer - * @param sizeOfBuffer buffer size - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -static int IOT_Shadow_JSON_Init(Qcloud_IoT_Shadow *pShadow, char *jsonBuffer, size_t sizeOfBuffer, bool overwrite) { - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - int32_t rc_of_snprintf = 0; - if (overwrite) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"overwriteUpdate\":true, \"state\":{"); - } - else { - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"state\":{"); - } - - return _check_snprintf_return(rc_of_snprintf, sizeOfBuffer); -} - -/** - * @brief Finish a shadow JSON string, append the tail fields of clientToken and version - * - * @param jsonBuffer JSON string buffer - * @param sizeOfBuffer buffer size - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -static int IOT_Shadow_JSON_Finalize(Qcloud_IoT_Shadow *pShadow, char *jsonBuffer, size_t sizeOfBuffer) -{ - int rc; - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}, \"%s\":\"", CLIENT_TOKEN_FIELD); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = generate_client_token(jsonBuffer + strlen(jsonBuffer), remain_size, &(pShadow->inner_data.token_num)); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"}"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - return rc; -} - -int IOT_Shadow_JSON_ConstructReport(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) -{ - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); - - int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, false); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json init failed: %d", rc); - return rc; - } - - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - int8_t i; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - va_list pArgs; - va_start(pArgs, count); - - for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode; - pJsonNode = va_arg(pArgs, DeviceProperty *); - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - va_end(pArgs); - return rc; - } - } else { - va_end(pArgs); - return QCLOUD_ERR_INVAL; - } - } - - va_end(pArgs); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json add report failed: %d", rc); - return rc; - } - - rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json finalize failed: %d", rc); - } - - return rc; -} - - -int IOT_Shadow_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, DeviceProperty *pDeviceProperties[]) -{ - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pDeviceProperties, QCLOUD_ERR_INVAL); - - int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, false); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json init failed: %d", rc); - return rc; - } - - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - int8_t i; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode = pDeviceProperties[i]; - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - return QCLOUD_ERR_INVAL; - } - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json add report failed: %d", rc); - return rc; - } - - rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json finalize failed: %d", rc); - } - - return rc; -} - - -int IOT_Shadow_JSON_Construct_OverwriteReport(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) -{ - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); - - int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, true); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json init failed: %d", rc); - return rc; - } - - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - int8_t i; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - va_list pArgs; - va_start(pArgs, count); - - for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode; - pJsonNode = va_arg(pArgs, DeviceProperty *); - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - va_end(pArgs); - return rc; - } - } else { - va_end(pArgs); - return QCLOUD_ERR_INVAL; - } - } - - va_end(pArgs); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json add report failed: %d", rc); - return rc; - } - - rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json finalize failed: %d", rc); - } - - return rc; -} - -int IOT_Shadow_JSON_ConstructReportAndDesireAllNull(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) -{ - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Shadow* pshadow = (Qcloud_IoT_Shadow*)handle; - - int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, false); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json init failed: %d", rc); - return rc; - } - - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - int8_t i; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - va_list pArgs; - va_start(pArgs, count); - - for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode; - pJsonNode = va_arg(pArgs, DeviceProperty *); - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - va_end(pArgs); - return rc; - } - } else { - va_end(pArgs); - return QCLOUD_ERR_INVAL; - } - } - - va_end(pArgs); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json add report failed: %d", rc); - return rc; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"desired\": null "); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json finalize failed: %d", rc); - } - - return rc; -} - -int IOT_Shadow_JSON_ConstructDesireAllNull(void *handle, char *jsonBuffer, size_t sizeOfBuffer) -{ - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Shadow* shadow = (Qcloud_IoT_Shadow*)handle; - - int rc = IOT_Shadow_JSON_Init(shadow, jsonBuffer, sizeOfBuffer, false); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json init failed: %d", rc); - return rc; - } - - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"desired\": null "); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - rc = IOT_Shadow_JSON_Finalize(shadow, jsonBuffer, sizeOfBuffer); - return rc; -} - -int IOT_Shadow_JSON_ConstructDesirePropNull(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) -{ - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Shadow* shadow = (Qcloud_IoT_Shadow*)handle; - - int rc = IOT_Shadow_JSON_Init(shadow, jsonBuffer, sizeOfBuffer, false); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json init failed: %d", rc); - return rc; - } - - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - int8_t i; - - if (jsonBuffer == NULL) { - return QCLOUD_ERR_INVAL; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"desired\":{"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - va_list pArgs; - va_start(pArgs, count); - - for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode; - pJsonNode = va_arg (pArgs, DeviceProperty *); - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - if (rc != QCLOUD_RET_SUCCESS) { - va_end(pArgs); - return rc; - } - } else { - va_end(pArgs); - return QCLOUD_ERR_INVAL; - } - } - - va_end(pArgs); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - // strlen(jsonBuffer) - 1 to remove last comma - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow json add desired failed: %d", rc); - return rc; - } - - rc = IOT_Shadow_JSON_Finalize(shadow, jsonBuffer, sizeOfBuffer); - return rc; -} - -#ifdef __cplusplus -} -#endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_json.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_json.c deleted file mode 100644 index 0ca534f8..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_json.c +++ /dev/null @@ -1,350 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include -#include - -#include "shadow_client_json.h" - -#include "qcloud_iot_device.h" -#include "shadow_client.h" -#include "lite-utils.h" - -static int _direct_update_value(char *value, DeviceProperty *pProperty) { - - int rc = QCLOUD_RET_SUCCESS; - - if (pProperty->type == JBOOL) { - rc = LITE_get_boolean(pProperty->data, value); - } else if (pProperty->type == JINT32) { - rc = LITE_get_int32(pProperty->data, value); - } else if (pProperty->type == JINT16) { - rc = LITE_get_int16(pProperty->data, value); - } else if (pProperty->type == JINT8) { - rc = LITE_get_int8(pProperty->data, value); - } else if (pProperty->type == JUINT32) { - rc = LITE_get_uint32(pProperty->data, value); - } else if (pProperty->type == JUINT16) { - rc = LITE_get_uint16(pProperty->data, value); - } else if (pProperty->type == JUINT8) { - rc = LITE_get_uint8(pProperty->data, value); - } else if (pProperty->type == JFLOAT) { - rc = LITE_get_float(pProperty->data, value); - } else if (pProperty->type == JDOUBLE) { - rc = LITE_get_double(pProperty->data, value); - }else if(pProperty->type == JSTRING){ - //Log_d("string type wait to be deal,%s",value); - }else if(pProperty->type == JOBJECT){ - //Log_d("Json type wait to be deal,%s",value); - }else{ - Log_e("pProperty type unknow,%d",pProperty->type); - } - - return rc; -} - -/** - * add field of client token into JSON - * - * @param pJsonDocument JSON string - * @param maxSizeOfJsonDocument max size of JSON string - * @return length after adding - */ -static int32_t _add_client_token(char *pJsonDocument, size_t maxSizeOfJsonDocument, uint32_t *tokenNumber) { - - int32_t rc_of_snprintf = HAL_Snprintf(pJsonDocument, maxSizeOfJsonDocument, "%s-%u", iot_device_info_get()->product_id, (*tokenNumber)++); - - return rc_of_snprintf; -} - -/** - * @brief check return value of snprintf - * - * @param returnCode return value of snprintf - * @param maxSizeOfWrite max size of write buffer - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -static inline int _check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) { - - if (returnCode >= maxSizeOfWrite) { - return QCLOUD_ERR_JSON_BUFFER_TRUNCATED; - } else if (returnCode < 0) { - return QCLOUD_ERR_JSON; - } - - return QCLOUD_RET_SUCCESS; -} - -int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) { - - int rc; - int32_t rc_of_snprintf = 0; - size_t remain_size = 0; - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\":", pKey); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - if (pData == NULL) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "null,"); - } else { - if (type == JINT32) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi32 - ",", *(int32_t *) (pData)); - } else if (type == JINT16) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi16 - ",", *(int16_t *) (pData)); - } else if (type == JINT8) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi8 - ",", *(int8_t *) (pData)); - } else if (type == JUINT32) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu32 - ",", *(uint32_t *) (pData)); - } else if (type == JUINT16) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu16 - ",", *(uint16_t *) (pData)); - } else if (type == JUINT8) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu8 - ",", *(uint8_t *) (pData)); - } else if (type == JDOUBLE) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *) (pData)); - } else if (type == JFLOAT) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *) (pData)); - } else if (type == JBOOL) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", - *(bool *) (pData) ? "true" : "false"); - } else if (type == JSTRING) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *) (pData)); - } else if (type == JOBJECT) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", (char *) (pData)); - } - } - - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - return rc; -} - -int event_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) { - - int rc; - int32_t rc_of_snprintf = 0; - size_t remain_size = 0; - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\":", pKey); - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - if (pData == NULL) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "null,"); - } else { - if (type == JINT32) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi32 - ",", *(int32_t *) (pData)); - } else if (type == JINT16) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi16 - ",", *(int16_t *) (pData)); - } else if (type == JINT8) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi8 - ",", *(int8_t *) (pData)); - } else if (type == JUINT32) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu32 - ",", *(uint32_t *) (pData)); - } else if (type == JUINT16) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu16 - ",", *(uint16_t *) (pData)); - } else if (type == JUINT8) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu8 - ",", *(uint8_t *) (pData)); - } else if (type == JDOUBLE) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *) (pData)); - } else if (type == JFLOAT) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *) (pData)); - } else if (type == JBOOL) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%u,", - *(bool *) (pData) ? 1 : 0); - } else if (type == JSTRING) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *) (pData)); - } else if (type == JOBJECT) { - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", (char *) (pData)); - } - } - - rc = _check_snprintf_return(rc_of_snprintf, remain_size); - - return rc; -} - - -int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber) { - return _add_client_token(pStrBuffer, sizeOfBuffer, tokenNumber); -} - -void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer) { - HAL_Snprintf(pJsonBuffer, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN, "{\"clientToken\":\"%s-%u\"}", iot_device_info_get()->product_id, (*tokenNumber)++); -} - -bool parse_client_token(char *pJsonDoc, char **pClientToken) { - *pClientToken = LITE_json_value_of(CLIENT_TOKEN_FIELD, pJsonDoc); - return *pClientToken == NULL ? false : true; -} - -bool parse_version_num(char *pJsonDoc, uint32_t *pVersionNumber) { - - bool ret = false; - - char *version_num = LITE_json_value_of(PAYLOAD_VERSION, pJsonDoc); - if (version_num == NULL) return false; - - if (sscanf(version_num, "%" SCNu32, pVersionNumber) != 1) { - Log_e("parse shadow version failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } - - HAL_Free(version_num); - - return ret; -} - -bool parse_shadow_state(char *pJsonDoc, char **pState) -{ - *pState = LITE_json_value_of(PAYLOAD_VERSION, pJsonDoc); - return *pState == NULL ? false : true; -} - -bool parse_code_return(char *pJsonDoc, int32_t *pCode) { - - bool ret = false; - - char *code = LITE_json_value_of(REPLY_CODE, pJsonDoc); - if (code == NULL) return false; - - if (sscanf(code, "%" SCNi32, pCode) != 1) { - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } - - HAL_Free(code); - - return ret; -} - -bool parse_status_return(char *pJsonDoc, char **pStatus) { - *pStatus = LITE_json_value_of(REPLY_STATUS, pJsonDoc); - return *pStatus == NULL ? false : true; -} - - -bool parse_shadow_operation_type(char *pJsonDoc, char **pType) -{ - *pType = LITE_json_value_of(TYPE_FIELD, pJsonDoc); - return *pType == NULL ? false : true; -} - -bool parse_shadow_operation_result_code(char *pJsonDoc, int16_t *pResultCode) -{ - bool ret = false; - - char *result_code = LITE_json_value_of(RESULT_FIELD, pJsonDoc); - if (result_code == NULL) return false; - - if (sscanf(result_code, "%" SCNi16, pResultCode) != 1) { - Log_e("parse shadow result_code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } - - HAL_Free(result_code); - - return ret; -} - -bool parse_shadow_operation_delta(char *pJsonDoc, char **pDelta) -{ - *pDelta = LITE_json_value_of(PAYLOAD_STATE, pJsonDoc); - return *pDelta == NULL ? false : true; -} - -bool parse_shadow_operation_get(char *pJsonDoc, char **pDelta) -{ - *pDelta = LITE_json_value_of(PAYLOAD_STATE_DELTA, pJsonDoc); - return *pDelta == NULL ? false : true; -} - - -bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty) { - - bool ret = false; - - char* property_data = LITE_json_value_of(pProperty->key, pJsonDoc); - if ((property_data == NULL) || !(strncmp(property_data, "null", 4)) - ||!(strncmp(property_data, "NULL", 4))) { - } - else { - _direct_update_value(property_data, pProperty); - ret = true; - HAL_Free(property_data); - } - - return ret; -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_token.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_token.c deleted file mode 100644 index 411d78bb..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_token.c +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -/** - * Edit by shockcao@tencent.com 2018/3/15 - */ - -#include "json_parser.h" - -#include "lite-utils.h" -#include "qcloud_iot_export_error.h" - -#ifndef SCNi8 -#define SCNi8 "hhi" -#endif - -#ifndef SCNu8 -#define SCNu8 "hhu" -#endif - -char *LITE_json_value_of(char *key, char *src) -{ - char *value = NULL; - int value_len = -1; - char *ret = NULL; - - char *delim = NULL; - char *key_iter; - char *key_next; - int key_len; - char *src_iter; - - src_iter = src; - key_iter = key; - - do { - if ((delim = strchr(key_iter, '.')) != NULL) { - key_len = delim - key_iter; - key_next = HAL_Malloc(key_len + 1); - strncpy(key_next, key_iter, key_len); - key_next[key_len] = '\0'; - value = json_get_value_by_name(src_iter, strlen(src_iter), key_next, &value_len, 0); - - if (value == NULL) { - HAL_Free(key_next); - return NULL; - } - - src_iter = value; - key_iter = delim + 1; - HAL_Free(key_next); - } - } while (delim); - - value = json_get_value_by_name(src_iter, strlen(src_iter), key_iter, &value_len, 0); - if (NULL == value) { - return NULL; - } - ret = HAL_Malloc((value_len + 1) * sizeof(char)); - if (NULL == ret) { - return NULL; - } - HAL_Snprintf(ret, value_len + 1, "%s", value); - return ret; -} - -list_head_t *LITE_json_keys_of(char *src, char *prefix) -{ - static LIST_HEAD(keylist); - - char *pos = 0, *key = 0, *val = 0; - int klen = 0, vlen = 0, vtype = 0; - - if (src == NULL || prefix == NULL) { - return NULL; - } - - if (!strcmp("", prefix)) { - INIT_LIST_HEAD(&keylist); - } - - json_object_for_each_kv(src, pos, key, klen, val, vlen, vtype) { - if (key && klen && val && vlen) { - - json_key_t *entry = NULL; - - entry = HAL_Malloc(sizeof(json_key_t)); - if (NULL == entry) { - return NULL; - } - memset(entry, 0, sizeof(json_key_t)); - entry->key = LITE_format_string("%s%.*s", prefix, klen, key); - list_add_tail(&entry->list, &keylist); - - if (JSOBJECT == vtype) { - char *iter_val = LITE_format_string("%.*s", vlen, val); - char *iter_pre = LITE_format_string("%s%.*s.", prefix, klen, key); - LITE_json_keys_of(iter_val, iter_pre); - HAL_Free(iter_val); - HAL_Free(iter_pre); - } - } - } - - if (!strcmp("", prefix)) { - json_key_t *entry = NULL; - - entry = HAL_Malloc(sizeof(json_key_t)); - if (NULL == entry) { - return NULL; - } - memset(entry, 0, sizeof(json_key_t)); - list_add_tail(&entry->list, &keylist); - - return &keylist; - } - - return NULL; -} - -void LITE_json_keys_release(list_head_t *keylist) -{ - json_key_t *pos, *tmp; - - list_for_each_entry_safe(pos, tmp, keylist, list, json_key_t) { - if (pos->key) { - HAL_Free(pos->key); - } - list_del(&pos->list); - HAL_Free(pos); - } -} - - -static void _strip_transfer(char *src) -{ - char *end = src + strlen(src)+ 1; - - while(*src != '\0') - { - if(*src == '\\') - { - memmove(src, src+1, end - src); - end--; - } - src++; - } -} - - -char * LITE_json_string_value_strip_transfer(char *key, char *src) -{ - char * str = LITE_json_value_of(key, src); - - if(NULL != str){ - _strip_transfer(str); - } - return str; -} - - - -int LITE_get_int32(int32_t *value, char *src) { - return (sscanf(src, "%" SCNi32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_int16(int16_t *value, char *src) { - return (sscanf(src, "%" SCNi16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_int8(int8_t *value, char *src) { - return (sscanf(src, "%" SCNi8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_uint32(uint32_t *value, char *src) { - return (sscanf(src, "%" SCNu32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_uint16(uint16_t *value, char *src) { - return (sscanf(src, "%" SCNu16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_uint8(uint8_t *value, char *src) { - return (sscanf(src, "%" SCNu8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_float(float *value, char *src) { - return (sscanf(src, "%f", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_double(double *value, char *src) { - return (sscanf(src, "%lf", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; -} - -int LITE_get_boolean(bool *value, char *src) { - if (!strcmp(src, "false")) { - *value = false; - } - else { - *value = true; - } - - return QCLOUD_RET_SUCCESS; -} - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_device.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_device.c deleted file mode 100644 index 2371a6d6..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_device.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif -#include -#include - -#include "qcloud_iot_device.h" -#include "qcloud_iot_export.h" - -static DeviceInfo sg_device_info; -static bool sg_devinfo_initialized; - -int iot_device_info_init() -{ - if (sg_devinfo_initialized) { - Log_e("device info has been initialized."); - return 0; - } - - memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); - sg_devinfo_initialized = true; - - return QCLOUD_RET_SUCCESS; -} - -int iot_device_info_set(const char *product_id, const char *device_name) -{ - - memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); - if ((MAX_SIZE_OF_PRODUCT_ID) < strlen(product_id)) - { - Log_e("product name(%s) length:(%lu) exceeding limitation", product_id, strlen(product_id)); - return QCLOUD_ERR_FAILURE; - } - if ((MAX_SIZE_OF_DEVICE_NAME) < strlen(device_name)) - { - Log_e("device name(%s) length:(%lu) exceeding limitation", device_name, strlen(device_name)); - return QCLOUD_ERR_FAILURE; - } - - strncpy(sg_device_info.product_id, product_id, MAX_SIZE_OF_PRODUCT_ID); - strncpy(sg_device_info.device_name, device_name, MAX_SIZE_OF_DEVICE_NAME); - - /* construct device-id(@product_id+@device_name) */ - memset(sg_device_info.client_id, 0x0, MAX_SIZE_OF_CLIENT_ID); - int ret = HAL_Snprintf(sg_device_info.client_id, MAX_SIZE_OF_CLIENT_ID, "%s%s", product_id, device_name); - if ((ret < 0) || (ret >= MAX_SIZE_OF_CLIENT_ID)) { - Log_e("set device info failed"); - return QCLOUD_ERR_FAILURE; - } - - Log_i("SDK_Ver: %s, Product_ID: %s, Device_Name: %s", QCLOUD_IOT_DEVICE_SDK_VERSION, product_id, device_name); - return QCLOUD_RET_SUCCESS; -} - -DeviceInfo* iot_device_info_get(void) -{ - return &sg_device_info; -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_aes.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_aes.c deleted file mode 100644 index f4d8db0e..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_aes.c +++ /dev/null @@ -1,1569 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#ifdef __cplusplus -extern "C" { -#endif -#include -#include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" -#include "utils_aes.h" - -#if defined(UTILS_AES_C) - -#include - - -#if defined(UTILS_SELF_TEST) -#include -#define utils_printf Log_d -#endif /* UTILS_SELF_TEST */ - - -//====================================// -#if !defined(UTILS_PLATFORM_ZEROIZE_ALT) -/* - * This implementation should never be optimized out by the compiler - * - * This implementation for utils_platform_zeroize() was inspired from Colin - * Percival's blog article at: - * - * http://www.daemonology.net/blog/2014-09-04-how-to-zero-a-buffer.html - * - * It uses a volatile function pointer to the standard memset(). Because the - * pointer is volatile the compiler expects it to change at - * any time and will not optimize out the call that could potentially perform - * other operations on the input buffer instead of just setting it to 0. - * Nevertheless, as pointed out by davidtgoldblatt on Hacker News - * (refer to http://www.daemonology.net/blog/2014-09-05-erratum.html for - * details), optimizations of the following form are still possible: - * - * if( memset_func != memset ) - * memset_func( buf, 0, len ); - * - * Note that it is extremely difficult to guarantee that - * utils_platform_zeroize() will not be optimized out by aggressive compilers - * in a portable way. For this reason, Mbed TLS also provides the configuration - * option UTILS_PLATFORM_ZEROIZE_ALT, which allows users to configure - * utils_platform_zeroize() to use a suitable implementation for their - * platform and needs. - */ -static void * (* const volatile memset_func)( void *, int, size_t ) = memset; - -void utils_platform_zeroize( void *buf, size_t len ) -{ - memset_func( buf, 0, len ); -} -#endif /* UTILS_PLATFORM_ZEROIZE_ALT */ - - -//====================================// - -#if !defined(UTILS_AES_ALT) - -/* Parameter validation macros based on platform_util.h */ -#define AES_VALIDATE_RET( cond ) \ - UTILS_INTERNAL_VALIDATE_RET( cond, UTILS_ERR_AES_BAD_INPUT_DATA ) -#define AES_VALIDATE( cond ) \ - UTILS_INTERNAL_VALIDATE( cond ) - -/* - * 32-bit integer manipulation macros (little endian) - */ -#ifndef GET_UINT32_LE -#define GET_UINT32_LE(n,b,i) \ -{ \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ -} -#endif - -#ifndef PUT_UINT32_LE -#define PUT_UINT32_LE(n,b,i) \ -{ \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ -} -#endif - -#if defined(UTILS_PADLOCK_C) && \ - ( defined(UTILS_HAVE_X86) || defined(UTILS_PADLOCK_ALIGN16) ) -static int aes_padlock_ace = -1; -#endif - -#if defined(UTILS_AES_ROM_TABLES) -/* - * Forward S-box - */ -static const unsigned char FSb[256] = -{ - 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, - 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, - 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, - 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, - 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, - 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, - 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, - 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, - 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, - 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, - 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, - 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, - 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, - 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, - 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, - 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, - 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, - 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, - 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, - 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, - 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, - 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, - 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, - 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, - 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, - 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, - 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, - 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, - 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, - 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, - 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, - 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 -}; - -/* - * Forward tables - */ -#define FT \ -\ - V(A5,63,63,C6), V(84,7C,7C,F8), V(99,77,77,EE), V(8D,7B,7B,F6), \ - V(0D,F2,F2,FF), V(BD,6B,6B,D6), V(B1,6F,6F,DE), V(54,C5,C5,91), \ - V(50,30,30,60), V(03,01,01,02), V(A9,67,67,CE), V(7D,2B,2B,56), \ - V(19,FE,FE,E7), V(62,D7,D7,B5), V(E6,AB,AB,4D), V(9A,76,76,EC), \ - V(45,CA,CA,8F), V(9D,82,82,1F), V(40,C9,C9,89), V(87,7D,7D,FA), \ - V(15,FA,FA,EF), V(EB,59,59,B2), V(C9,47,47,8E), V(0B,F0,F0,FB), \ - V(EC,AD,AD,41), V(67,D4,D4,B3), V(FD,A2,A2,5F), V(EA,AF,AF,45), \ - V(BF,9C,9C,23), V(F7,A4,A4,53), V(96,72,72,E4), V(5B,C0,C0,9B), \ - V(C2,B7,B7,75), V(1C,FD,FD,E1), V(AE,93,93,3D), V(6A,26,26,4C), \ - V(5A,36,36,6C), V(41,3F,3F,7E), V(02,F7,F7,F5), V(4F,CC,CC,83), \ - V(5C,34,34,68), V(F4,A5,A5,51), V(34,E5,E5,D1), V(08,F1,F1,F9), \ - V(93,71,71,E2), V(73,D8,D8,AB), V(53,31,31,62), V(3F,15,15,2A), \ - V(0C,04,04,08), V(52,C7,C7,95), V(65,23,23,46), V(5E,C3,C3,9D), \ - V(28,18,18,30), V(A1,96,96,37), V(0F,05,05,0A), V(B5,9A,9A,2F), \ - V(09,07,07,0E), V(36,12,12,24), V(9B,80,80,1B), V(3D,E2,E2,DF), \ - V(26,EB,EB,CD), V(69,27,27,4E), V(CD,B2,B2,7F), V(9F,75,75,EA), \ - V(1B,09,09,12), V(9E,83,83,1D), V(74,2C,2C,58), V(2E,1A,1A,34), \ - V(2D,1B,1B,36), V(B2,6E,6E,DC), V(EE,5A,5A,B4), V(FB,A0,A0,5B), \ - V(F6,52,52,A4), V(4D,3B,3B,76), V(61,D6,D6,B7), V(CE,B3,B3,7D), \ - V(7B,29,29,52), V(3E,E3,E3,DD), V(71,2F,2F,5E), V(97,84,84,13), \ - V(F5,53,53,A6), V(68,D1,D1,B9), V(00,00,00,00), V(2C,ED,ED,C1), \ - V(60,20,20,40), V(1F,FC,FC,E3), V(C8,B1,B1,79), V(ED,5B,5B,B6), \ - V(BE,6A,6A,D4), V(46,CB,CB,8D), V(D9,BE,BE,67), V(4B,39,39,72), \ - V(DE,4A,4A,94), V(D4,4C,4C,98), V(E8,58,58,B0), V(4A,CF,CF,85), \ - V(6B,D0,D0,BB), V(2A,EF,EF,C5), V(E5,AA,AA,4F), V(16,FB,FB,ED), \ - V(C5,43,43,86), V(D7,4D,4D,9A), V(55,33,33,66), V(94,85,85,11), \ - V(CF,45,45,8A), V(10,F9,F9,E9), V(06,02,02,04), V(81,7F,7F,FE), \ - V(F0,50,50,A0), V(44,3C,3C,78), V(BA,9F,9F,25), V(E3,A8,A8,4B), \ - V(F3,51,51,A2), V(FE,A3,A3,5D), V(C0,40,40,80), V(8A,8F,8F,05), \ - V(AD,92,92,3F), V(BC,9D,9D,21), V(48,38,38,70), V(04,F5,F5,F1), \ - V(DF,BC,BC,63), V(C1,B6,B6,77), V(75,DA,DA,AF), V(63,21,21,42), \ - V(30,10,10,20), V(1A,FF,FF,E5), V(0E,F3,F3,FD), V(6D,D2,D2,BF), \ - V(4C,CD,CD,81), V(14,0C,0C,18), V(35,13,13,26), V(2F,EC,EC,C3), \ - V(E1,5F,5F,BE), V(A2,97,97,35), V(CC,44,44,88), V(39,17,17,2E), \ - V(57,C4,C4,93), V(F2,A7,A7,55), V(82,7E,7E,FC), V(47,3D,3D,7A), \ - V(AC,64,64,C8), V(E7,5D,5D,BA), V(2B,19,19,32), V(95,73,73,E6), \ - V(A0,60,60,C0), V(98,81,81,19), V(D1,4F,4F,9E), V(7F,DC,DC,A3), \ - V(66,22,22,44), V(7E,2A,2A,54), V(AB,90,90,3B), V(83,88,88,0B), \ - V(CA,46,46,8C), V(29,EE,EE,C7), V(D3,B8,B8,6B), V(3C,14,14,28), \ - V(79,DE,DE,A7), V(E2,5E,5E,BC), V(1D,0B,0B,16), V(76,DB,DB,AD), \ - V(3B,E0,E0,DB), V(56,32,32,64), V(4E,3A,3A,74), V(1E,0A,0A,14), \ - V(DB,49,49,92), V(0A,06,06,0C), V(6C,24,24,48), V(E4,5C,5C,B8), \ - V(5D,C2,C2,9F), V(6E,D3,D3,BD), V(EF,AC,AC,43), V(A6,62,62,C4), \ - V(A8,91,91,39), V(A4,95,95,31), V(37,E4,E4,D3), V(8B,79,79,F2), \ - V(32,E7,E7,D5), V(43,C8,C8,8B), V(59,37,37,6E), V(B7,6D,6D,DA), \ - V(8C,8D,8D,01), V(64,D5,D5,B1), V(D2,4E,4E,9C), V(E0,A9,A9,49), \ - V(B4,6C,6C,D8), V(FA,56,56,AC), V(07,F4,F4,F3), V(25,EA,EA,CF), \ - V(AF,65,65,CA), V(8E,7A,7A,F4), V(E9,AE,AE,47), V(18,08,08,10), \ - V(D5,BA,BA,6F), V(88,78,78,F0), V(6F,25,25,4A), V(72,2E,2E,5C), \ - V(24,1C,1C,38), V(F1,A6,A6,57), V(C7,B4,B4,73), V(51,C6,C6,97), \ - V(23,E8,E8,CB), V(7C,DD,DD,A1), V(9C,74,74,E8), V(21,1F,1F,3E), \ - V(DD,4B,4B,96), V(DC,BD,BD,61), V(86,8B,8B,0D), V(85,8A,8A,0F), \ - V(90,70,70,E0), V(42,3E,3E,7C), V(C4,B5,B5,71), V(AA,66,66,CC), \ - V(D8,48,48,90), V(05,03,03,06), V(01,F6,F6,F7), V(12,0E,0E,1C), \ - V(A3,61,61,C2), V(5F,35,35,6A), V(F9,57,57,AE), V(D0,B9,B9,69), \ - V(91,86,86,17), V(58,C1,C1,99), V(27,1D,1D,3A), V(B9,9E,9E,27), \ - V(38,E1,E1,D9), V(13,F8,F8,EB), V(B3,98,98,2B), V(33,11,11,22), \ - V(BB,69,69,D2), V(70,D9,D9,A9), V(89,8E,8E,07), V(A7,94,94,33), \ - V(B6,9B,9B,2D), V(22,1E,1E,3C), V(92,87,87,15), V(20,E9,E9,C9), \ - V(49,CE,CE,87), V(FF,55,55,AA), V(78,28,28,50), V(7A,DF,DF,A5), \ - V(8F,8C,8C,03), V(F8,A1,A1,59), V(80,89,89,09), V(17,0D,0D,1A), \ - V(DA,BF,BF,65), V(31,E6,E6,D7), V(C6,42,42,84), V(B8,68,68,D0), \ - V(C3,41,41,82), V(B0,99,99,29), V(77,2D,2D,5A), V(11,0F,0F,1E), \ - V(CB,B0,B0,7B), V(FC,54,54,A8), V(D6,BB,BB,6D), V(3A,16,16,2C) - -#define V(a,b,c,d) 0x##a##b##c##d -static const uint32_t FT0[256] = { FT }; -#undef V - -#if !defined(UTILS_AES_FEWER_TABLES) - -#define V(a,b,c,d) 0x##b##c##d##a -static const uint32_t FT1[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##c##d##a##b -static const uint32_t FT2[256] = { FT }; -#undef V - -#define V(a,b,c,d) 0x##d##a##b##c -static const uint32_t FT3[256] = { FT }; -#undef V - -#endif /* !UTILS_AES_FEWER_TABLES */ - -#undef FT - -/* - * Reverse S-box - */ -static const unsigned char RSb[256] = -{ - 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, - 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, - 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, - 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, - 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, - 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, - 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, - 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, - 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, - 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, - 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, - 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, - 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, - 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, - 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, - 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, - 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, - 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, - 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, - 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, - 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, - 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, - 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, - 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, - 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, - 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, - 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, - 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, - 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, - 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, - 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, - 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D -}; - -/* - * Reverse tables - */ -#define RT \ -\ - V(50,A7,F4,51), V(53,65,41,7E), V(C3,A4,17,1A), V(96,5E,27,3A), \ - V(CB,6B,AB,3B), V(F1,45,9D,1F), V(AB,58,FA,AC), V(93,03,E3,4B), \ - V(55,FA,30,20), V(F6,6D,76,AD), V(91,76,CC,88), V(25,4C,02,F5), \ - V(FC,D7,E5,4F), V(D7,CB,2A,C5), V(80,44,35,26), V(8F,A3,62,B5), \ - V(49,5A,B1,DE), V(67,1B,BA,25), V(98,0E,EA,45), V(E1,C0,FE,5D), \ - V(02,75,2F,C3), V(12,F0,4C,81), V(A3,97,46,8D), V(C6,F9,D3,6B), \ - V(E7,5F,8F,03), V(95,9C,92,15), V(EB,7A,6D,BF), V(DA,59,52,95), \ - V(2D,83,BE,D4), V(D3,21,74,58), V(29,69,E0,49), V(44,C8,C9,8E), \ - V(6A,89,C2,75), V(78,79,8E,F4), V(6B,3E,58,99), V(DD,71,B9,27), \ - V(B6,4F,E1,BE), V(17,AD,88,F0), V(66,AC,20,C9), V(B4,3A,CE,7D), \ - V(18,4A,DF,63), V(82,31,1A,E5), V(60,33,51,97), V(45,7F,53,62), \ - V(E0,77,64,B1), V(84,AE,6B,BB), V(1C,A0,81,FE), V(94,2B,08,F9), \ - V(58,68,48,70), V(19,FD,45,8F), V(87,6C,DE,94), V(B7,F8,7B,52), \ - V(23,D3,73,AB), V(E2,02,4B,72), V(57,8F,1F,E3), V(2A,AB,55,66), \ - V(07,28,EB,B2), V(03,C2,B5,2F), V(9A,7B,C5,86), V(A5,08,37,D3), \ - V(F2,87,28,30), V(B2,A5,BF,23), V(BA,6A,03,02), V(5C,82,16,ED), \ - V(2B,1C,CF,8A), V(92,B4,79,A7), V(F0,F2,07,F3), V(A1,E2,69,4E), \ - V(CD,F4,DA,65), V(D5,BE,05,06), V(1F,62,34,D1), V(8A,FE,A6,C4), \ - V(9D,53,2E,34), V(A0,55,F3,A2), V(32,E1,8A,05), V(75,EB,F6,A4), \ - V(39,EC,83,0B), V(AA,EF,60,40), V(06,9F,71,5E), V(51,10,6E,BD), \ - V(F9,8A,21,3E), V(3D,06,DD,96), V(AE,05,3E,DD), V(46,BD,E6,4D), \ - V(B5,8D,54,91), V(05,5D,C4,71), V(6F,D4,06,04), V(FF,15,50,60), \ - V(24,FB,98,19), V(97,E9,BD,D6), V(CC,43,40,89), V(77,9E,D9,67), \ - V(BD,42,E8,B0), V(88,8B,89,07), V(38,5B,19,E7), V(DB,EE,C8,79), \ - V(47,0A,7C,A1), V(E9,0F,42,7C), V(C9,1E,84,F8), V(00,00,00,00), \ - V(83,86,80,09), V(48,ED,2B,32), V(AC,70,11,1E), V(4E,72,5A,6C), \ - V(FB,FF,0E,FD), V(56,38,85,0F), V(1E,D5,AE,3D), V(27,39,2D,36), \ - V(64,D9,0F,0A), V(21,A6,5C,68), V(D1,54,5B,9B), V(3A,2E,36,24), \ - V(B1,67,0A,0C), V(0F,E7,57,93), V(D2,96,EE,B4), V(9E,91,9B,1B), \ - V(4F,C5,C0,80), V(A2,20,DC,61), V(69,4B,77,5A), V(16,1A,12,1C), \ - V(0A,BA,93,E2), V(E5,2A,A0,C0), V(43,E0,22,3C), V(1D,17,1B,12), \ - V(0B,0D,09,0E), V(AD,C7,8B,F2), V(B9,A8,B6,2D), V(C8,A9,1E,14), \ - V(85,19,F1,57), V(4C,07,75,AF), V(BB,DD,99,EE), V(FD,60,7F,A3), \ - V(9F,26,01,F7), V(BC,F5,72,5C), V(C5,3B,66,44), V(34,7E,FB,5B), \ - V(76,29,43,8B), V(DC,C6,23,CB), V(68,FC,ED,B6), V(63,F1,E4,B8), \ - V(CA,DC,31,D7), V(10,85,63,42), V(40,22,97,13), V(20,11,C6,84), \ - V(7D,24,4A,85), V(F8,3D,BB,D2), V(11,32,F9,AE), V(6D,A1,29,C7), \ - V(4B,2F,9E,1D), V(F3,30,B2,DC), V(EC,52,86,0D), V(D0,E3,C1,77), \ - V(6C,16,B3,2B), V(99,B9,70,A9), V(FA,48,94,11), V(22,64,E9,47), \ - V(C4,8C,FC,A8), V(1A,3F,F0,A0), V(D8,2C,7D,56), V(EF,90,33,22), \ - V(C7,4E,49,87), V(C1,D1,38,D9), V(FE,A2,CA,8C), V(36,0B,D4,98), \ - V(CF,81,F5,A6), V(28,DE,7A,A5), V(26,8E,B7,DA), V(A4,BF,AD,3F), \ - V(E4,9D,3A,2C), V(0D,92,78,50), V(9B,CC,5F,6A), V(62,46,7E,54), \ - V(C2,13,8D,F6), V(E8,B8,D8,90), V(5E,F7,39,2E), V(F5,AF,C3,82), \ - V(BE,80,5D,9F), V(7C,93,D0,69), V(A9,2D,D5,6F), V(B3,12,25,CF), \ - V(3B,99,AC,C8), V(A7,7D,18,10), V(6E,63,9C,E8), V(7B,BB,3B,DB), \ - V(09,78,26,CD), V(F4,18,59,6E), V(01,B7,9A,EC), V(A8,9A,4F,83), \ - V(65,6E,95,E6), V(7E,E6,FF,AA), V(08,CF,BC,21), V(E6,E8,15,EF), \ - V(D9,9B,E7,BA), V(CE,36,6F,4A), V(D4,09,9F,EA), V(D6,7C,B0,29), \ - V(AF,B2,A4,31), V(31,23,3F,2A), V(30,94,A5,C6), V(C0,66,A2,35), \ - V(37,BC,4E,74), V(A6,CA,82,FC), V(B0,D0,90,E0), V(15,D8,A7,33), \ - V(4A,98,04,F1), V(F7,DA,EC,41), V(0E,50,CD,7F), V(2F,F6,91,17), \ - V(8D,D6,4D,76), V(4D,B0,EF,43), V(54,4D,AA,CC), V(DF,04,96,E4), \ - V(E3,B5,D1,9E), V(1B,88,6A,4C), V(B8,1F,2C,C1), V(7F,51,65,46), \ - V(04,EA,5E,9D), V(5D,35,8C,01), V(73,74,87,FA), V(2E,41,0B,FB), \ - V(5A,1D,67,B3), V(52,D2,DB,92), V(33,56,10,E9), V(13,47,D6,6D), \ - V(8C,61,D7,9A), V(7A,0C,A1,37), V(8E,14,F8,59), V(89,3C,13,EB), \ - V(EE,27,A9,CE), V(35,C9,61,B7), V(ED,E5,1C,E1), V(3C,B1,47,7A), \ - V(59,DF,D2,9C), V(3F,73,F2,55), V(79,CE,14,18), V(BF,37,C7,73), \ - V(EA,CD,F7,53), V(5B,AA,FD,5F), V(14,6F,3D,DF), V(86,DB,44,78), \ - V(81,F3,AF,CA), V(3E,C4,68,B9), V(2C,34,24,38), V(5F,40,A3,C2), \ - V(72,C3,1D,16), V(0C,25,E2,BC), V(8B,49,3C,28), V(41,95,0D,FF), \ - V(71,01,A8,39), V(DE,B3,0C,08), V(9C,E4,B4,D8), V(90,C1,56,64), \ - V(61,84,CB,7B), V(70,B6,32,D5), V(74,5C,6C,48), V(42,57,B8,D0) - -#define V(a,b,c,d) 0x##a##b##c##d -static const uint32_t RT0[256] = { RT }; -#undef V - -#if !defined(UTILS_AES_FEWER_TABLES) - -#define V(a,b,c,d) 0x##b##c##d##a -static const uint32_t RT1[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##c##d##a##b -static const uint32_t RT2[256] = { RT }; -#undef V - -#define V(a,b,c,d) 0x##d##a##b##c -static const uint32_t RT3[256] = { RT }; -#undef V - -#endif /* !UTILS_AES_FEWER_TABLES */ - -#undef RT - -/* - * Round constants - */ -static const uint32_t RCON[10] = -{ - 0x00000001, 0x00000002, 0x00000004, 0x00000008, - 0x00000010, 0x00000020, 0x00000040, 0x00000080, - 0x0000001B, 0x00000036 -}; - -#else /* UTILS_AES_ROM_TABLES */ - -/* - * Forward S-box & tables - */ -static unsigned char FSb[256]; -static uint32_t FT0[256]; -#if !defined(UTILS_AES_FEWER_TABLES) -static uint32_t FT1[256]; -static uint32_t FT2[256]; -static uint32_t FT3[256]; -#endif /* !UTILS_AES_FEWER_TABLES */ - -/* - * Reverse S-box & tables - */ -static unsigned char RSb[256]; -static uint32_t RT0[256]; -#if !defined(UTILS_AES_FEWER_TABLES) -static uint32_t RT1[256]; -static uint32_t RT2[256]; -static uint32_t RT3[256]; -#endif /* !UTILS_AES_FEWER_TABLES */ - -/* - * Round constants - */ -static uint32_t RCON[10]; - -/* - * Tables generation code - */ -#define ROTL8(x) ( ( x << 8 ) & 0xFFFFFFFF ) | ( x >> 24 ) -#define XTIME(x) ( ( x << 1 ) ^ ( ( x & 0x80 ) ? 0x1B : 0x00 ) ) -#define MUL(x,y) ( ( x && y ) ? pow[(log[x]+log[y]) % 255] : 0 ) - -static int aes_init_done = 0; - -static void aes_gen_tables( void ) -{ - int i, x, y, z; - int pow[256]; - int log[256]; - - /* - * compute pow and log tables over GF(2^8) - */ - for( i = 0, x = 1; i < 256; i++ ) - { - pow[i] = x; - log[x] = i; - x = ( x ^ XTIME( x ) ) & 0xFF; - } - - /* - * calculate the round constants - */ - for( i = 0, x = 1; i < 10; i++ ) - { - RCON[i] = (uint32_t) x; - x = XTIME( x ) & 0xFF; - } - - /* - * generate the forward and reverse S-boxes - */ - FSb[0x00] = 0x63; - RSb[0x63] = 0x00; - - for( i = 1; i < 256; i++ ) - { - x = pow[255 - log[i]]; - - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y ^ 0x63; - - FSb[i] = (unsigned char) x; - RSb[x] = (unsigned char) i; - } - - /* - * generate the forward and reverse tables - */ - for( i = 0; i < 256; i++ ) - { - x = FSb[i]; - y = XTIME( x ) & 0xFF; - z = ( y ^ x ) & 0xFF; - - FT0[i] = ( (uint32_t) y ) ^ - ( (uint32_t) x << 8 ) ^ - ( (uint32_t) x << 16 ) ^ - ( (uint32_t) z << 24 ); - -#if !defined(UTILS_AES_FEWER_TABLES) - FT1[i] = ROTL8( FT0[i] ); - FT2[i] = ROTL8( FT1[i] ); - FT3[i] = ROTL8( FT2[i] ); -#endif /* !UTILS_AES_FEWER_TABLES */ - - x = RSb[i]; - - RT0[i] = ( (uint32_t) MUL( 0x0E, x ) ) ^ - ( (uint32_t) MUL( 0x09, x ) << 8 ) ^ - ( (uint32_t) MUL( 0x0D, x ) << 16 ) ^ - ( (uint32_t) MUL( 0x0B, x ) << 24 ); - -#if !defined(UTILS_AES_FEWER_TABLES) - RT1[i] = ROTL8( RT0[i] ); - RT2[i] = ROTL8( RT1[i] ); - RT3[i] = ROTL8( RT2[i] ); -#endif /* !UTILS_AES_FEWER_TABLES */ - } -} - -#undef ROTL8 - -#endif /* UTILS_AES_ROM_TABLES */ - -#if defined(UTILS_AES_FEWER_TABLES) - -#define ROTL8(x) ( (uint32_t)( ( x ) << 8 ) + (uint32_t)( ( x ) >> 24 ) ) -#define ROTL16(x) ( (uint32_t)( ( x ) << 16 ) + (uint32_t)( ( x ) >> 16 ) ) -#define ROTL24(x) ( (uint32_t)( ( x ) << 24 ) + (uint32_t)( ( x ) >> 8 ) ) - -#define AES_RT0(idx) RT0[idx] -#define AES_RT1(idx) ROTL8( RT0[idx] ) -#define AES_RT2(idx) ROTL16( RT0[idx] ) -#define AES_RT3(idx) ROTL24( RT0[idx] ) - -#define AES_FT0(idx) FT0[idx] -#define AES_FT1(idx) ROTL8( FT0[idx] ) -#define AES_FT2(idx) ROTL16( FT0[idx] ) -#define AES_FT3(idx) ROTL24( FT0[idx] ) - -#else /* UTILS_AES_FEWER_TABLES */ - -#define AES_RT0(idx) RT0[idx] -#define AES_RT1(idx) RT1[idx] -#define AES_RT2(idx) RT2[idx] -#define AES_RT3(idx) RT3[idx] - -#define AES_FT0(idx) FT0[idx] -#define AES_FT1(idx) FT1[idx] -#define AES_FT2(idx) FT2[idx] -#define AES_FT3(idx) FT3[idx] - -#endif /* UTILS_AES_FEWER_TABLES */ - -void utils_aes_init( utils_aes_context *ctx ) -{ - AES_VALIDATE( ctx != NULL ); - - memset( ctx, 0, sizeof( utils_aes_context ) ); -} - -void utils_aes_free( utils_aes_context *ctx ) -{ - if( ctx == NULL ) - return; - - utils_platform_zeroize( ctx, sizeof( utils_aes_context ) ); -} - -/* - * AES key schedule (encryption) - */ -#if !defined(UTILS_AES_SETKEY_ENC_ALT) -int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) -{ - unsigned int i; - uint32_t *RK; - - AES_VALIDATE_RET( ctx != NULL ); - AES_VALIDATE_RET( key != NULL ); - - switch( keybits ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( UTILS_ERR_AES_INVALID_KEY_LENGTH ); - } - -#if !defined(UTILS_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { - aes_gen_tables(); - aes_init_done = 1; - } -#endif - - ctx->rk = RK = ctx->buf; - - for( i = 0; i < ( keybits >> 5 ); i++ ) - { - GET_UINT32_LE( RK[i], key, i << 2 ); - } - - switch( ctx->nr ) - { - case 10: - - for( i = 0; i < 10; i++, RK += 4 ) - { - RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); - - RK[5] = RK[1] ^ RK[4]; - RK[6] = RK[2] ^ RK[5]; - RK[7] = RK[3] ^ RK[6]; - } - break; - - case 12: - - for( i = 0; i < 8; i++, RK += 6 ) - { - RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); - - RK[7] = RK[1] ^ RK[6]; - RK[8] = RK[2] ^ RK[7]; - RK[9] = RK[3] ^ RK[8]; - RK[10] = RK[4] ^ RK[9]; - RK[11] = RK[5] ^ RK[10]; - } - break; - - case 14: - - for( i = 0; i < 7; i++, RK += 8 ) - { - RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); - - RK[9] = RK[1] ^ RK[8]; - RK[10] = RK[2] ^ RK[9]; - RK[11] = RK[3] ^ RK[10]; - - RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); - - RK[13] = RK[5] ^ RK[12]; - RK[14] = RK[6] ^ RK[13]; - RK[15] = RK[7] ^ RK[14]; - } - break; - } - - return( 0 ); -} -#endif /* !UTILS_AES_SETKEY_ENC_ALT */ - -/* - * AES key schedule (decryption) - */ -#if !defined(UTILS_AES_SETKEY_DEC_ALT) -int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) -{ - int i, j, ret; - utils_aes_context cty; - uint32_t *RK; - uint32_t *SK; - - AES_VALIDATE_RET( ctx != NULL ); - AES_VALIDATE_RET( key != NULL ); - - utils_aes_init( &cty ); - - ctx->rk = RK = ctx->buf; - - /* Also checks keybits */ - if( ( ret = utils_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) - goto exit; - - ctx->nr = cty.nr; - - - SK = cty.rk + cty.nr * 4; - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { - *RK++ = AES_RT0( FSb[ ( *SK ) & 0xFF ] ) ^ - AES_RT1( FSb[ ( *SK >> 8 ) & 0xFF ] ) ^ - AES_RT2( FSb[ ( *SK >> 16 ) & 0xFF ] ) ^ - AES_RT3( FSb[ ( *SK >> 24 ) & 0xFF ] ); - } - } - - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - *RK++ = *SK++; - -exit: - utils_aes_free( &cty ); - - return( ret ); -} - - -#endif /* !UTILS_AES_SETKEY_DEC_ALT */ - -#define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ AES_FT0( ( Y0 ) & 0xFF ) ^ \ - AES_FT1( ( Y1 >> 8 ) & 0xFF ) ^ \ - AES_FT2( ( Y2 >> 16 ) & 0xFF ) ^ \ - AES_FT3( ( Y3 >> 24 ) & 0xFF ); \ - \ - X1 = *RK++ ^ AES_FT0( ( Y1 ) & 0xFF ) ^ \ - AES_FT1( ( Y2 >> 8 ) & 0xFF ) ^ \ - AES_FT2( ( Y3 >> 16 ) & 0xFF ) ^ \ - AES_FT3( ( Y0 >> 24 ) & 0xFF ); \ - \ - X2 = *RK++ ^ AES_FT0( ( Y2 ) & 0xFF ) ^ \ - AES_FT1( ( Y3 >> 8 ) & 0xFF ) ^ \ - AES_FT2( ( Y0 >> 16 ) & 0xFF ) ^ \ - AES_FT3( ( Y1 >> 24 ) & 0xFF ); \ - \ - X3 = *RK++ ^ AES_FT0( ( Y3 ) & 0xFF ) ^ \ - AES_FT1( ( Y0 >> 8 ) & 0xFF ) ^ \ - AES_FT2( ( Y1 >> 16 ) & 0xFF ) ^ \ - AES_FT3( ( Y2 >> 24 ) & 0xFF ); \ -} - -#define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \ -{ \ - X0 = *RK++ ^ AES_RT0( ( Y0 ) & 0xFF ) ^ \ - AES_RT1( ( Y3 >> 8 ) & 0xFF ) ^ \ - AES_RT2( ( Y2 >> 16 ) & 0xFF ) ^ \ - AES_RT3( ( Y1 >> 24 ) & 0xFF ); \ - \ - X1 = *RK++ ^ AES_RT0( ( Y1 ) & 0xFF ) ^ \ - AES_RT1( ( Y0 >> 8 ) & 0xFF ) ^ \ - AES_RT2( ( Y3 >> 16 ) & 0xFF ) ^ \ - AES_RT3( ( Y2 >> 24 ) & 0xFF ); \ - \ - X2 = *RK++ ^ AES_RT0( ( Y2 ) & 0xFF ) ^ \ - AES_RT1( ( Y1 >> 8 ) & 0xFF ) ^ \ - AES_RT2( ( Y0 >> 16 ) & 0xFF ) ^ \ - AES_RT3( ( Y3 >> 24 ) & 0xFF ); \ - \ - X3 = *RK++ ^ AES_RT0( ( Y3 ) & 0xFF ) ^ \ - AES_RT1( ( Y2 >> 8 ) & 0xFF ) ^ \ - AES_RT2( ( Y1 >> 16 ) & 0xFF ) ^ \ - AES_RT3( ( Y0 >> 24 ) & 0xFF ); \ -} - -/* - * AES-ECB block encryption - */ -#if !defined(UTILS_AES_ENCRYPT_ALT) -int utils_internal_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) -{ - int i; - uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; - - RK = ctx->rk; - - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; - - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { - AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); - - X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); - - X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); - - X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); - - PUT_UINT32_LE( X0, output, 0 ); - PUT_UINT32_LE( X1, output, 4 ); - PUT_UINT32_LE( X2, output, 8 ); - PUT_UINT32_LE( X3, output, 12 ); - - return( 0 ); -} -#endif /* !UTILS_AES_ENCRYPT_ALT */ - -#if !defined(UTILS_DEPRECATED_REMOVED) -void utils_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) -{ - utils_internal_aes_encrypt( ctx, input, output ); -} -#endif /* !UTILS_DEPRECATED_REMOVED */ - -/* - * AES-ECB block decryption - */ -#if !defined(UTILS_AES_DECRYPT_ALT) -int utils_internal_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) -{ - int i; - uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; - - RK = ctx->rk; - - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; - - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { - AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); - } - - AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); - - X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); - - X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); - - X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); - - X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); - - PUT_UINT32_LE( X0, output, 0 ); - PUT_UINT32_LE( X1, output, 4 ); - PUT_UINT32_LE( X2, output, 8 ); - PUT_UINT32_LE( X3, output, 12 ); - - return( 0 ); -} -#endif /* !UTILS_AES_DECRYPT_ALT */ - -#if !defined(UTILS_DEPRECATED_REMOVED) -void utils_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) -{ - utils_internal_aes_decrypt( ctx, input, output ); -} -#endif /* !UTILS_DEPRECATED_REMOVED */ - -/* - * AES-ECB block encryption/decryption - */ -int utils_aes_crypt_ecb( utils_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) -{ - AES_VALIDATE_RET( ctx != NULL ); - AES_VALIDATE_RET( input != NULL ); - AES_VALIDATE_RET( output != NULL ); - AES_VALIDATE_RET( mode == UTILS_AES_ENCRYPT || - mode == UTILS_AES_DECRYPT ); - - if( mode == UTILS_AES_ENCRYPT ) - return( utils_internal_aes_encrypt( ctx, input, output ) ); - else - return( utils_internal_aes_decrypt( ctx, input, output ) ); -} - -#if defined(UTILS_CIPHER_MODE_CBC) -/* - * AES-CBC buffer encryption/decryption - */ -int utils_aes_crypt_cbc( utils_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int i; - unsigned char temp[16]; - - AES_VALIDATE_RET( ctx != NULL ); - AES_VALIDATE_RET( mode == UTILS_AES_ENCRYPT || - mode == UTILS_AES_DECRYPT ); - AES_VALIDATE_RET( iv != NULL ); - AES_VALIDATE_RET( input != NULL ); - AES_VALIDATE_RET( output != NULL ); - - if( length % 16 ) - return( UTILS_ERR_AES_INVALID_INPUT_LENGTH ); - - - if( mode == UTILS_AES_DECRYPT ) - { - while( length > 0 ) - { - memcpy( temp, input, 16 ); - utils_aes_crypt_ecb( ctx, mode, input, output ); - - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( output[i] ^ iv[i] ); - - memcpy( iv, temp, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) - output[i] = (unsigned char)( input[i] ^ iv[i] ); - - utils_aes_crypt_ecb( ctx, mode, output, output ); - memcpy( iv, output, 16 ); - - input += 16; - output += 16; - length -= 16; - } - } - - return( 0 ); -} - -int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, uint8_t *pOutData, uint32_t outBuffLen, - uint8_t mode, uint8_t *pKey, uint16_t keybits, uint8_t *iv) -{ - int ret = QCLOUD_RET_SUCCESS; - int padlen; - utils_aes_context ctx; - - utils_aes_init( &ctx ); - - - if(UTILS_AES_ENCRYPT == mode){ - ret = utils_aes_setkey_enc( &ctx, pKey, keybits); - if( ret != 0 ){ - Log_e("Set encry key err,ret:%d", ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - /*zero padding*/ - if(outBuffLen < (datalen + UTILS_AES_BLOCK_LEN)){ - Log_e("Output buffer should not less than datalen+UTILS_AES_BLOCK_LEN for padding"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - padlen = UTILS_AES_BLOCK_LEN - datalen%UTILS_AES_BLOCK_LEN; - memcpy(pOutData, pInData, datalen); - memset(pOutData + datalen, '\0', padlen); /*zero-padding*/ - datalen += padlen; - }else{ - ret = utils_aes_setkey_dec( &ctx, pKey, keybits); - if( ret != 0 ){ - Log_e("Set dencry key err,ret:%d", ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - } - - ret = utils_aes_crypt_cbc( &ctx, mode, datalen, iv, pInData, pOutData); - if( ret != 0 ){ - Log_e("encryt err,ret:%d",ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - }else{ - ret = QCLOUD_RET_SUCCESS; - } - -exit: - - return ret; -} -#endif /* UTILS_CIPHER_MODE_CBC */ - -#endif /* !UTILS_AES_ALT */ - - -#if defined(UTILS_SELF_TEST) -/* - * AES test vectors from: - * - * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip - */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } -}; - -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } -}; - -#if defined(UTILS_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } -}; - -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } -}; -#endif /* UTILS_CIPHER_MODE_CBC */ - - - - - -/* - * Checkup routine - */ -int utils_aes_self_test( int verbose ) -{ - int ret = 0, i, j, u, mode; - unsigned int keybits; - unsigned char key[32]; - unsigned char buf[64]; - const unsigned char *aes_tests; -#if defined(UTILS_CIPHER_MODE_CBC) || defined(UTILS_CIPHER_MODE_CFB) - unsigned char iv[16]; -#endif -#if defined(UTILS_CIPHER_MODE_CBC) - unsigned char prv[16]; -#endif -#if defined(UTILS_CIPHER_MODE_CTR) || defined(UTILS_CIPHER_MODE_CFB) || \ - defined(UTILS_CIPHER_MODE_OFB) - size_t offset; -#endif -#if defined(UTILS_CIPHER_MODE_CTR) || defined(UTILS_CIPHER_MODE_XTS) - int len; -#endif -#if defined(UTILS_CIPHER_MODE_CTR) - unsigned char nonce_counter[16]; - unsigned char stream_block[16]; -#endif - utils_aes_context ctx; - - memset( key, 0, 32 ); - utils_aes_init( &ctx ); - - /* - * ECB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - keybits = 128 + u * 64; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-ECB-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - - memset( buf, 0, 16 ); - - if( mode == UTILS_AES_DECRYPT ) - { - ret = utils_aes_setkey_dec( &ctx, key, keybits ); - aes_tests = aes_test_ecb_dec[u]; - } - else - { - ret = utils_aes_setkey_enc( &ctx, key, keybits ); - aes_tests = aes_test_ecb_enc[u]; - } - - /* - * AES-192 is an optional feature that may be unavailable when - * there is an alternative underlying implementation i.e. when - * UTILS_AES_ALT is defined. - */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - utils_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) - { - goto exit; - } - - for( j = 0; j < 10000; j++ ) - { - ret = utils_aes_crypt_ecb( &ctx, mode, buf, buf ); - if( ret != 0 ) - goto exit; - } - - if( memcmp( buf, aes_tests, 16 ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); - -#if defined(UTILS_CIPHER_MODE_CBC) - /* - * CBC mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - keybits = 128 + u * 64; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-CBC-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - - memset( iv , 0, 16 ); - memset( prv, 0, 16 ); - memset( buf, 0, 16 ); - - if( mode == UTILS_AES_DECRYPT ) - { - ret = utils_aes_setkey_dec( &ctx, key, keybits ); - aes_tests = aes_test_cbc_dec[u]; - } - else - { - ret = utils_aes_setkey_enc( &ctx, key, keybits ); - aes_tests = aes_test_cbc_enc[u]; - } - - /* - * AES-192 is an optional feature that may be unavailable when - * there is an alternative underlying implementation i.e. when - * UTILS_AES_ALT is defined. - */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - utils_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) - { - goto exit; - } - - for( j = 0; j < 10000; j++ ) - { - if( mode == UTILS_AES_ENCRYPT ) - { - unsigned char tmp[16]; - - memcpy( tmp, prv, 16 ); - memcpy( prv, buf, 16 ); - memcpy( buf, tmp, 16 ); - } - - ret = utils_aes_crypt_cbc( &ctx, mode, 16, iv, buf, buf ); - if( ret != 0 ) - goto exit; - - } - - if( memcmp( buf, aes_tests, 16 ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); -#endif /* UTILS_CIPHER_MODE_CBC */ - -#if defined(UTILS_CIPHER_MODE_CFB) - /* - * CFB128 mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - keybits = 128 + u * 64; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-CFB128-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, aes_test_cfb128_iv, 16 ); - memcpy( key, aes_test_cfb128_key[u], keybits / 8 ); - - offset = 0; - ret = utils_aes_setkey_enc( &ctx, key, keybits ); - /* - * AES-192 is an optional feature that may be unavailable when - * there is an alternative underlying implementation i.e. when - * UTILS_AES_ALT is defined. - */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - utils_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) - { - goto exit; - } - - if( mode == UTILS_AES_DECRYPT ) - { - memcpy( buf, aes_test_cfb128_ct[u], 64 ); - aes_tests = aes_test_cfb128_pt; - } - else - { - memcpy( buf, aes_test_cfb128_pt, 64 ); - aes_tests = aes_test_cfb128_ct[u]; - } - - ret = utils_aes_crypt_cfb128( &ctx, mode, 64, &offset, iv, buf, buf ); - if( ret != 0 ) - goto exit; - - if( memcmp( buf, aes_tests, 64 ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); -#endif /* UTILS_CIPHER_MODE_CFB */ - -#if defined(UTILS_CIPHER_MODE_OFB) - /* - * OFB mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - keybits = 128 + u * 64; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-OFB-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( iv, aes_test_ofb_iv, 16 ); - memcpy( key, aes_test_ofb_key[u], keybits / 8 ); - - offset = 0; - ret = utils_aes_setkey_enc( &ctx, key, keybits ); - /* - * AES-192 is an optional feature that may be unavailable when - * there is an alternative underlying implementation i.e. when - * UTILS_AES_ALT is defined. - */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { - utils_printf( "skipped\n" ); - continue; - } - else if( ret != 0 ) - { - goto exit; - } - - if( mode == UTILS_AES_DECRYPT ) - { - memcpy( buf, aes_test_ofb_ct[u], 64 ); - aes_tests = aes_test_ofb_pt; - } - else - { - memcpy( buf, aes_test_ofb_pt, 64 ); - aes_tests = aes_test_ofb_ct[u]; - } - - ret = utils_aes_crypt_ofb( &ctx, 64, &offset, iv, buf, buf ); - if( ret != 0 ) - goto exit; - - if( memcmp( buf, aes_tests, 64 ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); -#endif /* UTILS_CIPHER_MODE_OFB */ - -#if defined(UTILS_CIPHER_MODE_CTR) - /* - * CTR mode - */ - for( i = 0; i < 6; i++ ) - { - u = i >> 1; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-CTR-128 (%s): ", - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - - memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); - memcpy( key, aes_test_ctr_key[u], 16 ); - - offset = 0; - if( ( ret = utils_aes_setkey_enc( &ctx, key, 128 ) ) != 0 ) - goto exit; - - len = aes_test_ctr_len[u]; - - if( mode == UTILS_AES_DECRYPT ) - { - memcpy( buf, aes_test_ctr_ct[u], len ); - aes_tests = aes_test_ctr_pt[u]; - } - else - { - memcpy( buf, aes_test_ctr_pt[u], len ); - aes_tests = aes_test_ctr_ct[u]; - } - - ret = utils_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, - stream_block, buf, buf ); - if( ret != 0 ) - goto exit; - - if( memcmp( buf, aes_tests, len ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); -#endif /* UTILS_CIPHER_MODE_CTR */ - -#if defined(UTILS_CIPHER_MODE_XTS) - { - static const int num_tests = - sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); - utils_aes_xts_context ctx_xts; - - /* - * XTS mode - */ - utils_aes_xts_init( &ctx_xts ); - - for( i = 0; i < num_tests << 1; i++ ) - { - const unsigned char *data_unit; - u = i >> 1; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-XTS-128 (%s): ", - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - - memset( key, 0, sizeof( key ) ); - memcpy( key, aes_test_xts_key[u], 32 ); - data_unit = aes_test_xts_data_unit[u]; - - len = sizeof( *aes_test_xts_ct32 ); - - if( mode == UTILS_AES_DECRYPT ) - { - ret = utils_aes_xts_setkey_dec( &ctx_xts, key, 256 ); - if( ret != 0) - goto exit; - memcpy( buf, aes_test_xts_ct32[u], len ); - aes_tests = aes_test_xts_pt32[u]; - } - else - { - ret = utils_aes_xts_setkey_enc( &ctx_xts, key, 256 ); - if( ret != 0) - goto exit; - memcpy( buf, aes_test_xts_pt32[u], len ); - aes_tests = aes_test_xts_ct32[u]; - } - - - ret = utils_aes_crypt_xts( &ctx_xts, mode, len, data_unit, - buf, buf ); - if( ret != 0 ) - goto exit; - - if( memcmp( buf, aes_tests, len ) != 0 ) - { - ret = 1; - goto exit; - } - - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); - - utils_aes_xts_free( &ctx_xts ); - } -#endif /* UTILS_CIPHER_MODE_XTS */ - - ret = 0; - -exit: - if( ret != 0 && verbose != 0 ) - utils_printf( "failed\n" ); - - utils_aes_free( &ctx ); - - return( ret ); -} - -/*aes128-cbc*/ -int aes_sample(int verbose) -{ - int ret = 0,i; - unsigned int keybits; - unsigned char key[UTILS_AES_BLOCK_LEN] = "1234567890abcdef"; - char dataIn[1024] = {0}; - unsigned char iv[16]; - int sLen; - int datalen; - - utils_printf("\nAES-CBC-128 enc "); - keybits = AES_KEY_BITS_128; - memset( iv , '0', 16); - - sLen = strlen("{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}"); - strncpy(dataIn,"{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}",sLen); - - utils_printf("\nthe data to encrypt(%d):\n",sLen); - for (i = 0; i -#include - -#include "utils_base64.h" - -static const unsigned char base64_enc_map[64] = -{ - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', - 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', - 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', - 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', - 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', '+', '/' -}; - -static const unsigned char base64_dec_map[128] = -{ - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 62, 127, 127, 127, 63, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, - 127, 64, 127, 127, 127, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 127, 127, 127, 127, 127 -}; - -#define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ - -int qcloud_iot_utils_base64encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) -{ - size_t i, n; - unsigned char *p; - - if( slen == 0 ) - { - *olen = 0; - return( 0 ); - } - - n = slen / 3 + ( slen % 3 != 0 ); - - if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) - { - *olen = BASE64_SIZE_T_MAX; - return( QCLOUD_ERR_FAILURE ); - } - - n *= 4; - - if( ( dlen < n + 1 ) || ( NULL == dst ) ) - { - *olen = n + 1; - return( QCLOUD_ERR_FAILURE ); - } - - n = ( slen / 3 ) * 3; - - int C1, C2, C3; - for( i = 0, p = dst; i < n; i += 3 ) - { - C1 = *src++; - C2 = *src++; - C3 = *src++; - - *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; - *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; - *p++ = base64_enc_map[C3 & 0x3F]; - } - - if( i < slen ) - { - C1 = *src++; - C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; - - *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; - *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - - if( ( i + 1 ) < slen ) - *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; - else *p++ = '='; - - *p++ = '='; - } - - *olen = p - dst; - *p = 0; - - return( 0 ); -} - -int qcloud_iot_utils_base64decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) -{ - size_t i, n; - uint32_t j, x; - unsigned char *p; - - /* First pass: check for validity and get output length */ - for( i = n = j = 0; i < slen; i++ ) - { - /* Skip spaces before checking for EOL */ - x = 0; - while( i < slen && src[i] == ' ' ) - { - ++i; - ++x; - } - - /* Spaces at end of buffer are OK */ - if( i == slen ) - break; - - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) - continue; - - if( src[i] == '\n' ) - continue; - - /* Space inside a line is an error */ - if( x != 0 ) - return( QCLOUD_ERR_FAILURE ); - - if( src[i] == '=' && ++j > 2 ) - return( QCLOUD_ERR_FAILURE ); - - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( QCLOUD_ERR_FAILURE ); - - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( QCLOUD_ERR_FAILURE ); - - n++; - } - - if( n == 0 ) - { - *olen = 0; - return( 0 ); - } - - n = ( ( n * 6 ) + 7 ) >> 3; - n -= j; - - if( dst == NULL || dlen < n ) - { - *olen = n; - return( QCLOUD_ERR_FAILURE ); - } - - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' || *src == ' ' ) - continue; - - j -= ( base64_dec_map[*src] == 64 ); - x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - - if( ++n == 4 ) - { - n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); - } - } - - *olen = p - dst; - - return( 0 ); -} - -#ifdef __cplusplus -} -#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_getopt.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_getopt.c deleted file mode 100644 index 723f6f49..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_getopt.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include - -#include "qcloud_iot_import.h" -#include "utils_getopt.h" - -static int utils_opterr = 1; /* if error message should be printed */ -static int utils_optind = 1; /* index into parent argv vector */ -static int utils_optopt; /* character checked for validity */ -static int utils_optreset = 1; /* reset getopt */ - -char* utils_optarg; /* argument associated with option */ - -int utils_getopt(int nargc, char* const* nargv, const char* options) -{ - -#define BADCH (int)'?' -#define BADARG (int)':' -#define EMSG "" - - static char* place = EMSG; /* option letter processing */ - const char* oli; /* option letter list index */ - - if (utils_optreset || !*place) /* update scanning pointer */ - { - utils_optreset = 0; - - if (utils_optind >= nargc || *(place = nargv[utils_optind]) != '-') - { - utils_optind = 1; - utils_optreset = 1; - place = EMSG; - return (-1); - } - - place++; - } - - /* option letter okay? */ - if ((utils_optopt = (int)*place++) == (int)':' || - !(oli = strchr(options, utils_optopt))) { - /* - * if the user didn't specify '-' as an option, - * assume it means -1. - */ - if (utils_optopt == (int)'-') - return (-1); - - if (!*place) - ++utils_optind; - - if (utils_opterr && *options != ':') - HAL_Printf("illegal option - %c\n", utils_optopt); - - return (BADCH); - } - - if (*++oli != ':') { /* don't need argument */ - utils_optarg = NULL; - if (!*place) - ++utils_optind; - } - else - { /* need an argument */ - if (*place) /* no white space */ - utils_optarg = place; - else if (nargc <= ++utils_optind) { /* no arg */ - place = EMSG; - if (*options == ':') - return (BADARG); - if (utils_opterr) - HAL_Printf("option requires an argument - %c\n", utils_optopt); - return (BADCH); - } - else /* white space */ - utils_optarg = nargv[utils_optind]; - - place = EMSG; - ++utils_optind; - } - - /* dump back option letter */ - return (utils_optopt); -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_ringbuff.c b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_ringbuff.c deleted file mode 100644 index 5af0574c..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_ringbuff.c +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. - - * Licensed under the MIT License (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://opensource.org/licenses/MIT - - * Unless required by applicable law or agreed to in writing, software distributed under the License is - * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include -#include -#include "utils_ringbuff.h" - -int ring_buff_init(sRingbuff* ring_buff, char* buff, uint32_t size ) -{ - ring_buff->buffer = buff; - ring_buff->size = size; - ring_buff->readpoint = 0; - ring_buff->writepoint = 0; - memset(ring_buff->buffer, 0, ring_buff->size); - ring_buff->full = false; - - return RINGBUFF_OK; -} - -int ring_buff_flush(sRingbuff* ring_buff) -{ - ring_buff->readpoint = 0; - ring_buff->writepoint = 0; - memset(ring_buff->buffer, 0, ring_buff->size); - ring_buff->full = false; - - return RINGBUFF_OK; -} - -int ring_buff_push_data(sRingbuff* ring_buff, uint8_t *pData, int len) -{ - int i; - - if(len > ring_buff->size) - { - return RINGBUFF_TOO_SHORT; - } - - for(i = 0; i < len; i++) - { - if(((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) - { - ring_buff->full = true; - return RINGBUFF_FULL; - } - else - { - if(ring_buff->writepoint < (ring_buff->size - 1)) - { - ring_buff->writepoint ++; - } - else - { - ring_buff->writepoint = 0; - } - ring_buff->buffer[ring_buff->writepoint] = pData[i]; - } - } - - return RINGBUFF_OK; -} - -int ring_buff_pop_data(sRingbuff* ring_buff, uint8_t *pData, int len) -{ - int i; - - if(len > ring_buff->size) - { - return RINGBUFF_TOO_SHORT; - } - - for(i = 0; i < len; i++) - { - if(ring_buff->writepoint == ring_buff->readpoint) - { - break; - } - else - { - if(ring_buff->readpoint == (ring_buff->size - 1)) - { - ring_buff->readpoint = 0; - } - - else - { - ring_buff->readpoint++; - } - pData[i] = ring_buff->buffer[ring_buff->readpoint]; - } - } - - return i; -} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/example_config.json b/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/example_config.json deleted file mode 100644 index 9d3f9ede..00000000 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/example_config.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "version":"1.0", - "properties":[ - { - "id":"time", - "name":"time", - "required":false, - "desc":"", - "mode":"rw", - "define":{ - "type":"timestamp" - } - }, - { - "id":"float", - "name":"float", - "required":false, - "desc":"", - "mode":"r", - "define":{ - "type":"float", - "min":"-10", - "max":"10", - "start":"-5", - "step":"0.5", - "unit":"cm" - } - }, - { - "id":"light_switch", - "name":"电灯开关", - "required":true, - "desc":"控制电灯开灭", - "mode":"rw", - "define":{ - "type":"bool", - "mapping":{ - "0":"关", - "1":"开" - } - } - }, - { - "id":"color", - "name":"颜色", - "desc":"灯光颜色", - "mode":"rw", - "define":{ - "type":"enum", - "mapping":{ - "0":"Red", - "1":"Green", - "2":"Blue" - } - } - }, - { - "id":"brightness", - "name":"颜色", - "required":false, - "desc":"灯光颜色", - "mode":"rw", - "define":{ - "type":"int", - "min":"-9", - "max":"100", - "start":"-1", - "step":"5", - "unit":"cm" - } - }, - { - "id":"name", - "name":"灯位置名称", - "desc":"灯位置名称:书房、客厅等", - "mode":"rw", - "required":true, - "define":{ - "type":"string", - "min":"1", - "max":"64" - } - } - ], - "events":[ - { - "id":"all_function", - "name":"ALL_FUNCTION", - "required":false, - "desc":"", - "params":[ - { - "id":"bool", - "name":"bool", - "desc":"", - "define":{ - "type":"bool", - "mapping":{ - "0":"关", - "1":"开" - } - } - }, - { - "id":"int", - "name":"int", - "desc":"", - "define":{ - "type":"int", - "min":"1", - "max":"100", - "start":"1", - "step":"1", - "unit":"cm" - } - }, - { - "id":"str", - "name":"str", - "desc":"", - "define":{ - "type":"string", - "min":"1", - "max":"64" - } - }, - { - "id":"float", - "name":"float", - "desc":"", - "define":{ - "type":"float", - "min":"0", - "max":"100", - "start":"0", - "step":"1.5", - "unit":"cm" - } - }, - { - "id":"enum1", - "name":"enum1", - "desc":"", - "define":{ - "type":"enum", - "mapping":{ - "0":"color", - "1":"door" - } - } - }, - { - "id":"time", - "name":"time", - "desc":"", - "define":{ - "type":"timestamp" - } - } - ], - "type":"alert" - }, - { - "id":"status_report", - "name":"DeviceStatus", - "desc":"Report the device status我是中文", - "type":"info", - "required":true, - "params":[ - { - "id":"status", - "name":"running_state", - "desc":"Report current device running state", - "define":{ - "type":"bool", - "mapping":{ - "0":"normal", - "1":"fault" - } - } - }, - { - "id":"message", - "name":"Message", - "desc":"Some extra message", - "define":{ - "type":"string", - "min":"1", - "max":"64" - } - } - ] - }, - { - "id":"hardware_fault", - "name":"Hardware_fault", - "required":false, - "desc":"Report hardware fault", - "params":[ - { - "id":"name", - "name":"Name", - "desc":"Name like: memory,tf card, censors ...", - "define":{ - "type":"string", - "min":"1", - "max":"64" - } - }, - { - "id":"error_code", - "name":"Error_Code", - "desc":"Error code for fault", - "define":{ - "type":"int", - "unit":"", - "step":"1", - "min":"0", - "max":"2000", - "start":"0" - } - } - ], - "type":"fault" - } - ], - "profile":{ - "productID":"C0NEMO9UO0" - } -} \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/.clang-format b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/.clang-format new file mode 100644 index 00000000..4ae66053 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/.clang-format @@ -0,0 +1,9 @@ +BasedOnStyle: Google +BreakBeforeBraces: Linux +AlignConsecutiveDeclarations: true +AlignConsecutiveMacros: true +AlignConsecutiveAssignments: true +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: false +IndentWidth: 4 +ColumnLimit: 120 diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/.gitignore b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/.gitignore similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/.gitignore rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/.gitignore diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/CMakeLists.txt b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/CMakeLists.txt similarity index 95% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/CMakeLists.txt rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/CMakeLists.txt index 8488cb2c..4b511674 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/CMakeLists.txt +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/CMakeLists.txt @@ -25,10 +25,10 @@ set(FEATURE_MQTT_COMM_ENABLED ON) set(FEATURE_MQTT_DEVICE_SHADOW ON) # 是否打开CoAP通道的总开关 -set(FEATURE_COAP_COMM_ENABLED ON) +set(FEATURE_COAP_COMM_ENABLED OFF) # 是否打开MQTT通道网关功能 -set(FEATURE_GATEWAY_ENABLED OFF) +set(FEATURE_GATEWAY_ENABLED ON) # 是否打开OTA固件升级总开关 set(FEATURE_OTA_COMM_ENABLED ON) @@ -42,8 +42,11 @@ set(FEATURE_AUTH_MODE "KEY") # 接入认证是否不使用TLS,证书方式必须选择使用TLS,密钥认证可选择不使用TLS set(FEATURE_AUTH_WITH_NOTLS OFF) +# 是否打开多线程功能支持 +set(FEATURE_MULTITHREAD_ENABLED ON) + # 是否使能设备动态注册 -set(FEATURE_DEV_DYN_REG_ENABLED OFF) +set(FEATURE_DEV_DYN_REG_ENABLED ON) # 是否打开日志上报云端功能 set(FEATURE_LOG_UPLOAD_ENABLED OFF) @@ -54,6 +57,9 @@ set(FEATURE_DEBUG_DEV_INFO_USED OFF) # 是否打开获取iot后台时间功能 set(FEATURE_SYSTEM_COMM_ENABLED ON) +# 是否使用HTTPS下载固件 +set(FEATURE_OTA_USE_HTTPS ON) + # 是否打开AT模组TCP功能 set(FEATURE_AT_TCP_ENABLED OFF) @@ -61,20 +67,14 @@ set(FEATURE_AT_TCP_ENABLED OFF) set(AT_DEVICE_NAME "esp8266") # 是否打开AT模组中断接收功能 -set(FEATURE_AT_UART_RECV_IRQ ON) +set(FEATURE_AT_UART_RECV_IRQ OFF) # 是否打开AT模组多线程功能 -set(FEATURE_AT_OS_USED ON) +set(FEATURE_AT_OS_USED OFF) # 是否打开AT模组调试功能 set(FEATURE_AT_DEBUG OFF) -# 是否编译Linux多线程测试例程 -set(FEATURE_MULTITHREAD_TEST_ENABLED ON) - -# 是否使用HTTPS下载固件 -set(FEATURE_OTA_USE_HTTPS ON) - ######################CONFIG END###################################### # 设置CMAKE使用编译工具及编译选项 @@ -141,6 +141,7 @@ option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED}) option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" ${FEATURE_AUTH_WITH_NOTLS}) option(COAP_COMM_ENABLED "Enable COAP_COMM" ${FEATURE_COAP_COMM_ENABLED}) option(SYSTEM_COMM "Enable SYSTEM_COMM" ${FEATURE_SYSTEM_COMM_ENABLED}) +option(MULTITHREAD_ENABLED "Enable Multi-thread support" ${FEATURE_MULTITHREAD_ENABLED}) option(DEV_DYN_REG_ENABLED "Enable DEV_DYN_REG" ${FEATURE_DEV_DYN_REG_ENABLED}) option(LOG_UPLOAD "Enable LOG_UPLOAD" ${FEATURE_LOG_UPLOAD_ENABLED}) option(DEBUG_DEV_INFO_USED "Enable DEBUG_DEV_INFO_USED" ${FEATURE_DEBUG_DEV_INFO_USED}) diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/CMakeSettings.json b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/CMakeSettings.json similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/CMakeSettings.json rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/CMakeSettings.json diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/LICENSE b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/LICENSE similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/LICENSE rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/LICENSE diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/Makefile b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/Makefile similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/Makefile rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/Makefile diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/README.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/README.md similarity index 94% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/README.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/README.md index 466ef781..037ad28f 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/README.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/README.md @@ -61,6 +61,10 @@ C-SDK的samples目录有使用各个功能的示例,关于运行示例的详 ## 五、注意事项 +#### 多设备连接 +从版本3.2.0开始,SDK支持多个设备作为客户端同时访问物联网后台,并对多线程环境下的接口使用进行优化增强,具体请参考docs目录文档**C-SDK_MTMC多线程多设备支持** +该版本以面向对象方式对状态变量和参数进行封装,对外部接口的影响是证书设备进行初始化上有变化,其他的接口都没有变化,用户只要参考相关示例修改_setup_connect_init_params函数即可。 + #### OTA升级API变化 从SDK版本3.0.3开始,OTA升级支持了断点续传,当固件下载过程中如果因为网络异常或其他原因被打断,可以将已经下载的固件部分保存,在下次恢复下载时候可以不用从零开始下载,而是从未下载的部分开始。 在支持这一新特性之后,OTA相关API的使用方法发生了变化,对于从3.0.2及以前的版本升级的用户,需要修改用户逻辑代码,否则固件下载会失败,请参考**samples/ota/ota_mqtt_sample.c**进行修改。 diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/certs/README.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/certs/README.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/certs/README.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/certs/README.md diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/cmake_build.sh b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/cmake_build.sh new file mode 100644 index 00000000..b3663408 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/cmake_build.sh @@ -0,0 +1,58 @@ +#! /bin/bash + +if [ "$#" -eq "0" ]; then + rm -rf output + rm -rf build + echo "Build all (SDK libs and samples)" + mkdir -p build + cd build + cmake .. + make + exit +elif [ "$#" -eq "1" -a $1 == "samples" ]; then + if [ ! -d "output/release/bin" ]; then + rm -rf output/release/bin + elif [ ! -d "output/debug/bin" ]; then + rm -rf output/debug/bin + else + echo "Output folder not found! Please build SDK first" + exit + fi + rm -rf build + echo "Build samples only" + mkdir -p build + cd build + cmake -DSAMPLE_ONLY=ON .. + make + exit +elif [ "$#" -eq "1" -a $1 == "clean" ]; then + echo "Clean all (SDK lib and samples)" + rm -rf output + rm -rf build + exit +elif [ "$#" -eq "1" -a $1 == "code-check" ]; then +# code-check requires clang-tidy and cpplint +# sudo apt install clang-tidy +# pip install cpplint + echo "run code check" + rm -rf build + mkdir -p build + cd build + cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON .. + echo "clang-tidy check begin" + clang_extra_arg="-extra-arg=-I/usr/lib/gcc/x86_64-linux-gnu/7/include -extra-arg=-I/usr/lib/gcc/x86_64-linux-gnu/7/include-fixed" + clang_check_rules="-checks=-clang-analyzer-osx*,-clang-analyzer-security.insecureAPI.strcpy,-clang-diagnostic-missing-braces,-clang-diagnostic-varargs" + ../tools/run-clang-tidy ${clang_extra_arg} ${clang_check_rules} >../code-check-clang-tidy.txt + echo "clang-tidy check end" + echo "cpplint check begin" + cd .. + # find ./samples/ ./include/ ./sdk_src/ ./platform/ -name *.c -o -name *.h | xargs clang-format -i + cpplint_rules="--filter=-whitespace/line_length,-readability/casting,-build/include_subdir,-whitespace/braces,-whitespace/comments,-whitespace/blank_line,-whitespace/parens,-whitespace/semicolon,-whitespace/end_of_line,-whitespace/ending_newline,-whitespace/comma,-build/header_guard,-runtime/int,-runtime/printf,-readability/todo,-build/include_order,-build/include_what_you_use" + cpplint_coverage="include/ samples/ platform/ sdk_src/" + cpplint ${cpplint_rules} --recursive ${cpplint_coverage} &>./code-check-cpplint.txt + echo "cpplint check end" + exit +else + echo "Usage: "$0" " + exit +fi diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/device_info.json b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/device_info.json similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/device_info.json rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/device_info.json diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_API及可变参数说明.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_API及可变参数说明.md similarity index 91% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_API及可变参数说明.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_API及可变参数说明.md index cd5c4da2..df1777ca 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_API及可变参数说明.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_API及可变参数说明.md @@ -38,6 +38,7 @@ C-SDK 的使用可以根据具体场景需求,配置相应的参数,满足 ## API 函数说明 以下是 C-SDK v3.1.0版本提供的主要功能和对应 API 接口说明,用于客户编写业务逻辑,更加详细的说明如接口参数及返回值可查看SDK代码 include/exports/qcloud_iot_export_*.h 等头文件中的注释 +接口使用示例代码请参考samples目录下的对应代码,以及docs/IoT_Hub目录下的文档说明 ### 1. MQTT 接口 @@ -50,21 +51,16 @@ C-SDK 的使用可以根据具体场景需求,配置相应的参数,满足 | 5 | IOT_MQTT_Subscribe | 订阅 MQTT 主题 | | 6 | IOT_MQTT_Unsubscribe | 取消订阅已订阅的 MQTT 主题 | | 7 | IOT_MQTT_IsConnected | 查看当前 MQTT 是否已连接 | -| 8 | IOT_MQTT_GetErrCode | 获取IOT_MQTT_Construct失败的错误码 | +| 8 | IOT_MQTT_IsSubReady | 查询对应的主题是否已经订阅成功 | +| 9 | IOT_MQTT_GetDeviceInfo | 获取该 MQTTclien对应的设备信息 | +| 10 | IOT_MQTT_StartLoop | 多线程环境下,启动 MQTTclient后台Yield线程 | +| 11 | IOT_MQTT_StopLoop | 多线程环境下,停止 MQTTclient后台Yield线程 | - 接口使用说明 ``` MQTT构造时候除了提供设备信息,还需要提供一个回调函数,用于接收消息包括连接状态通知,订阅主题是否成功,QoS1消息是否发布成功等等事件通知。订阅主题时则需提供另一个回调函数,用于接收该主题的消息下发。具体接口使用方式可以参考docs/IoT_Hub目录的mqtt_sample_快速入门文档。 ``` -- 多线程环境使用说明 -SDK对于MQTT接口在多线程环境下的使用有如下注意事项: -``` -1. 不允许多线程调用IOT_MQTT_Yield,IOT_MQTT_Construct以及IOT_MQTT_Destroy -2. 可以多线程调用IOT_MQTT_Publish,IOT_MQTT_Subscribe及IOT_MQTT_Unsubscribe -3. IOT_MQTT_Yield 作为从socket读取并处理MQTT报文的函数,应保证一定的执行时间,避免被长时间挂起或抢占 -``` - ### 2. 设备影子接口 关于设备影子功能介绍,可以参考[设备影子详情](https://cloud.tencent.com/document/product/634/11918) @@ -87,6 +83,7 @@ SDK对于MQTT接口在多线程环境下的使用有如下注意事项: | 15 | IOT_Shadow_JSON_Construct_OverwriteReport | 在JSON文档中添加reported字段,覆盖更新 | | 16 | IOT_Shadow_JSON_ConstructReportAndDesireAllNull | 在JSON文档中添加reported字段,同时清空desired字段 | | 17 | IOT_Shadow_JSON_ConstructDesireAllNull | 在JSON文档中添加 "desired": null 字段 | +| 18 | IOT_Shadow_Get_Mqtt_Client | 获取该ShadowClient对应的MQTTclient | ### 3. CoAP 接口 @@ -99,6 +96,7 @@ SDK对于MQTT接口在多线程环境下的使用有如下注意事项: | 5 | IOT_COAP_GetMessageId | 获取 COAP Response 消息 msgId | | 6 | IOT_COAP_GetMessagePayload | 获取 COAP Response 消息内容 | | 7 | IOT_COAP_GetMessageCode | 获取 COAP Response 消息错误码 | +| 9 | IOT_COAP_GetDeviceInfo | 获取该 COAPclien对应的设备信息 | ### 4. OTA 接口 关于 OTA 固件下载功能介绍,可以参考[设备固件升级](https://cloud.tencent.com/document/product/634/14674) @@ -153,4 +151,10 @@ SDK对于MQTT接口在多线程环境下的使用有如下注意事项: | 4 | IOT_Gateway_Publish | 发布 MQTT 消息 | | 5 | IOT_Gateway_Subscribe | 订阅 MQTT 主题 | | 6 | IOT_Gateway_Unsubscribe | 取消订阅已订阅的 MQTT 主题 | +| 18 | IOT_Gateway_Get_Mqtt_Client | 获取该GatewayClient对应的MQTTclient | +### 8. 动态注册接口 + +| 序号 | 函数名 | 说明 | +| ---- | ---------------------------- | ------------------------------------------------- | +| 1 | IOT_DynReg_Device | 向后台动态注册设备并获取设备密钥或者证书 | diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md similarity index 97% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md index 3cf13053..1acaa1bc 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_Build编译环境及配置选项说明.md @@ -59,15 +59,17 @@ sdk_src为SDK的核心逻辑及协议相关代码,一般不需要修改,其 | FEATURE_OTA_SIGNAL_CHANNEL | MQTT/COAP | OTA信令通道类型 | | FEATURE_AUTH_MODE | KEY/CERT | 接入认证方式 | | FEATURE_AUTH_WITH_NOTLS | ON/OFF | OFF: TLS使能, ON: TLS关闭 | +| FEATURE_MULTITHREAD_ENABLED | ON/OFF | 是否使能SDK对多线程环境的支持 | | FEATURE_DEV_DYN_REG_ENABLED | ON/OFF | 设备动态注册开关 | | FEATURE_LOG_UPLOAD_ENABLED | ON/OFF | 日志上报开关 | | FEATURE_DEBUG_DEV_INFO_USED | ON/OFF | 设备信息获取来源开关 | | FEATURE_SYSTEM_COMM_ENABLED | ON/OFF | 获取后台时间开关 | +| FEATURE_OTA_USE_HTTPS | ON/OFF | 是否使用HTTPS下载固件 | | FEATURE_AT_TCP_ENABLED | ON/OFF | AT模组TCP功能开关 | | FEATURE_AT_UART_RECV_IRQ | ON/OFF | AT模组中断接受功能开关 | | FEATURE_AT_OS_USED | ON/OFF | AT模组多线程功能开关 | | FEATURE_AT_DEBUG | ON/OFF | AT模组调试功能开关 | -| FEATURE_MULTITHREAD_TEST_ENABLED | ON/OFF | 是否编译Linux多线程测试例程 | + 配置选项之间存在依赖关系,当依赖选项的值为有效值时,部分配置选项才有效,主要如下: diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_MTMC多线程多设备支持.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_MTMC多线程多设备支持.md new file mode 100644 index 00000000..c747ea0b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_MTMC多线程多设备支持.md @@ -0,0 +1,24 @@ +# C-SDK 多线程及多设备支持 + +多线程及多设备支持实例需要首先使能编译配置开关FEATURE_MULTITHREAD_ENABLED + +## Multi-Thread 多线程环境使用说明 + +设备端 C-SDK 支持在多线程多任务环境下使用,但是对接口的使用有一定规范。 +比如对于MQTT接口在多线程环境下的使用有如下注意事项: +``` +1. 不允许多线程调用IOT_MQTT_Yield,IOT_MQTT_Construct以及IOT_MQTT_Destroy +2. 可以多线程调用IOT_MQTT_Publish,IOT_MQTT_Subscribe及IOT_MQTT_Unsubscribe +3. IOT_MQTT_Yield 作为从socket读取并处理MQTT报文的函数,应保证一定的执行时间,避免被长时间挂起或抢占 +``` +在多线程环境下,建议可以使用 IOT_MQTT_StartLoop 和 IOT_MQTT_StopLoop 来启动和停止后台 IOT_MQTT_Yield 线程,则在需要读取报文的时候不再需要主动调用IOT_MQTT_Yield函数,由后台线程来读取并处理MQTT报文。 +使用示例可以参考 samples/mqtt/multi_thread_mqtt_sample + +其他模块接口的使用可以参考MQTT接口的使用 + +## Multi-Client 多设备接入使用 + +在SDK版本3.2.0之后,支持同时使用多个设备接入。SDK采用面向对象方式对状态变量和参数进行封装,使得比如一个MQTT/Shadow Client实例可以对应一个设备,通过提供多个设备三元组,创建多个Client实例,则可以同时进行多个设备的接入和通讯。 +具体的示例代码可以参考 samples/multi_client 下面的sample,通过创建多个线程,每个线程里面创建各自的 MQTT/Shadow Client,则相当于多个设备在同时访问后台服务。 + + diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_Porting跨平台移植概述.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_Porting跨平台移植概述.md similarity index 89% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_Porting跨平台移植概述.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_Porting跨平台移植概述.md index 1a2fd9e6..0fdde418 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/C-SDK_Porting跨平台移植概述.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/C-SDK_Porting跨平台移植概述.md @@ -30,22 +30,22 @@ HAL层主要有几大块的移植,分别是OS相关的、网络及TLS相关的 SDK在 **platform/os** 目录示例了Linux、Windows、FreeRTOS及nonOS四个场景的硬件抽象层实现,可以参考最相近的目录展开目标平台的移植。 #### OS相关接口 +以下函数跟线程/互斥锁/信号量相关的,只有在使能多线程/多任务情况下(MULTITHREAD_ENABLED)才需要移植 | 序号 | 函数名 | 说明 | | ---- | ---------------------- | ------------------------------------------ | | 1 | HAL_Malloc | 动态申请内存块 | | 2 | HAL_Free | 释放内存块 | | 3 | HAL_ThreadCreate | 线程创建 | -| 4 | HAL_ThreadDestroy | 线程销毁 | -| 5 | HAL_MutexCreate | 创建互斥锁 | -| 6 | HAL_MutexDestroy | 销毁互斥锁 | -| 7 | HAL_MutexLock | mutex 加锁 | -| 8 | HAL_MutexUnlock | mutex 解锁 | -| 9 | HAL_SemaphoreCreate | 创建信号量 | -| 10 | HAL_SemaphoreDestroy | 销毁信号量 | -| 11 | HAL_SemaphoreWait | 等待信号量 | -| 12 | HAL_SemaphorePost | 释放信号量 | -| 13 | HAL_SleepMs | 休眠 | +| 4 | HAL_MutexCreate | 创建互斥锁 | +| 5 | HAL_MutexDestroy | 销毁互斥锁 | +| 6 | HAL_MutexLock | mutex 加锁 | +| 7 | HAL_MutexUnlock | mutex 解锁 | +| 8 | HAL_SemaphoreCreate | 创建信号量 | +| 9 | HAL_SemaphoreDestroy | 销毁信号量 | +| 10 | HAL_SemaphoreWait | 等待信号量 | +| 11 | HAL_SemaphorePost | 释放信号量 | +| 12 | HAL_SleepMs | 休眠 | #### 网络及TLS相关的HAL接口 diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/Device_Auth设备接入认证.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/Device_Auth设备接入认证.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/Device_Auth设备接入认证.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/Device_Auth设备接入认证.md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/FreeRTOS+lwIP平台移植说明.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/FreeRTOS+lwIP平台移植说明.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/FreeRTOS+lwIP平台移植说明.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/FreeRTOS+lwIP平台移植说明.md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md similarity index 97% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md index 36256e84..1a498115 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/IoT_Hub通信平台快速入门.md @@ -8,6 +8,9 @@ ## 设备影子 请参考**shadow_sample_设备影子.md**文档,介绍设备影子功能,并结合 SDK 的**shadow_sample**展示影子的数据流和功能 +## 固件升级 +请参考**ota_sample_固件升级.md**文档,介绍固件升级功能,并结合 SDK 的**ota_mqtt_sample**展示固件升级的流程和功能 + ## 网关功能 请参考**gateway_sample_网关功能.md**文档,介绍如何在腾讯IoT Hub控制台申请网关设备并绑定子设备, 并结合本 SDK 的**gateway_sample**快速体验网关设备通过 MQTT 协议连接到腾讯云IoT Hub, 代理子设备上下线,发送和接收消息。 diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/door_aircond_sample_设备互通.md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/dynreg_dev_sample_动态注册.md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md similarity index 90% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md index 56cf9b26..7f4446d1 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/gateway_sample_网关功能.md @@ -128,4 +128,21 @@ INF|2019-09-16 14:35:35|gateway_common.c|_gateway_message_handler(134): client_i DBG|2019-09-16 14:35:35|mqtt_client_publish.c|qcloud_iot_mqtt_publish(329): publish topic seq=27804|topicName=S3EUVBRJLB/test_device/data|payload={"data":"test gateway"} INF|2019-09-16 14:35:35|gateway_sample.c|_event_handler(88): publish success, packet-id=27804 INF|2019-09-16 14:35:35|gateway_sample.c|_message_handler(111): Receive Message With topicName:S3EUVBRJLB/test_device/data, payload:{"data":"test gateway"} -``` \ No newline at end of file +``` + +## 三. 代码说明 + +gateway_sample示例演示了网关代理一个子设备的情况,如果用户需要增加更多子设备,可以先在控制台添加子设备,然后在代码里面通过创建更多GatewayParam参数实例,并将GatewayParam参数传递给网关各个API,即可以实现网关代理多个子设备进行通讯。 +``` + // one GatewayParam only support one sub-device + // use more GatewayParam to add more sub-device + GatewayParam gw_param1 = DEFAULT_GATEWAY_PARAMS;; + gw_param1.product_id = gw_dev_info.gw_info.product_id; + gw_param1.device_name = gw_dev_info.gw_info.device_name; + + gw_param1.subdev_product_id = "SUB-PRODUCT1"; + gw_param1.subdev_device_name = "SUB-DEVICE1"; + + IOT_Gateway_Subdev_Online(client, &gw_param1); +``` + diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md similarity index 93% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md index 90c8c08e..12281d2b 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/mqtt_sample_快速入门.md @@ -47,6 +47,11 @@ 随后将会创建出 productID/\${deviceName}/data 的 Topic,在产品页面的权限列表中可以查看该产品的所有权限。 +#### 5. 创建消息转发规则 +消息在设备间的转发需要通过规则引擎进行,具体用法请参考[规则引擎](https://cloud.tencent.com/document/product/634/14446) + +需要注意的是同一个设备,如果想进行自发自收,也需要创建转发规则,对于本示例,可以参考下图设立转发规则(需要将图片中productID以及deviceName部分替换为上面创建的设备信息) +![](https://main.qcloudimg.com/raw/5cdda90be21256386bcd786268f72e6f.png) ## 二. 编译运行示例程序 diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/ota_sample_固件升级.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/ota_sample_固件升级.md new file mode 100644 index 00000000..b674f7f5 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/ota_sample_固件升级.md @@ -0,0 +1,112 @@ +# OTA设备固件升级 + +关于物联平台 OTA 固件升级功能及流程介绍,请参考官网文档[设备固件升级](https://cloud.tencent.com/document/product/634/14674) + +## 一. 上传固件 + +进行固件升级,首先要上传固件到物联网后台,可以通过控制台进行上传,如下图示: +![](https://main.qcloudimg.com/raw/219ab155f886e2ac1a1ebd0d7a1184aa.png) + +## 二. 编译运行示例程序(以**MQTT密钥认证设备**为例) +#### 1. 编译 SDK +修改CMakeLists.txt确保以下选项存在 +``` +set(BUILD_TYPE "release") +set(COMPILE_TOOLS "gcc") +set(PLATFORM "linux") +set(FEATURE_MQTT_COMM_ENABLED ON) +set(FEATURE_OTA_COMM_ENABLED ON) +set(FEATURE_OTA_SIGNAL_CHANNEL "MQTT") +set(FEATURE_AUTH_MODE "KEY") +set(FEATURE_AUTH_WITH_NOTLS OFF) +set(FEATURE_DEBUG_DEV_INFO_USED OFF) +``` +执行脚本编译 +``` +./cmake_build.sh +``` +示例输出ota_mqtt_sample位于`output/release/bin`文件夹中 + +#### 2. 填写设备信息 +将设备信息填写到配置文件device_info.json中 +``` +{ + "auth_mode":"KEY", + "productId":"S3EUVBRJLB", + "deviceName":"test_device", + "key_deviceinfo":{ + "deviceSecret":"vX6PQqazsGsMyf5SMfs6OA6y" + } +} +``` + +#### 3. 运行示例 +执行OTA MQTT例程ota_mqtt_sample: +``` +./output/release/bin/ota_mqtt_sample +INF|2020-03-04 16:50:35|qcloud_iot_device.c|iot_device_info_set(50): SDK_Ver: 3.1.2, Product_ID: S3EUVBRJLB, Device_Name: test_device +DBG|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(206): Setting up the SSL/TLS structure... +DBG|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(248): Performing the SSL/TLS handshake... +DBG|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(249): Connecting to /S3EUVBRJLB.iotcloud.tencentdevices.com/8883... +INF|2020-03-04 16:50:35|HAL_TLS_mbedtls.c|HAL_TLS_Connect(271): connected with /S3EUVBRJLB.iotcloud.tencentdevices.com/8883... +INF|2020-03-04 16:50:35|mqtt_client.c|IOT_MQTT_Construct(111): mqtt connect with id: BzaMF success +INF|2020-03-04 16:50:35|ota_mqtt_sample.c|main(516): Cloud Device Construct Success +DBG|2020-03-04 16:50:35|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$ota/update/S3EUVBRJLB/test_device|packet_id=63333 +INF|2020-03-04 16:50:35|ota_mqtt_sample.c|_event_handler(77): subscribe success, packet-id=63333 +DBG|2020-03-04 16:50:35|ota_mqtt.c|_otamqtt_event_callback(117): OTA topic subscribe success +INF|2020-03-04 16:50:36|ota_mqtt_sample.c|_get_local_fw_running_version(363): FW running version: 1.0.0 +DBG|2020-03-04 16:50:36|mqtt_client_publish.c|qcloud_iot_mqtt_publish(334): publish topic seq=63334|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_version", "report":{"version":"1.0.0"}} +INF|2020-03-04 16:50:36|ota_mqtt_sample.c|_event_handler(89): publish success, packet-id=63334 +DBG|2020-03-04 16:50:36|ota_mqtt.c|_otamqtt_upgrage_cb(103): topic=$ota/update/S3EUVBRJLB/test_device +INF|2020-03-04 16:50:36|ota_mqtt.c|_otamqtt_upgrage_cb(104): len=86, topic_msg={"result_code":0,"result_msg":"success","type":"report_version_rsp","version":"1.0.0"} +INF|2020-03-04 16:50:36|ota_client.c|_ota_callback(102): Report version success! +INF|2020-03-04 16:50:36|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command... +INF|2020-03-04 16:50:37|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command... +``` +可以看到设备已经上报了当前的固件版本,并在等待固件升级的命令下发 + +#### 4. 执行固件升级命令 + +在收到设备上报的固件版本之后,可以选择要升级的新固件版本并执行升级命令,可以通过控制台进行操作,如下图示: +![](https://main.qcloudimg.com/raw/ac71788c5bc5d542eb10292751e12fbe.png) + +这个时候再观察sample的示例打印,可以看到设备端通过MQTT接收到升级命令,并且通过HTTPS去下载固件并保存到本地 +``` +INF|2020-03-04 16:50:38|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command... +DBG|2020-03-04 16:50:39|ota_mqtt.c|_otamqtt_upgrage_cb(103): topic=$ota/update/S3EUVBRJLB/test_device +INF|2020-03-04 16:50:39|ota_mqtt.c|_otamqtt_upgrage_cb(104): len=454, topic_msg={"file_size":175436,"md5sum":"ad4615b866c13afb8b293a679bfa5dc4","type":"update_firmware","url":"https://ota-1255858890.cos.ap-guangzhou.myqcloud.com/100008768029_S3EUVBRJLB_1.3.0?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDdO8ldrUa0Uts4H5Gzx6FZ9nfedjpiCd7%26q-sign-time%3D1583311839%3B1583398239%26q-key-time%3D1583311839%3B1583398239%26q-header-list%3D%26q-url-param-list%3D%26q-signature%3D1215yt303628f88f31c9a7734ead8a7fa32ed1b3%00","version":"1.3.0"} + +INF|2020-03-04 16:50:39|ota_mqtt_sample.c|process_ota(389): wait for ota upgrade command... +ERR|2020-03-04 16:50:39|ota_mqtt_sample.c|_get_local_fw_info(251): open file ./FW_S3EUVBRJLBtest_device.json failed +DBG|2020-03-04 16:50:39|ota_client.c|IOT_OTA_StartDownload(347): to download FW from offset: 0, size: 175436 +DBG|2020-03-04 16:50:39|ota_fetch.c|ofc_Init(83): head_content:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 +Accept-Encoding: gzip, deflate +Range: bytes=0-175436 + +DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|_mbedtls_client_init(134): psk/pskid is empty!|psk=(null)|psd_id=(null) +DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|HAL_TLS_Connect(206): Setting up the SSL/TLS structure... +DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|HAL_TLS_Connect(248): Performing the SSL/TLS handshake... +DBG|2020-03-04 16:50:39|HAL_TLS_mbedtls.c|HAL_TLS_Connect(249): Connecting to /ota-1255858890.cos.ap-guangzhou.myqcloud.com/443... +INF|2020-03-04 16:50:40|HAL_TLS_mbedtls.c|HAL_TLS_Connect(271): connected with /ota-1255858890.cos.ap-guangzhou.myqcloud.com/443... +DBG|2020-03-04 16:50:40|utils_httpc.c|qcloud_http_client_connect(747): http client connect success +DBG|2020-03-04 16:50:40|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"0", "result_code":"0", "result_msg":""}, "version": "1.3.0"}} +DBG|2020-03-04 16:50:41|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"31", "result_code":"0", "result_msg":""}, "version": "1.3.0"}} +DBG|2020-03-04 16:50:42|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"59", "result_code":"0", "result_msg":""}, "version": "1.3.0"}} +DBG|2020-03-04 16:50:43|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"88", "result_code":"0", "result_msg":""}, "version": "1.3.0"}} +DBG|2020-03-04 16:50:43|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report": {"progress": {"state":"downloading", "percent":"100", "result_code":"0", "result_msg":""}, "version": "1.3.0"}} +INF|2020-03-04 16:50:43|ota_client.c|IOT_OTA_Ioctl(638): FW MD5 check: origin=ad4615b866c13afb8b293a679bfa5dc4, now=ad4615b866c13afb8b293a679bfa5dc4 +INF|2020-03-04 16:50:43|ota_mqtt_sample.c|process_ota(456): The firmware is valid +DBG|2020-03-04 16:50:43|mqtt_client_publish.c|qcloud_iot_mqtt_publish(334): publish topic seq=63335|topicName=$ota/report/S3EUVBRJLB/test_device|payload={"type": "report_progress", "report":{"progress":{"state":"done", "result_code":"0", "result_msg":""}, "version":"1.3.0"}} +INF|2020-03-04 16:50:44|ota_mqtt_sample.c|_event_handler(89): publish success, packet-id=63335 +INF|2020-03-04 16:50:44|mqtt_client_connect.c|qcloud_iot_mqtt_disconnect(450): mqtt disconnect! +INF|2020-03-04 16:50:44|ota_mqtt.c|_otamqtt_event_callback(135): mqtt client has been destroyed +INF|2020-03-04 16:50:44|mqtt_client.c|IOT_MQTT_Destroy(171): mqtt release! +``` + +## 三. 代码使用说明 + +1. 固件升级,支持通过HTTP或者HTTPS来下载固件,可以通过编译选项FEATURE_OTA_USE_HTTPS来选择 +2. SDK的固件升级,支持断点续传功能,即当固件下载过程因为网络或者其他原因中断了,则再次下载的时候,可以从上一次中断的位置继续下载。 +3. 在ota_mqtt_sample.c中,process_ota函数为OTA的核心流程,包括了版本上报,等待升级命令,发起下载并保存,校验文件MD5以及回复升级结果的过程,同时为断点续传功能实时保存下载状态。该函数在各个平台适配的时候可以保持不变。而跟固件保存,断点续传状态保存相关的功能函数,则跟平台密切相关,示例中使用了文件操作,在支持标准文件操作的系统比如Linux/Windows上面可以直接使用,对于其他平台则需要进行适配。 + + diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/IoT_Hub/shadow_sample_设备影子.md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/MCU+腾讯云定制AT模组.md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/MCU+腾讯云定制AT模组.md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/MCU+腾讯云定制AT模组.md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/MCU+腾讯云定制AT模组.md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/MCU+通用TCP_AT模组移植(FreeRTOS).md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/MCU+通用TCP_AT模组移植(FreeRTOS).md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/MCU+通用TCP_AT模组移植(FreeRTOS).md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/MCU+通用TCP_AT模组移植(FreeRTOS).md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/MCU+通用TCP_AT模组移植(nonOS).md b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/MCU+通用TCP_AT模组移植(nonOS).md similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/docs/MCU+通用TCP_AT模组移植(nonOS).md rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/docs/MCU+通用TCP_AT模组移植(nonOS).md diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/CMakeLists.txt b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/CMakeLists.txt similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/CMakeLists.txt rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/CMakeLists.txt diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/Makefile b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/Makefile similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/Makefile rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/Makefile diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/README.txt b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/README.txt similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/README.txt rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/README.txt diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-ccm-psk-tls1_2.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-ccm-psk-tls1_2.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-ccm-psk-tls1_2.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-ccm-psk-tls1_2.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-mini-tls1_1.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-mini-tls1_1.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-mini-tls1_1.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-mini-tls1_1.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-no-entropy.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-no-entropy.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-no-entropy.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-no-entropy.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-picocoin.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-picocoin.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-picocoin.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-picocoin.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-suite-b.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-suite-b.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-suite-b.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-suite-b.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-thread.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-thread.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/configs/config-thread.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/configs/config-thread.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/aes.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/aes.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/aes.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/aes.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/aesni.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/aesni.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/aesni.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/aesni.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/arc4.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/arc4.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/arc4.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/arc4.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/asn1.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/asn1.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/asn1.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/asn1.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/asn1write.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/asn1write.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/asn1write.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/asn1write.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/base64.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/base64.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/base64.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/base64.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/bignum.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/bignum.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/bignum.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/bignum.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/blowfish.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/blowfish.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/blowfish.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/blowfish.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/bn_mul.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/bn_mul.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/bn_mul.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/bn_mul.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/camellia.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/camellia.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/camellia.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/camellia.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ccm.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ccm.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ccm.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ccm.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/certs.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/certs.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/certs.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/certs.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/check_config.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/check_config.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/check_config.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/check_config.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/cipher.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/cipher.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/cipher.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/cipher.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/cipher_internal.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/cipher_internal.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/cipher_internal.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/cipher_internal.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/cmac.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/cmac.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/cmac.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/cmac.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/compat-1.3.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/compat-1.3.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/compat-1.3.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/compat-1.3.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/config.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/config.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/config.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/config.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ctr_drbg.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ctr_drbg.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ctr_drbg.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ctr_drbg.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/debug.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/debug.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/debug.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/debug.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/des.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/des.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/des.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/des.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/dhm.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/dhm.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/dhm.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/dhm.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecdh.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecdh.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecdh.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecdh.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecdsa.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecdsa.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecdsa.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecdsa.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecjpake.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecjpake.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecjpake.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecjpake.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecp.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecp.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ecp.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ecp.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/entropy.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/entropy.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/entropy.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/entropy.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/entropy_poll.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/entropy_poll.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/entropy_poll.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/entropy_poll.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/error.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/error.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/error.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/error.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/gcm.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/gcm.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/gcm.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/gcm.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/havege.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/havege.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/havege.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/havege.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/hmac_drbg.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/hmac_drbg.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/hmac_drbg.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/hmac_drbg.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md2.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md2.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md2.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md2.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md4.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md4.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md4.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md4.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md5.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md5.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md5.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md5.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md_internal.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md_internal.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/md_internal.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/md_internal.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/memory_buffer_alloc.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/memory_buffer_alloc.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/memory_buffer_alloc.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/memory_buffer_alloc.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/net.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/net.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/net.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/net.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/net_sockets.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/net_sockets.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/net_sockets.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/net_sockets.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/oid.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/oid.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/oid.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/oid.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/padlock.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/padlock.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/padlock.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/padlock.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pem.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pem.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pem.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pem.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pk.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pk.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pk.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pk.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pk_internal.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pk_internal.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pk_internal.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pk_internal.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs11.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs11.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs11.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs11.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs12.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs12.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs12.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs12.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs5.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs5.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs5.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/pkcs5.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/platform.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/platform.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/platform.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/platform.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/platform_time.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/platform_time.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/platform_time.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/platform_time.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ripemd160.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ripemd160.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ripemd160.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ripemd160.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/rsa.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/rsa.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/rsa.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/rsa.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/sha1.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/sha1.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/sha1.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/sha1.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/sha256.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/sha256.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/sha256.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/sha256.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/sha512.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/sha512.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/sha512.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/sha512.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cache.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cache.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cache.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cache.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ciphersuites.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ciphersuites.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ciphersuites.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ciphersuites.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cookie.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cookie.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cookie.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_cookie.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_internal.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_internal.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_internal.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_internal.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ticket.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ticket.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ticket.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/ssl_ticket.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/threading.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/threading.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/threading.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/threading.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/timing.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/timing.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/timing.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/timing.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/version.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/version.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/version.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/version.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crl.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crl.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crl.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crl.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crt.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crt.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crt.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509_crt.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509_csr.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509_csr.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/x509_csr.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/x509_csr.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/xtea.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/xtea.h similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/include/mbedtls/xtea.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/include/mbedtls/xtea.h diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/Makefile b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/Makefile similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/Makefile rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/Makefile diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/aes.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/aes.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/aes.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/aes.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/aesni.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/aesni.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/aesni.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/aesni.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/arc4.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/arc4.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/arc4.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/arc4.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/asn1parse.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/asn1parse.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/asn1parse.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/asn1parse.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/asn1write.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/asn1write.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/asn1write.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/asn1write.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/base64.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/base64.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/base64.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/base64.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/bignum.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/bignum.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/bignum.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/bignum.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/blowfish.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/blowfish.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/blowfish.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/blowfish.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/camellia.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/camellia.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/camellia.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/camellia.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ccm.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ccm.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ccm.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ccm.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/certs.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/certs.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/certs.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/certs.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/cipher.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/cipher.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/cipher.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/cipher.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/cipher_wrap.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/cipher_wrap.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/cipher_wrap.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/cipher_wrap.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/cmac.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/cmac.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/cmac.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/cmac.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ctr_drbg.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ctr_drbg.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ctr_drbg.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ctr_drbg.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/debug.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/debug.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/debug.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/debug.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/des.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/des.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/des.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/des.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/dhm.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/dhm.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/dhm.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/dhm.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecdh.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecdh.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecdh.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecdh.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecdsa.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecdsa.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecdsa.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecdsa.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecjpake.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecjpake.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecjpake.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecjpake.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecp.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecp.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecp.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecp.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecp_curves.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecp_curves.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ecp_curves.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ecp_curves.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/entropy.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/entropy.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/entropy.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/entropy.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/entropy_poll.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/entropy_poll.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/entropy_poll.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/entropy_poll.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/error.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/error.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/error.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/error.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/gcm.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/gcm.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/gcm.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/gcm.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/havege.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/havege.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/havege.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/havege.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/hmac_drbg.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/hmac_drbg.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/hmac_drbg.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/hmac_drbg.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md2.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md2.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md2.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md2.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md4.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md4.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md4.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md4.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md5.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md5.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md5.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md5.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md_wrap.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md_wrap.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/md_wrap.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/md_wrap.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/memory_buffer_alloc.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/net_sockets.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/net_sockets.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/net_sockets.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/net_sockets.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/oid.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/oid.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/oid.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/oid.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/padlock.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/padlock.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/padlock.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/padlock.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pem.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pem.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pem.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pem.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pk.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pk.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pk.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pk.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pk_wrap.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pk_wrap.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pk_wrap.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pk_wrap.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkcs11.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkcs11.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkcs11.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkcs11.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkcs12.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkcs12.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkcs12.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkcs12.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkcs5.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkcs5.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkcs5.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkcs5.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkparse.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkparse.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkparse.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkparse.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkwrite.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkwrite.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/pkwrite.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/pkwrite.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/platform.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/platform.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/platform.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/platform.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ripemd160.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ripemd160.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ripemd160.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ripemd160.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/rsa.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/rsa.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/rsa.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/rsa.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/sha1.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/sha1.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/sha1.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/sha1.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/sha256.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/sha256.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/sha256.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/sha256.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/sha512.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/sha512.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/sha512.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/sha512.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_cache.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_cache.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_cache.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_cache.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_ciphersuites.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_cli.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_cli.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_cli.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_cli.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_cookie.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_cookie.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_cookie.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_cookie.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_srv.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_srv.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_srv.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_srv.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_ticket.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_ticket.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_ticket.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_ticket.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_tls.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_tls.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/ssl_tls.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/ssl_tls.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/threading.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/threading.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/threading.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/threading.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/timing.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/timing.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/timing.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/timing.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/version.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/version.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/version.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/version.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/version_features.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/version_features.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/version_features.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/version_features.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_create.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_create.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_create.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_create.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_crl.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_crl.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_crl.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_crl.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_crt.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_crt.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_crt.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_crt.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_csr.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_csr.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509_csr.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509_csr.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509write_crt.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509write_crt.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509write_crt.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509write_crt.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509write_csr.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509write_csr.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/x509write_csr.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/x509write_csr.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/xtea.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/xtea.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/external_libs/mbedtls/library/xtea.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/external_libs/mbedtls/library/xtea.c diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/config.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/config.h new file mode 100644 index 00000000..be9f97d1 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/config.h @@ -0,0 +1,17 @@ +/* #undef AUTH_MODE_CERT */ +#define AUTH_MODE_KEY +/* #undef AUTH_WITH_NOTLS */ +#define GATEWAY_ENABLED +/* #undef COAP_COMM_ENABLED */ +#define OTA_MQTT_CHANNEL +#define SYSTEM_COMM +#define DEV_DYN_REG_ENABLED +/* #undef LOG_UPLOAD */ +/* #undef IOT_DEBUG */ +/* #undef DEBUG_DEV_INFO_USED */ +/* #undef AT_TCP_ENABLED */ +/* #undef AT_UART_RECV_IRQ */ +/* #undef AT_OS_USED */ +/* #undef AT_DEBUG */ +#define OTA_USE_HTTPS +#define MULTITHREAD_ENABLED diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_coap.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_coap.h new file mode 100644 index 00000000..097e7c9e --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_coap.h @@ -0,0 +1,187 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef QCLOUD_IOT_EXPORT_COAP_H_ +#define QCLOUD_IOT_EXPORT_COAP_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/** + * @brief CoAP needResp message callback function define + * + * @param message CoAP message + * @param userContext User context when sending message + */ +typedef void (*OnRespCallback)(void *message, void *userContext); + +/** + * CoAP EVENT TYPE + */ +typedef enum { + COAP_EVENT_RECEIVE_ACK = 0, // MSG ACK received + COAP_EVENT_RECEIVE_RESPCONTENT = 1, // MSG response received + COAP_EVENT_UNAUTHORIZED = -1, // Device auth failed or token expired + COAP_EVENT_FORBIDDEN = -2, // CoAP URI invalid or without permission + COAP_EVENT_INTERNAL_SERVER_ERROR = -3, // CoAP server error + COAP_EVENT_ACK_TIMEOUT = -4, // MSG ACK timeout + COAP_EVENT_SEPRESP_TIMEOUT = -5, // MSG response timeout +} CoAPEventType; + +typedef struct { + /* event type */ + CoAPEventType event_type; + /* message content */ + void *message; + +} CoAPEventMessage; + +typedef void (*CoAPEventHandleFunc)(void *pcontext, CoAPEventMessage *message); + +/* The structure of COAP event handle */ +typedef struct { + CoAPEventHandleFunc h_fp; + void * context; +} CoAPEventHandler; + +/** + * @brief CoAP data structure when sending msg + */ +typedef struct { + bool need_resp; // Need response from peer (true), or not (false). Currently only false is supported + char * pay_load; // COAP msg payload + size_t pay_load_len; // COAP msg payload length + void * user_context; // user context for callback + OnRespCallback resp_callback; // function callback when recv msg response, valid only when need_resp is true +} SendMsgParams; + +#define DEFAULT_SENDMSG_PARAMS \ + { \ + false, NULL, 0, NULL, NULL \ + } + +/** + * CoAP data structure when constructing client + */ +typedef struct { + /* device info */ + char *product_id; // product ID + char *device_name; // device name + +#ifdef AUTH_MODE_CERT + char cert_file[FILE_PATH_MAX_LEN]; // full path of device cert file + char key_file[FILE_PATH_MAX_LEN]; // full path of device key file +#else + char *device_secret; // device secret +#endif + + uint32_t command_timeout; // coap timeout value when waiting for ACK/response + unsigned char max_retry_count; // CoAP max sending retry count + CoAPEventHandler event_handle; // event callback + +} CoAPInitParams; + +#ifdef AUTH_MODE_CERT +#define DEFAULT_COAPINIT_PARAMS \ + { \ + NULL, NULL, {0}, {0}, 2000, 5, { 0 } \ + } +#else +#define DEFAULT_COAPINIT_PARAMS \ + { \ + NULL, NULL, NULL, 2000, 5, { 0 } \ + } +#endif + +/** + * @brief Construct CoAP Client and connect to server + * + * @param pParams CoAP Client construct and connect parameters + * + * @return COAPClient pointer, NULL when fail + */ +void *IOT_COAP_Construct(CoAPInitParams *pParams); + +/** + * @brief Disconnect with COAP server and destroy COAPClient + * + * @param pClient COAPClient pointer + * + */ +void IOT_COAP_Destroy(void **pClient); + +/** + * @brief Read and handle CoAP msg in synchronized way + * + * @param pClient COAPClient pointer + * @param timeout_ms timeout value (unit: ms) for this Yielding + * @return QCLOUD_RET_SUCCESS when success, otherwise fail + */ +int IOT_COAP_Yield(void *pClient, uint32_t timeout_ms); + +/** + * @brief Send/publish CoAP msg + * + * @param pClient COAPClient pointer + * @param topicName CoAP URI (msg topic) + * @param sendParams Tx msg parameters + * @return value > 0 for msg Id; value < 0 for failure + */ +int IOT_COAP_SendMessage(void *pClient, char *topicName, SendMsgParams *sendParams); + +/** + * @brief Get COAP Response msgId + * + * @param pMessage COAP Response msg + * @return value > 0 for msg Id; value < 0 for failure + */ +int IOT_COAP_GetMessageId(void *pMessage); + +/** + * @brief Get COAP Response payload + * + * @param pMessage COAP Response msg + * @param payload msg payload + * @param payloadLen msg payload length + * @return QCLOUD_RET_SUCCESS when success, otherwise fail + */ +int IOT_COAP_GetMessagePayload(void *pMessage, char **payload, int *payloadLen); + +/** + * @brief Get COAP Response msg error code + * + * @param pMessage COAP Response msg + * @return COAPEventType converted from msg error code + */ +int IOT_COAP_GetMessageCode(void *pMessage); + +/** + * @brief Get the device Info of the dedicated COAP client + * + * @param pClient handle to COAP client + * @return pointer to the device Info + */ +DeviceInfo *IOT_COAP_GetDeviceInfo(void *pClient); + +#ifdef __cplusplus +} +#endif + +#endif /* QCLOUD_IOT_EXPORT_COAP_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_dynreg.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_dynreg.h similarity index 84% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_dynreg.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_dynreg.h index 3c55d648..9c715ca5 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_dynreg.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_dynreg.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,7 +13,7 @@ * */ -#ifndef QLCOUD_IOT_EXPORT_DYNREG_H_ +#ifndef QLCOUD_IOT_EXPORT_DYNREG_H_ #define QLCOUD_IOT_EXPORT_DYNREG_H_ #ifdef __cplusplus @@ -23,7 +23,7 @@ extern "C" { #include "qcloud_iot_export.h" /** - * @brief Do dynamic register/create device + * @brief Do dynamic register/create device * * @param pDevInfo In: device info with [ProductId, ProductKey, DeviceName] * Out: device info with [ProductId, DeviceName, DeviceSecret or Device cert/key file] @@ -32,9 +32,8 @@ extern "C" { */ int IOT_DynReg_Device(DeviceInfo *pDevInfo); - #ifdef __cplusplus } #endif -#endif //QLCOUD_IOT_EXPORT_DYNREG_H_ \ No newline at end of file +#endif // QLCOUD_IOT_EXPORT_DYNREG_H_ \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_error.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_error.h new file mode 100644 index 00000000..18d37ab8 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_error.h @@ -0,0 +1,116 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef QCLOUD_IOT_EXPORT_ERROR_H_ +#define QCLOUD_IOT_EXPORT_ERROR_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * IOT SDK return/error code + * Enumeration of return code in QCloud IoT C-SDK. + * Values less than 0 are specific error codes + * Value of 0 is successful return + * Values greater than 0 are specific non-error return codes + */ +typedef enum { + QCLOUD_RET_MQTT_ALREADY_CONNECTED = 4, // Already connected with MQTT server + QCLOUD_RET_MQTT_CONNACK_CONNECTION_ACCEPTED = 3, // MQTT connection accepted by server + QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED = 2, // Manually disconnected with MQTT server + QCLOUD_RET_MQTT_RECONNECTED = 1, // Reconnected with MQTT server successfully + QCLOUD_RET_SUCCESS = 0, // Successful return + QCLOUD_ERR_FAILURE = -1001, // Generic failure return + QCLOUD_ERR_INVAL = -1002, // Invalid parameter + QCLOUD_ERR_DEV_INFO = -1003, // Fail to get device info + QCLOUD_ERR_MALLOC = -1004, // Fail to malloc memory + QCLOUD_ERR_HTTP_CLOSED = -3, // HTTP server close the connection + QCLOUD_ERR_HTTP = -4, // HTTP unknown error + QCLOUD_ERR_HTTP_PRTCL = -5, // HTTP protocol error + QCLOUD_ERR_HTTP_UNRESOLVED_DNS = -6, // HTTP DNS resolve failed + QCLOUD_ERR_HTTP_PARSE = -7, // HTTP URL parse failed + QCLOUD_ERR_HTTP_CONN = -8, // HTTP connect failed + QCLOUD_ERR_HTTP_AUTH = -9, // HTTP auth failed + QCLOUD_ERR_HTTP_NOT_FOUND = -10, // HTTP 404 + QCLOUD_ERR_HTTP_TIMEOUT = -11, // HTTP timeout + QCLOUD_ERR_MQTT_PUSH_TO_LIST_FAILED = -102, // Fail to push node to MQTT waiting list + QCLOUD_ERR_MQTT_NO_CONN = -103, // Not connected with MQTT server + QCLOUD_ERR_MQTT_UNKNOWN = -104, // MQTT unknown error + QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT = -105, // Reconnecting with MQTT server + QCLOUD_ERR_MQTT_RECONNECT_TIMEOUT = -106, // MQTT reconnect timeout + QCLOUD_ERR_MQTT_MAX_SUBSCRIPTIONS = -107, // MQTT topic subscription out of range + QCLOUD_ERR_MQTT_SUB = -108, // MQTT topic subscription fail + QCLOUD_ERR_MQTT_NOTHING_TO_READ = -109, // MQTT nothing to read + QCLOUD_ERR_MQTT_PACKET_READ = -110, // Something wrong when reading MQTT packet + QCLOUD_ERR_MQTT_REQUEST_TIMEOUT = -111, // MQTT request timeout + QCLOUD_ERR_MQTT_CONNACK_UNKNOWN = -112, // MQTT connection refused: unknown error + QCLOUD_ERR_MQTT_CONNACK_UNACCEPTABLE_PROTOCOL_VERSION = -113, // MQTT connection refused: protocol version invalid + QCLOUD_ERR_MQTT_CONNACK_IDENTIFIER_REJECTED = -114, // MQTT connection refused: identifier rejected + QCLOUD_ERR_MQTT_CONNACK_SERVER_UNAVAILABLE = -115, // MQTT connection refused: service not available + QCLOUD_ERR_MQTT_CONNACK_BAD_USERDATA = -116, // MQTT connection refused: bad user name or password + QCLOUD_ERR_MQTT_CONNACK_NOT_AUTHORIZED = -117, // MQTT connection refused: not authorized + QCLOUD_ERR_RX_MESSAGE_INVAL = -118, // MQTT received invalid msg + QCLOUD_ERR_BUF_TOO_SHORT = -119, // MQTT recv buffer not enough + QCLOUD_ERR_MQTT_QOS_NOT_SUPPORT = -120, // MQTT QoS level not supported + QCLOUD_ERR_MQTT_UNSUB_FAIL = -121, // MQTT unsubscribe failed + QCLOUD_ERR_JSON_PARSE = -132, // JSON parsing error + QCLOUD_ERR_JSON_BUFFER_TRUNCATED = -133, // JSON buffer truncated + QCLOUD_ERR_JSON_BUFFER_TOO_SMALL = -134, // JSON parsing buffer not enough + QCLOUD_ERR_JSON = -135, // JSON generation error + QCLOUD_ERR_MAX_JSON_TOKEN = -136, // JSON token out of range + QCLOUD_ERR_MAX_APPENDING_REQUEST = -137, // appending request out of range + QCLOUD_ERR_MAX_TOPIC_LENGTH = -138, // Topic length oversize + QCLOUD_ERR_COAP_NULL = -150, // COAP null pointer + QCLOUD_ERR_COAP_DATA_SIZE = -151, // COAP data size out of range + QCLOUD_ERR_COAP_INTERNAL = -152, // COAP interval error + QCLOUD_ERR_COAP_BADMSG = -153, // COAP bad msg + QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY = -160, // DTLS connection is closed + QCLOUD_ERR_SHADOW_PROPERTY_EXIST = -201, // Shadow property already exist + QCLOUD_ERR_SHADOW_NOT_PROPERTY_EXIST = -202, // Shadow property not exist + QCLOUD_ERR_SHADOW_UPDATE_TIMEOUT = -203, // Shadow update timeout + QCLOUD_ERR_SHADOW_UPDATE_REJECTED = -204, // Shadow update rejected by server + QCLOUD_ERR_SHADOW_GET_TIMEOUT = -205, // Shadow get timeout + QCLOUD_ERR_SHADOW_GET_REJECTED = -206, // Shadow get rejected by server + QCLOUD_ERR_GATEWAY_CREATE_SESSION_FAIL = -221, // Gateway fail to create sub-device session + QCLOUD_ERR_GATEWAY_SESSION_NO_EXIST = -222, // Gateway sub-device session not exist + QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT = -223, // Gateway sub-device session timeout + QCLOUD_ERR_GATEWAY_SUBDEV_ONLINE = -224, // Gateway sub-device online + QCLOUD_ERR_GATEWAY_SUBDEV_OFFLINE = -225, // Gateway sub-device offline + QCLOUD_ERR_TCP_SOCKET_FAILED = -601, // TLS TCP socket connect fail + QCLOUD_ERR_TCP_UNKNOWN_HOST = -602, // TCP unknown host (DNS fail) + QCLOUD_ERR_TCP_CONNECT = -603, // TCP/UDP socket connect fail + QCLOUD_ERR_TCP_READ_TIMEOUT = -604, // TCP read timeout + QCLOUD_ERR_TCP_WRITE_TIMEOUT = -605, // TCP write timeout + QCLOUD_ERR_TCP_READ_FAIL = -606, // TCP read error + QCLOUD_ERR_TCP_WRITE_FAIL = -607, // TCP write error + QCLOUD_ERR_TCP_PEER_SHUTDOWN = -608, // TCP server close connection + QCLOUD_ERR_TCP_NOTHING_TO_READ = -609, // TCP socket nothing to read + QCLOUD_ERR_SSL_INIT = -701, // TLS/SSL init fail + QCLOUD_ERR_SSL_CERT = -702, // TLS/SSL certificate issue + QCLOUD_ERR_SSL_CONNECT = -703, // TLS/SSL connect fail + QCLOUD_ERR_SSL_CONNECT_TIMEOUT = -704, // TLS/SSL connect timeout + QCLOUD_ERR_SSL_WRITE_TIMEOUT = -705, // TLS/SSL write timeout + QCLOUD_ERR_SSL_WRITE = -706, // TLS/SSL write error + QCLOUD_ERR_SSL_READ_TIMEOUT = -707, // TLS/SSL read timeout + QCLOUD_ERR_SSL_READ = -708, // TLS/SSL read error + QCLOUD_ERR_SSL_NOTHING_TO_READ = -709, // TLS/SSL nothing to read +} IoT_Return_Code; + +#ifdef __cplusplus +} +#endif + +#endif /* QCLOUD_IOT_EXPORT_ERROR_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h new file mode 100644 index 00000000..d824f82f --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_gateway.h @@ -0,0 +1,168 @@ + +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef QCLOUD_IOT_EXPORT_GATEWAY_H_ +#define QCLOUD_IOT_EXPORT_GATEWAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "qcloud_iot_export_mqtt.h" + +/* Gateway and sub-device parameter */ +typedef struct { + /*gateway device info */ + char *product_id; + char *device_name; + /*sub-device device info */ + char *subdev_product_id; + char *subdev_device_name; + +} GatewayParam; + +#define DEFAULT_GATEWAY_PARAMS \ + { \ + NULL, NULL, NULL, NULL \ + } + +/** + * @brief Define a callback to be invoked when gatway event happen + * + * @param context, the program context + * @param client, the gateway client + * @param msg, the event message. + * + * @return none + */ +typedef void (*GatewayEventHandleFun)(void *client, void *context, void *msg); + +/* The structure of gateway init param */ +typedef struct { + MQTTInitParams init_param; /* MQTT params */ + void * event_context; /* the user context */ + GatewayEventHandleFun event_handler; /* event handler for gateway user*/ +} GatewayInitParam; + +#define DEFAULT_GATEWAY_INIT_PARAMS \ + { \ + DEFAULT_MQTTINIT_PARAMS, NULL, NULL \ + } + +/** + * @brief Create gateway client and connect to MQTT server + * + * @param init_param Gateway MQTT init parameters + * + * @return a valid gateway client handle when success, or NULL otherwise + */ +void *IOT_Gateway_Construct(GatewayInitParam *init_param); + +/** + * @brief Close connection and destroy gateway client + * + * @param client handle to gateway client + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Gateway_Destroy(void *client); + +/** + * @brief Make sub-device online + * + * @param client handle to gateway client + * @param param sub-device parameters + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Gateway_Subdev_Online(void *client, GatewayParam *param); + +/** + * @brief Make sub-device offline + * + * @param client handle to gateway client + * @param param sub-device parameters + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Gateway_Subdev_Offline(void *client, GatewayParam *param); + +/** + * @brief Publish gateway MQTT message + * + * @param client handle to gateway client + * @param topic_name MQTT topic name + * @param params publish parameters + * + * @return packet id (>=0) when success, or err code (<0) for failure + */ +int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params); + +/** + * @brief Subscribe gateway MQTT topic + * + * @param client handle to gateway client + * @param topic_filter MQTT topic filter + * @param params subscribe parameters + * + * @return packet id (>=0) when success, or err code (<0) for failure + */ +int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params); + +/** + * @brief unsubscribe gateway MQTT topic + * + * @param client handle to gateway client + * @param topic_filter MQTT topic filter + * + * @return packet id (>=0) when success, or err code (<0) for failure + */ +int IOT_Gateway_Unsubscribe(void *client, char *topic_filter); + +/** + * @brief check if MQTT topic has been subscribed or not + * + * @param pClient handle to MQTT client + * @param topicFilter MQTT topic filter + * + * @return true when successfully subscribed, or false if not yet + */ +int IOT_Gateway_IsSubReady(void *client, char *topic_filter); + +/** + * @brief Check connection and keep alive state, read/handle MQTT message in synchronized way + * + * @param client handle to gateway client + * @param timeout_ms timeout value (unit: ms) for this operation + * + * @return QCLOUD_RET_SUCCESS when success, or err code for failure + */ +int IOT_Gateway_Yield(void *client, uint32_t timeout_ms); + +/** + * @brief Return the MQTT client dedicated to this gateway handle + * + * @param pClient handle to gateway client + * + * @return a valid mqtt client handle when success, or NULL otherwise + */ +void *IOT_Gateway_Get_Mqtt_Client(void *handle); + +#ifdef __cplusplus +} +#endif + +#endif /* QCLOUD_IOT_EXPORT_GATEWAY_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_log.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_log.h similarity index 66% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_log.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_log.h index 36b86c83..c9429e18 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_log.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_log.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,21 +20,22 @@ extern "C" { #endif +#include +#include #include #include -#include -#include + #include "qcloud_iot_export_variables.h" /** * SDK log print/upload level */ typedef enum { - eLOG_DISABLE = 0, - eLOG_ERROR = 1, - eLOG_WARN = 2, - eLOG_INFO = 3, - eLOG_DEBUG = 4 + eLOG_DISABLE = 0, // disable log print/upload + eLOG_ERROR = 1, // error log level + eLOG_WARN = 2, // warning log level + eLOG_INFO = 3, // info log level + eLOG_DEBUG = 4, // debug log level } LOG_LEVEL; /** @@ -48,12 +49,12 @@ extern LOG_LEVEL g_log_print_level; extern LOG_LEVEL g_log_upload_level; /* user's self defined log handler callback */ -typedef bool (*LogMessageHandler)(const char* message); +typedef bool (*LogMessageHandler)(const char *message); /** * @brief user callback for saving/reading logs into/from NVS(files/FLASH) after upload fail/recover */ -// callback for saving logs into NVS(files/FLASH) after upload fail +// callback for saving logs into NVS(files/FLASH) after upload fail typedef size_t (*LogSaveFunc)(const char *msg, size_t wLen); // callback for reading logs from NVS(files/FLASH) when upload ready typedef size_t (*LogReadFunc)(char *buff, size_t rLen); @@ -67,22 +68,21 @@ typedef size_t (*LogGetSizeFunc)(); */ typedef struct { /* device info */ - const char *product_id; - const char *device_name; + const char *product_id; + const char *device_name; /* auth key, use device secret for PSK device and cert file path for cert device */ - const char *sign_key; + const char *sign_key; /* user callback saving/reading logs into/from NVS(files/FLASH) */ - LogSaveFunc save_func; - LogReadFunc read_func; - LogDelFunc del_func; - LogGetSizeFunc get_size_func; + LogSaveFunc save_func; + LogReadFunc read_func; + LogDelFunc del_func; + LogGetSizeFunc get_size_func; } LogUploadInitParams; - /** * @brief Set the global log level of print * - * @param level + * @param level */ void IOT_Log_Set_Level(LOG_LEVEL level); @@ -91,7 +91,7 @@ void IOT_Log_Set_Level(LOG_LEVEL level); * * @return */ -LOG_LEVEL IOT_Log_Get_Level(); +LOG_LEVEL IOT_Log_Get_Level(void); /** * @brief Set the global log level of upload @@ -105,8 +105,7 @@ void IOT_Log_Set_Upload_Level(LOG_LEVEL level); * * @return */ -LOG_LEVEL IOT_Log_Get_Upload_Level(); - +LOG_LEVEL IOT_Log_Get_Upload_Level(void); /** * @brief Set user callback to print log into whereever you want @@ -116,7 +115,6 @@ LOG_LEVEL IOT_Log_Get_Upload_Level(); */ void IOT_Log_Set_MessageHandler(LogMessageHandler handler); - /** * @brief Init the resource for log upload * @@ -129,19 +127,18 @@ int IOT_Log_Init_Uploader(LogUploadInitParams *init_params); /** * @brief Stop log upload and release the resource * - * @return + * @return */ void IOT_Log_Fini_Uploader(void); /** * @brief Do one log upload * - * @param force_upload true = upload log at once, false = upload in defined time interval + * @param force_upload true = upload log at once, false = upload in defined time interval * @return QCLOUD_RET_SUCCESS when success, or error code when fail */ int IOT_Log_Upload(bool force_upload); - /** * @brief Generate log for print/upload, call LogMessageHandler if defined * @@ -156,47 +153,46 @@ void IOT_Log_Gen(const char *file, const char *func, const int line, const int l /* Simple APIs for log generation in different level */ #define Log_d(fmt, ...) IOT_Log_Gen(__FILE__, __FUNCTION__, __LINE__, eLOG_DEBUG, fmt, ##__VA_ARGS__) -#define Log_i(fmt, ...) IOT_Log_Gen(__FILE__, __FUNCTION__, __LINE__, eLOG_INFO, fmt, ##__VA_ARGS__) -#define Log_w(fmt, ...) IOT_Log_Gen(__FILE__, __FUNCTION__, __LINE__, eLOG_WARN, fmt, ##__VA_ARGS__) +#define Log_i(fmt, ...) IOT_Log_Gen(__FILE__, __FUNCTION__, __LINE__, eLOG_INFO, fmt, ##__VA_ARGS__) +#define Log_w(fmt, ...) IOT_Log_Gen(__FILE__, __FUNCTION__, __LINE__, eLOG_WARN, fmt, ##__VA_ARGS__) #define Log_e(fmt, ...) IOT_Log_Gen(__FILE__, __FUNCTION__, __LINE__, eLOG_ERROR, fmt, ##__VA_ARGS__) /* Macro for debug mode */ #ifdef IOT_DEBUG - #define IOT_FUNC_ENTRY \ - {\ - printf("FUNC_ENTRY: %s L#%d \n", __FUNCTION__, __LINE__); \ - } - #define IOT_FUNC_EXIT \ - {\ - printf("FUNC_EXIT: %s L#%d \n", __FUNCTION__, __LINE__); \ - return;\ - } - #define IOT_FUNC_EXIT_RC(x) \ - {\ - printf("FUNC_EXIT: %s L#%d Return Code : %ld \n", __FUNCTION__, __LINE__, (long)(x)); \ - return x; \ - } +#define IOT_FUNC_ENTRY \ + { \ + printf("FUNC_ENTRY: %s L#%d \n", __FUNCTION__, __LINE__); \ + } +#define IOT_FUNC_EXIT \ + { \ + printf("FUNC_EXIT: %s L#%d \n", __FUNCTION__, __LINE__); \ + return; \ + } +#define IOT_FUNC_EXIT_RC(x) \ + { \ + printf("FUNC_EXIT: %s L#%d Return Code : %ld \n", __FUNCTION__, __LINE__, (long)(x)); \ + return x; \ + } #else - #define IOT_FUNC_ENTRY - #define IOT_FUNC_EXIT \ - {\ - return;\ - } - #define IOT_FUNC_EXIT_RC(x) \ - {\ - return x; \ - } +#define IOT_FUNC_ENTRY +#define IOT_FUNC_EXIT \ + { \ + return; \ + } +#define IOT_FUNC_EXIT_RC(x) \ + { \ + return x; \ + } #endif /* Macro for interval debug */ -//#define LOG_UPLOAD_DEBUG +//#define LOG_UPLOAD_DEBUG #ifdef LOG_UPLOAD_DEBUG -#define UPLOAD_DBG(fmt, ...) HAL_Printf(">>LOG-DBG>>%s(%d): " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__) +#define UPLOAD_DBG(fmt, ...) HAL_Printf(">>LOG-DBG>>%s(%d): " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__) #else #define UPLOAD_DBG(...) #endif -#define UPLOAD_ERR(fmt, ...) HAL_Printf(">>LOG-ERR>>%s(%d): " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__) - +#define UPLOAD_ERR(fmt, ...) HAL_Printf(">>LOG-ERR>>%s(%d): " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__) #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_mqtt.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_mqtt.h similarity index 56% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_mqtt.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_mqtt.h index 68c246a8..6b06562f 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_mqtt.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_mqtt.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,8 +20,8 @@ extern "C" { #endif -#include #include +#include #include /** @@ -30,30 +30,31 @@ extern "C" { * Check MQTT spec for QoS define */ typedef enum _QoS { - QOS0 = 0, // At most once delivery - QOS1 = 1, // At least once delivery, PUBACK is required - QOS2 = 2 // Exactly once delivery. NOT supported currently + QOS0 = 0, // At most once delivery + QOS1 = 1, // At least once delivery, PUBACK is required + QOS2 = 2 // Exactly once delivery. NOT supported currently } QoS; /** * @brief MQTT message parameter for pub/sub */ typedef struct { - QoS qos; // MQTT QoS level - uint8_t retained; // RETAIN flag - uint8_t dup; // DUP flag - uint16_t id; // MQTT Id - - const char *ptopic; // MQTT topic - size_t topic_len; // topic length - - void *payload; // MQTT msg payload - size_t payload_len; // MQTT length of msg payload + QoS qos; // MQTT QoS level + uint8_t retained; // RETAIN flag + uint8_t dup; // DUP flag + uint16_t id; // MQTT Id + const char *ptopic; // MQTT topic + size_t topic_len; // topic length + void * payload; // MQTT msg payload + size_t payload_len; // MQTT length of msg payload } MQTTMessage; typedef MQTTMessage PublishParams; -#define DEFAULT_PUB_PARAMS {QOS0, 0, 0, 0, NULL, 0, NULL, 0} +#define DEFAULT_PUB_PARAMS \ + { \ + QOS0, 0, 0, 0, NULL, 0, NULL, 0 \ + } typedef enum { @@ -118,23 +119,24 @@ typedef void (*OnSubEventHandler)(void *pClient, MQTTEventType event_type, void * @brief Define structure to do MQTT subscription */ typedef struct { - QoS qos; // MQTT QoS level - OnMessageHandler on_message_handler; // callback when message arrived - OnSubEventHandler on_sub_event_handler; // callback when event happened - void *user_data; // user context for callback + QoS qos; // MQTT QoS level + OnMessageHandler on_message_handler; // callback when message arrived + OnSubEventHandler on_sub_event_handler; // callback when event happened + void * user_data; // user context for callback } SubscribeParams; /** * Default MQTT subscription parameters */ -#define DEFAULT_SUB_PARAMS {QOS0, NULL, NULL, NULL} - +#define DEFAULT_SUB_PARAMS \ + { \ + QOS0, NULL, NULL, NULL \ + } typedef struct { /* MQTT event type */ - MQTTEventType event_type; - - void *msg; + MQTTEventType event_type; + void * msg; } MQTTEventMsg; /** @@ -148,34 +150,30 @@ typedef struct { */ typedef void (*MQTTEventHandleFun)(void *pclient, void *context, MQTTEventMsg *msg); - /* The structure of MQTT event handle */ typedef struct { - MQTTEventHandleFun h_fp; - void *context; + MQTTEventHandleFun h_fp; + void * context; } MQTTEventHandler; /* The structure of MQTT init parameters */ typedef struct { - /* device info */ - char *product_id; // product ID - char *device_name; // device name - + /* device info */ + char *product_id; // product ID + char *device_name; // device name + #ifdef AUTH_MODE_CERT - char *cert_file; // cert file path - char *key_file; // key file path + char cert_file[FILE_PATH_MAX_LEN]; // full path of device cert file + char key_file[FILE_PATH_MAX_LEN]; // full path of device key file #else - char *device_secret; // device secret + char *device_secret; // device secret #endif - uint32_t command_timeout; // timeout value (unit: ms) for MQTT connect/pub/sub/yield - uint32_t keep_alive_interval_ms; // MQTT keep alive time interval in millisecond - - uint8_t clean_session; // flag of clean session, 1 clean, 0 not clean - - uint8_t auto_connect_enable; // flag of auto reconnection, 1 is enable and recommended - - MQTTEventHandler event_handle; // event callback + uint32_t command_timeout; // timeout value (unit: ms) for MQTT connect/pub/sub/yield + uint32_t keep_alive_interval_ms; // MQTT keep alive time interval in millisecond + uint8_t clean_session; // flag of clean session, 1 clean, 0 not clean + uint8_t auto_connect_enable; // flag of auto reconnection, 1 is enable and recommended + MQTTEventHandler event_handle; // event callback } MQTTInitParams; @@ -183,9 +181,15 @@ typedef struct { * Default MQTT init parameters */ #ifdef AUTH_MODE_CERT - #define DEFAULT_MQTTINIT_PARAMS { NULL, NULL, NULL, NULL, 5000, 240 * 1000, 1, 1, {0}} +#define DEFAULT_MQTTINIT_PARAMS \ + { \ + NULL, NULL, {0}, {0}, 5000, 240 * 1000, 1, 1, { 0 } \ + } #else - #define DEFAULT_MQTTINIT_PARAMS { NULL, NULL, NULL, 5000, 240 * 1000, 1, 1, {0}} +#define DEFAULT_MQTTINIT_PARAMS \ + { \ + NULL, NULL, NULL, 5000, 240 * 1000, 1, 1, { 0 } \ + } #endif /** @@ -195,7 +199,7 @@ typedef struct { * * @return a valid MQTT client handle when success, or NULL otherwise */ -void* IOT_MQTT_Construct(MQTTInitParams *pParams); +void *IOT_MQTT_Construct(MQTTInitParams *pParams); /** * @brief Close connection and destroy MQTT client @@ -212,14 +216,15 @@ int IOT_MQTT_Destroy(void **pClient); * @param pClient handle to MQTT client * @param timeout_ms timeout value (unit: ms) for this operation * - * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for failure + * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for + * failure */ int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms); /** * @brief Publish MQTT message * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @param topicName MQTT topic name * @param pParams publish parameters * @@ -230,7 +235,7 @@ int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams); /** * @brief Subscribe MQTT topic * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @param topicFilter MQTT topic filter * @param pParams subscribe parameters * @@ -241,17 +246,27 @@ int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParam /** * @brief Unsubscribe MQTT topic * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @param topicFilter MQTT topic filter * * @return packet id (>=0) when success, or err code (<0) for failure */ int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter); +/** + * @brief check if MQTT topic has been subscribed or not + * + * @param pClient handle to MQTT client + * @param topicFilter MQTT topic filter + * + * @return true when successfully subscribed, or false if not yet + */ +bool IOT_MQTT_IsSubReady(void *pClient, char *topicFilter); + /** * @brief Check if MQTT is connected * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @return true= connected, false = unconnected */ bool IOT_MQTT_IsConnected(void *pClient); @@ -263,6 +278,41 @@ bool IOT_MQTT_IsConnected(void *pClient); */ int IOT_MQTT_GetErrCode(void); +/** + * @brief Get the device Info of the dedicated MQTT client + * + * @param pClient handle to MQTT client + * @return pointer to the device Info + */ +DeviceInfo *IOT_MQTT_GetDeviceInfo(void *pClient); + +#ifdef MULTITHREAD_ENABLED +/** + * @brief Start the default loop thread to read and handle MQTT packet + * + * @param pClient handle to MQTT client + * @return QCLOUD_RET_SUCCESS when success, err code for failure + */ +int IOT_MQTT_StartLoop(void *pClient); + +/** + * @brief Stop the default loop thread to read and handle MQTT packet + * + * @param pClient handle to MQTT client + */ +void IOT_MQTT_StopLoop(void *pClient); + +/** + * @brief Get the status of loop thread + * + * @param pClient handle to MQTT client + * @param exit_code exit code of the thread + * @return true= thread running, false = thread quit + */ +bool IOT_MQTT_GetLoopStatus(void *pClient, int *exit_code); + +#endif + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_ota.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_ota.h similarity index 79% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_ota.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_ota.h index 17778ac3..317d808a 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_ota.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_ota.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -22,35 +22,32 @@ extern "C" { #include "qcloud_iot_import.h" - typedef enum { - IOT_OTA_ERR_FAIL = -1, - IOT_OTA_ERR_INVALID_PARAM = -2, - IOT_OTA_ERR_INVALID_STATE = -3, - IOT_OTA_ERR_STR_TOO_LONG = -4, - IOT_OTA_ERR_FETCH_FAILED = -5, + IOT_OTA_ERR_FAIL = -1, + IOT_OTA_ERR_INVALID_PARAM = -2, + IOT_OTA_ERR_INVALID_STATE = -3, + IOT_OTA_ERR_STR_TOO_LONG = -4, + IOT_OTA_ERR_FETCH_FAILED = -5, IOT_OTA_ERR_FETCH_NOT_EXIST = -6, IOT_OTA_ERR_FETCH_AUTH_FAIL = -7, - IOT_OTA_ERR_FETCH_TIMEOUT = -8, - IOT_OTA_ERR_NOMEM = -9, - IOT_OTA_ERR_OSC_FAILED = -10, - IOT_OTA_ERR_REPORT_VERSION = -11, - IOT_OTA_ERR_NONE = 0 + IOT_OTA_ERR_FETCH_TIMEOUT = -8, + IOT_OTA_ERR_NOMEM = -9, + IOT_OTA_ERR_OSC_FAILED = -10, + IOT_OTA_ERR_REPORT_VERSION = -11, + IOT_OTA_ERR_NONE = 0 } IOT_OTA_Error_Code; - /* type of OTA state */ typedef enum { - IOT_OTAS_UNINITED = 0, /* un-inited */ - IOT_OTAS_INITED, /* inited */ - IOT_OTAS_FETCHING, /* fetching */ - IOT_OTAS_FETCHED, /* fetched */ - IOT_OTAS_DISCONNECTED /* disconnected */ + IOT_OTAS_UNINITED = 0, /* un-inited */ + IOT_OTAS_INITED, /* inited */ + IOT_OTAS_FETCHING, /* fetching */ + IOT_OTAS_FETCHED, /* fetched */ + IOT_OTAS_DISCONNECTED /* disconnected */ } IOT_OTA_State_Code; - /* type of OTA progress */ typedef enum { @@ -66,7 +63,6 @@ typedef enum { /* init failed */ IOT_OTAP_GENERAL_FAILED = -1, - /* [0, 100], progress percentage */ /* minimal of progress percentage */ @@ -77,33 +73,31 @@ typedef enum { } IOT_OTA_Progress_Code; - typedef enum { - IOT_OTAG_FETCHED_SIZE, /* Size of firmware fetched */ - IOT_OTAG_FILE_SIZE, /* Total size of firmware */ - IOT_OTAG_MD5SUM, /* firmware md5 checksum (string) */ - IOT_OTAG_VERSION, /* firmware version (string) */ - IOT_OTAG_CHECK_FIRMWARE /* check firmware */ + IOT_OTAG_FETCHED_SIZE, /* Size of firmware fetched */ + IOT_OTAG_FILE_SIZE, /* Total size of firmware */ + IOT_OTAG_MD5SUM, /* firmware md5 checksum (string) */ + IOT_OTAG_VERSION, /* firmware version (string) */ + IOT_OTAG_CHECK_FIRMWARE /* check firmware */ } IOT_OTA_CmdType; typedef enum { IOT_OTAR_DOWNLOAD_TIMEOUT = -1, - IOT_OTAR_FILE_NOT_EXIST = -2, - IOT_OTAR_AUTH_FAIL = -3, - IOT_OTAR_MD5_NOT_MATCH = -4, - IOT_OTAR_UPGRADE_FAIL = -5, - IOT_OTAR_NONE = 0, - IOT_OTAR_DOWNLOAD_BEGIN = 1, - IOT_OTAR_DOWNLOADING = 2, - IOT_OTAR_UPGRADE_BEGIN = 3, - IOT_OTAR_UPGRADE_SUCCESS = 4, + IOT_OTAR_FILE_NOT_EXIST = -2, + IOT_OTAR_AUTH_FAIL = -3, + IOT_OTAR_MD5_NOT_MATCH = -4, + IOT_OTAR_UPGRADE_FAIL = -5, + IOT_OTAR_NONE = 0, + IOT_OTAR_DOWNLOAD_BEGIN = 1, + IOT_OTAR_DOWNLOADING = 2, + IOT_OTAR_UPGRADE_BEGIN = 3, + IOT_OTAR_UPGRADE_SUCCESS = 4, } IOT_OTAReportType; - /** * @brief Init OTA module and resources * MQTT/COAP Client should be constructed beforehand @@ -116,7 +110,6 @@ typedef enum { */ void *IOT_OTA_Init(const char *product_id, const char *device_name, void *ch_signal); - /** * @brief Destroy OTA module and resources * @@ -126,7 +119,6 @@ void *IOT_OTA_Init(const char *product_id, const char *device_name, void *ch_sig */ int IOT_OTA_Destroy(void *handle); - /** * @brief Setup HTTP connection and prepare OTA download * @@ -146,7 +138,9 @@ int IOT_OTA_StartDownload(void *handle, uint32_t offset, uint32_t size); * @param size: size of buffer * */ -void IOT_OTA_UpdateClientMd5(void *handle, char * buff, uint32_t size); +void IOT_OTA_UpdateClientMd5(void *handle, char *buff, uint32_t size); + +int IOT_OTA_ResetClientMD5(void *handle); /** * @brief Report local firmware version to server @@ -198,7 +192,6 @@ int IOT_OTA_ReportUpgradeFail(void *handle, const char *version); */ int IOT_OTA_IsFetching(void *handle); - /** * @brief Check if firmware fetching/downloading is finished * @@ -209,12 +202,11 @@ int IOT_OTA_IsFetching(void *handle); */ int IOT_OTA_IsFetchFinish(void *handle); - /** * @brief Download firmware from HTTP server and save to buffer * * @param handle: OTA module handle - * @param buf: buffer to store firmware + * @param buf: buffer to store firmware * @param buf_len: length of buffer * @param timeout_s: timeout value in second * @@ -224,7 +216,6 @@ int IOT_OTA_IsFetchFinish(void *handle); */ int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeout_s); - /** * @brief Get OTA info (version, file_size, MD5, download state) from OTA module * @@ -245,7 +236,6 @@ int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeo */ int IOT_OTA_Ioctl(void *handle, IOT_OTA_CmdType type, void *buf, size_t buf_len); - /** * @brief Get error code of last operation * diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_shadow.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_shadow.h similarity index 70% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_shadow.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_shadow.h index d85c99fe..b1093a09 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_shadow.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_shadow.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -22,51 +22,52 @@ extern "C" { #include "qcloud_iot_export_mqtt.h" -typedef enum _eShadowType_{ - eSHADOW = 0, // normal shadow - eTEMPLATE = 1, // data template -}eShadowType; - +typedef enum _eShadowType_ { + eSHADOW = 0, // normal shadow + eTEMPLATE = 1, // data template +} eShadowType; /* The structure of MQTT shadow init parameters */ typedef struct { - /* device info */ - char *product_id; // product ID - char *device_name; // device name - + /* device info */ + char *product_id; // product ID + char *device_name; // device name + #ifdef AUTH_MODE_CERT - char *cert_file; // cert file path - char *key_file; // key file path + char cert_file[FILE_PATH_MAX_LEN]; // full path of device cert file + char key_file[FILE_PATH_MAX_LEN]; // full path of device key file #else - char *device_secret; // device secret + char *device_secret; // device secret #endif - uint32_t command_timeout; // timeout value (unit: ms) for MQTT connect/pub/sub/yield - uint32_t keep_alive_interval_ms; // MQTT keep alive time interval in millisecond - - uint8_t clean_session; // flag of clean session, 1 clean, 0 not clean - - uint8_t auto_connect_enable; // flag of auto reconnection, 1 is enable and recommended - - MQTTEventHandler event_handle; // event callback - - eShadowType shadow_type; // shadow type + uint32_t command_timeout; // timeout value (unit: ms) for MQTT connect/pub/sub/yield + uint32_t keep_alive_interval_ms; // MQTT keep alive time interval in millisecond + uint8_t clean_session; // flag of clean session, 1 clean, 0 not clean + uint8_t auto_connect_enable; // flag of auto reconnection, 1 is enable and recommended + MQTTEventHandler event_handle; // event callback + eShadowType shadow_type; // shadow type } ShadowInitParams; #ifdef AUTH_MODE_CERT - #define DEFAULT_SHAWDOW_INIT_PARAMS { NULL, NULL, NULL, NULL, 5000, 240 * 1000, 1, 1, {0}, 0} +#define DEFAULT_SHAWDOW_INIT_PARAMS \ + { \ + NULL, NULL, {0}, {0}, 5000, 240 * 1000, 1, 1, {0}, 0 \ + } #else - #define DEFAULT_SHAWDOW_INIT_PARAMS { NULL, NULL, NULL, 5000, 240 * 1000, 1, 1, {0}, 0} +#define DEFAULT_SHAWDOW_INIT_PARAMS \ + { \ + NULL, NULL, NULL, 5000, 240 * 1000, 1, 1, {0}, 0 \ + } #endif /** * @brief Type of shadow request ACK */ typedef enum { - ACK_NONE = -3, - ACK_TIMEOUT = -2, - ACK_REJECTED = -1, - ACK_ACCEPTED = 0 + ACK_NONE = -3, // ACK is init state + ACK_TIMEOUT = -2, // received ACK timeout + ACK_REJECTED = -1, // ACK is rejected + ACK_ACCEPTED = 0, // ACK is accepted } RequestAck; /** @@ -80,59 +81,44 @@ typedef enum { /** * @brief JSON data type */ -typedef enum { - JINT32, - JINT16, - JINT8, - JUINT32, - JUINT16, - JUINT8, - JFLOAT, - JDOUBLE, - JBOOL, - JSTRING, - JOBJECT -} JsonDataType; +typedef enum { JINT32, JINT16, JINT8, JUINT32, JUINT16, JUINT8, JFLOAT, JDOUBLE, JBOOL, JSTRING, JOBJECT } JsonDataType; /** * @brief Define a device property, as a JSON document node */ typedef struct _JSONNode { - char *key; // Key of this JSON node - void *data; // Value of this JSON node - JsonDataType type; // Data type of this JSON node + char * key; // Key of this JSON node + void * data; // Value of this JSON node + JsonDataType type; // Data type of this JSON node + bool delta_arrived; } DeviceProperty; - /** * @brief Data type of template */ - -#define TYPE_TEMPLATE_INT JINT32 -#define TYPE_TEMPLATEENUM JINT32 -#define TYPE_TEMPLATE_FLOAT JFLOAT -#define TYPE_TEMPLATE_BOOL JINT8 -#define TYPE_TEMPLATE_STRING JSTRING -#define TYPE_TEMPLATE_TIME JUINT32 -#define TYPE_TEMPLATE_JOBJECT JOBJECT +#define TYPE_TEMPLATE_INT JINT32 +#define TYPE_TEMPLATEENUM JINT32 +#define TYPE_TEMPLATE_FLOAT JFLOAT +#define TYPE_TEMPLATE_BOOL JINT8 +#define TYPE_TEMPLATE_STRING JSTRING +#define TYPE_TEMPLATE_TIME JUINT32 +#define TYPE_TEMPLATE_JOBJECT JOBJECT - -typedef int32_t TYPE_DEF_TEMPLATE_INT; -typedef int32_t TYPE_DEF_TEMPLATE_ENUM; -typedef float TYPE_DEF_TEMPLATE_FLOAT; -typedef char TYPE_DEF_TEMPLATE_BOOL; -typedef char TYPE_DEF_TEMPLATE_STRING; -typedef uint32_t TYPE_DEF_TEMPLATE_TIME; -typedef void * TYPE_DEF_TEMPLATE_OBJECT; - +typedef int32_t TYPE_DEF_TEMPLATE_INT; +typedef int32_t TYPE_DEF_TEMPLATE_ENUM; +typedef float TYPE_DEF_TEMPLATE_FLOAT; +typedef char TYPE_DEF_TEMPLATE_BOOL; +typedef char TYPE_DEF_TEMPLATE_STRING; +typedef uint32_t TYPE_DEF_TEMPLATE_TIME; +typedef void * TYPE_DEF_TEMPLATE_OBJECT; /** * @brief Define property status in data template */ -typedef enum _eDataState_{ +typedef enum _eDataState_ { eNOCHANGE = 0, - eCHANGED = 1, + eCHANGED = 1, } eDataState; /** @@ -140,20 +126,20 @@ typedef enum _eDataState_{ */ typedef struct { DeviceProperty data_property; - eDataState state; + eDataState state; } sDataPoint; - /** * @brief Define MQTT shadow callback when request response arrived * * @param method type of request - * @param requestAck response type + * @param requestAck response type * @param pJsonDocument JSON document from server * @param userContext User context * */ -typedef void (*OnRequestCallback)(void *pClient, Method method, RequestAck requestAck, const char *pJsonDocument, void *userContext); +typedef void (*OnRequestCallback)(void *pClient, Method method, RequestAck requestAck, const char *pJsonDocument, + void *userContext); /** * @brief Define callback when device property change @@ -162,7 +148,8 @@ typedef void (*OnRequestCallback)(void *pClient, Method method, RequestAck reque * @param valueLength property length * @param DeviceProperty reference to device property */ -typedef void (*OnPropRegCallback)(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty); +typedef void (*OnPropRegCallback)(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, + DeviceProperty *pProperty); /** * @brief Create MQTT Shadow client and connect to MQTT server @@ -171,12 +158,21 @@ typedef void (*OnPropRegCallback)(void *pClient, const char *pJsonValueBuffer, u * * @return a valid Shadow client handle when success, or NULL otherwise */ -void* IOT_Shadow_Construct(ShadowInitParams *pParams); +void *IOT_Shadow_Construct(ShadowInitParams *pParams); + +/** + * @brief Return the MQTT client dedicated to this shadow handle + * + * @param pClient handle to shadow client + * + * @return a valid mqtt client handle when success, or NULL otherwise + */ +void *IOT_Shadow_Get_Mqtt_Client(void *handle); /** * @brief Publish MQTT message * - * @param pClient handle to shadow client + * @param pClient handle to shadow client * @param topicName MQTT topic name * @param pParams publish parameters * @@ -187,7 +183,7 @@ int IOT_Shadow_Publish(void *pClient, char *topicName, PublishParams *pParams); /** * @brief Subscribe MQTT message * - * @param pClient handle to shadow client + * @param pClient handle to shadow client * @param topicFilter MQTT topic filter * @param pParams subscribe parameters * @@ -198,7 +194,7 @@ int IOT_Shadow_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pPar /** * @brief Unsubscribe MQTT message * - * @param pClient handle to shadow client + * @param pClient handle to shadow client * @param topicFilter MQTT topic filter * * @return packet id (>=0) when success, or err code (<0) for failure @@ -208,7 +204,7 @@ int IOT_Shadow_Unsubscribe(void *pClient, char *topicFilter); /** * @brief Check if MQTT shadow is connected * - * @param pClient handle to shadow client + * @param pClient handle to shadow client * @return true= connected, false = unconnected */ bool IOT_Shadow_IsConnected(void *pClient); @@ -243,7 +239,8 @@ int IOT_Shadow_Yield(void *pClient, uint32_t timeout_ms); * @param timeout_ms timeout value for this operation (unit: ms) * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int IOT_Shadow_Update(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, OnRequestCallback callback, void *userContext, uint32_t timeout_ms); +int IOT_Shadow_Update(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, OnRequestCallback callback, void *userContext, + uint32_t timeout_ms); /** * @brief Update device shadow document in synchronized way @@ -307,7 +304,6 @@ int IOT_Shadow_UnRegister_Property(void *pClient, DeviceProperty *pProperty); */ int IOT_Shadow_JSON_ConstructReport(void *pClient, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...); - /** * @brief Add reported fields array in JSON document, don't overwrite * @@ -318,8 +314,8 @@ int IOT_Shadow_JSON_ConstructReport(void *pClient, char *jsonBuffer, size_t size * @param pDeviceProperties array of properties * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int IOT_Shadow_JSON_ConstructReportArray(void *pClient, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, DeviceProperty *pDeviceProperties[]); - +int IOT_Shadow_JSON_ConstructReportArray(void *pClient, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, + DeviceProperty *pDeviceProperties[]); /** * @brief Add reported fields in JSON document, overwrite @@ -339,9 +335,10 @@ int IOT_Shadow_JSON_Construct_OverwriteReport(void *pClient, char *jsonBuffer, s * @param jsonBuffer string buffer to store JSON document * @param sizeOfBuffer size of string buffer * @param count number of properties - * @return QCLOUD_RET_SUCCESS when success, or err code for failure + * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int IOT_Shadow_JSON_ConstructReportAndDesireAllNull(void *pClient, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...); +int IOT_Shadow_JSON_ConstructReportAndDesireAllNull(void *pClient, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, + ...); /** * @brief Set desire field as null diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_system.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_system.h similarity index 89% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_system.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_system.h index fe568a0a..7d6da1e4 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/exports/qcloud_iot_export_system.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/exports/qcloud_iot_export_system.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -30,7 +30,6 @@ extern "C" { */ int IOT_Get_SysTime(void* pClient, long* time); - #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-list.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-list.h similarity index 73% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-list.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-list.h index 3e4c7944..a9c455cf 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/lite-list.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-list.h @@ -1,23 +1,17 @@ /* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and * limitations under the License. * */ -/** - * Edit by shockcao@tencent.com 2018/3/15 - */ #ifndef _LINUX_LIST_H #define _LINUX_LIST_H @@ -40,10 +34,12 @@ struct list_head { * using the generic single-entry routines. */ -#define LIST_HEAD_INIT(name) { &(name), &(name) } +#define LIST_HEAD_INIT(name) \ + { \ + &(name), &(name) \ + } -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) +#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name) static inline void INIT_LIST_HEAD(struct list_head *list) { @@ -57,14 +53,12 @@ static inline void INIT_LIST_HEAD(struct list_head *list) * This is only for internal list manipulation where we know * the prev/next entries already! */ -static inline void __list_add(struct list_head *new_ptr, - struct list_head *prev, - struct list_head *next) +static inline void __list_add(struct list_head *new_ptr, struct list_head *prev, struct list_head *next) { - next->prev = new_ptr; + next->prev = new_ptr; new_ptr->next = next; new_ptr->prev = prev; - prev->next = new_ptr; + prev->next = new_ptr; } /** @@ -80,7 +74,6 @@ static inline void list_add(struct list_head *new_ptr, struct list_head *head) __list_add(new_ptr, head, head->next); } - /** * list_add_tail - add a new_ptr entry * @new_ptr: new_ptr entry to be added @@ -130,17 +123,15 @@ static inline void list_del(struct list_head *entry) * * If @old was empty, it will be overwritten. */ -static inline void list_replace(struct list_head *old, - struct list_head *new_ptr) +static inline void list_replace(struct list_head *old, struct list_head *new_ptr) { - new_ptr->next = old->next; + new_ptr->next = old->next; new_ptr->next->prev = new_ptr; - new_ptr->prev = old->prev; + new_ptr->prev = old->prev; new_ptr->prev->next = new_ptr; } -static inline void list_replace_init(struct list_head *old, - struct list_head *new_ptr) +static inline void list_replace_init(struct list_head *old, struct list_head *new_ptr) { list_replace(old, new_ptr); INIT_LIST_HEAD(old); @@ -172,8 +163,7 @@ static inline void list_move(struct list_head *list, struct list_head *head) * @list: the entry to move * @head: the head that will follow our entry */ -static inline void list_move_tail(struct list_head *list, - struct list_head *head) +static inline void list_move_tail(struct list_head *list, struct list_head *head) { __list_del_entry(list); list_add_tail(list, head); @@ -184,8 +174,7 @@ static inline void list_move_tail(struct list_head *list, * @list: the entry to test * @head: the head of the list */ -static inline int list_is_last(const struct list_head *list, - const struct list_head *head) +static inline int list_is_last(const struct list_head *list, const struct list_head *head) { return list->next == head; } @@ -247,8 +236,7 @@ static inline int list_is_singular(const struct list_head *head) * @type: the type of the struct this is embedded in. * @member: the name of the list_struct within the struct. */ -#define list_entry(ptr, type, member) \ - container_of(ptr, type, member) +#define list_entry(ptr, type, member) container_of(ptr, type, member) /** * list_first_entry - get the first element from a list @@ -258,8 +246,7 @@ static inline int list_is_singular(const struct list_head *head) * * Note, that list is expected to be not empty. */ -#define list_first_entry(ptr, type, member) \ - list_entry((ptr)->next, type, member) +#define list_first_entry(ptr, type, member) list_entry((ptr)->next, type, member) /** * list_last_entry - get the last element from a list @@ -269,8 +256,7 @@ static inline int list_is_singular(const struct list_head *head) * * Note, that list is expected to be not empty. */ -#define list_last_entry(ptr, type, member) \ - list_entry((ptr)->prev, type, member) +#define list_last_entry(ptr, type, member) list_entry((ptr)->prev, type, member) /** * list_first_entry_or_null - get the first element from a list @@ -280,32 +266,28 @@ static inline int list_is_singular(const struct list_head *head) * * Note that if the list is empty, it returns NULL. */ -#define list_first_entry_or_null(ptr, type, member) \ - (!list_empty(ptr) ? list_first_entry(ptr, type, member) : NULL) +#define list_first_entry_or_null(ptr, type, member) (!list_empty(ptr) ? list_first_entry(ptr, type, member) : NULL) /** * list_next_entry - get the next element in list * @pos: the type * to cursor * @member: the name of the list_struct within the struct. */ -#define list_next_entry(pos, member, type) \ - list_entry((pos)->member.next, type, member) +#define list_next_entry(pos, member, type) list_entry((pos)->member.next, type, member) /** * list_prev_entry - get the prev element in list * @pos: the type * to cursor * @member: the name of the list_struct within the struct. */ -#define list_prev_entry(pos, member, type) \ - list_entry((pos)->member.prev, type, member) +#define list_prev_entry(pos, member, type) list_entry((pos)->member.prev, type, member) /** * list_for_each - iterate over a list * @pos: the &struct list_head to use as a loop cursor. * @head: the head for your list. */ -#define list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); pos = pos->next) +#define list_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next) /** * __list_for_each - iterate over a list @@ -315,16 +297,14 @@ static inline int list_is_singular(const struct list_head *head) * This variant doesn't differ from list_for_each() any more. * We don't do prefetching in either case. */ -#define __list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); pos = pos->next) +#define __list_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next) /** * list_for_each_prev - iterate over a list backwards * @pos: the &struct list_head to use as a loop cursor. * @head: the head for your list. */ -#define list_for_each_prev(pos, head) \ - for (pos = (head)->prev; pos != (head); pos = pos->prev) +#define list_for_each_prev(pos, head) for (pos = (head)->prev; pos != (head); pos = pos->prev) /** * list_for_each_safe - iterate over a list safe against removal of list entry @@ -332,9 +312,7 @@ static inline int list_is_singular(const struct list_head *head) * @n: another &struct list_head to use as temporary storage * @head: the head for your list. */ -#define list_for_each_safe(pos, n, head) \ - for (pos = (head)->next, n = pos->next; pos != (head); \ - pos = n, n = pos->next) +#define list_for_each_safe(pos, n, head) for (pos = (head)->next, n = pos->next; pos != (head); pos = n, n = pos->next) /** * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry @@ -343,9 +321,7 @@ static inline int list_is_singular(const struct list_head *head) * @head: the head for your list. */ #define list_for_each_prev_safe(pos, n, head) \ - for (pos = (head)->prev, n = pos->prev; \ - pos != (head); \ - pos = n, n = pos->prev) + for (pos = (head)->prev, n = pos->prev; pos != (head); pos = n, n = pos->prev) /** * list_for_each_entry - iterate over list of given type @@ -353,9 +329,8 @@ static inline int list_is_singular(const struct list_head *head) * @head: the head for your list. * @member: the name of the list_struct within the struct. */ -#define list_for_each_entry(pos, head, member, type) \ - for (pos = list_entry((head)->next, type, member); \ - &pos->member != (head); \ +#define list_for_each_entry(pos, head, member, type) \ + for (pos = list_entry((head)->next, type, member); &pos->member != (head); \ pos = list_entry(pos->member.next, type, member)) /** @@ -364,9 +339,8 @@ static inline int list_is_singular(const struct list_head *head) * @head: the head for your list. * @member: the name of the list_struct within the struct. */ -#define list_for_each_entry_reverse(pos, head, member, type) \ - for (pos = list_entry((head)->prev, type, member); \ - &pos->member != (head); \ +#define list_for_each_entry_reverse(pos, head, member, type) \ + for (pos = list_entry((head)->prev, type, member); &pos->member != (head); \ pos = list_entry(pos->member.prev, type, member)) /** @@ -377,8 +351,7 @@ static inline int list_is_singular(const struct list_head *head) * * Prepares a pos entry for use as a start point in list_for_each_entry_continue(). */ -#define list_prepare_entry(pos, head, member, type) \ - ((pos) ? : list_entry(head, type, member)) +#define list_prepare_entry(pos, head, member, type) ((pos) ?: list_entry(head, type, member)) /** * list_for_each_entry_continue - continue iteration over list of given type @@ -389,9 +362,8 @@ static inline int list_is_singular(const struct list_head *head) * Continue to iterate over list of given type, continuing after * the current position. */ -#define list_for_each_entry_continue(pos, head, member, type) \ - for (pos = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ +#define list_for_each_entry_continue(pos, head, member, type) \ + for (pos = list_entry(pos->member.next, type, member); &pos->member != (head); \ pos = list_entry(pos->member.next, type, member)) /** @@ -403,9 +375,8 @@ static inline int list_is_singular(const struct list_head *head) * Start to iterate over list of given type backwards, continuing after * the current position. */ -#define list_for_each_entry_continue_reverse(pos, head, member, type) \ - for (pos = list_entry(pos->member.prev, type, member); \ - &pos->member != (head); \ +#define list_for_each_entry_continue_reverse(pos, head, member, type) \ + for (pos = list_entry(pos->member.prev, type, member); &pos->member != (head); \ pos = list_entry(pos->member.prev, type, member)) /** @@ -416,9 +387,8 @@ static inline int list_is_singular(const struct list_head *head) * * Iterate over list of given type, continuing from current position. */ -#define list_for_each_entry_from(pos, head, member, type) \ - for (; &pos->member != (head); \ - pos = list_entry(pos->member.next, type, member)) +#define list_for_each_entry_from(pos, head, member, type) \ + for (; &pos->member != (head); pos = list_entry(pos->member.next, type, member)) /** * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry @@ -427,11 +397,9 @@ static inline int list_is_singular(const struct list_head *head) * @head: the head for your list. * @member: the name of the list_struct within the struct. */ -#define list_for_each_entry_safe(pos, n, head, member, type) \ - for (pos = list_entry((head)->next, type, member), \ - n = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ - pos = n, n = list_entry(n->member.next, type, member)) +#define list_for_each_entry_safe(pos, n, head, member, type) \ + for (pos = list_entry((head)->next, type, member), n = list_entry(pos->member.next, type, member); \ + &pos->member != (head); pos = n, n = list_entry(n->member.next, type, member)) /** * list_for_each_entry_safe_continue - continue list iteration safe against removal @@ -443,11 +411,9 @@ static inline int list_is_singular(const struct list_head *head) * Iterate over list of given type, continuing after current point, * safe against removal of list entry. */ -#define list_for_each_entry_safe_continue(pos, n, head, member, type) \ - for (pos = list_entry(pos->member.next, type, member), \ - n = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ - pos = n, n = list_entry(n->member.next, type, member)) +#define list_for_each_entry_safe_continue(pos, n, head, member, type) \ + for (pos = list_entry(pos->member.next, type, member), n = list_entry(pos->member.next, type, member); \ + &pos->member != (head); pos = n, n = list_entry(n->member.next, type, member)) /** * list_for_each_entry_safe_from - iterate over list from current point safe against removal @@ -459,9 +425,8 @@ static inline int list_is_singular(const struct list_head *head) * Iterate over list of given type from current point, safe against * removal of list entry. */ -#define list_for_each_entry_safe_from(pos, n, head, member, type) \ - for (n = list_entry(pos->member.next, type, member); \ - &pos->member != (head); \ +#define list_for_each_entry_safe_from(pos, n, head, member, type) \ + for (n = list_entry(pos->member.next, type, member); &pos->member != (head); \ pos = n, n = list_entry(n->member.next, type, member)) /** @@ -474,11 +439,9 @@ static inline int list_is_singular(const struct list_head *head) * Iterate backwards over list of given type, safe against removal * of list entry. */ -#define list_for_each_entry_safe_reverse(pos, n, head, member, type) \ - for (pos = list_entry((head)->prev, type, member), \ - n = list_entry(pos->member.prev, type, member); \ - &pos->member != (head); \ - pos = n, n = list_entry(n->member.prev, type, member)) +#define list_for_each_entry_safe_reverse(pos, n, head, member, type) \ + for (pos = list_entry((head)->prev, type, member), n = list_entry(pos->member.prev, type, member); \ + &pos->member != (head); pos = n, n = list_entry(n->member.prev, type, member)) /** * list_safe_reset_next - reset a stale list_for_each_entry_safe loop @@ -492,7 +455,6 @@ static inline int list_is_singular(const struct list_head *head) * and list_safe_reset_next is called after re-taking the lock and before * completing the current iteration of the loop body. */ -#define list_safe_reset_next(pos, n, member, type) \ - n = list_entry(pos->member.next, type, member) +#define list_safe_reset_next(pos, n, member, type) n = list_entry(pos->member.next, type, member) #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-utils.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-utils.h new file mode 100644 index 00000000..d2cfc640 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/lite-utils.h @@ -0,0 +1,86 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef __LITE_UTILS_H__ +#define __LITE_UTILS_H__ + +#include +#include +#include +#include +#include +#include +#if defined(_PLATFORM_IS_LINUX_) +#include +#endif + +#include "lite-list.h" +#include "qcloud_iot_import.h" + +#define LITE_TRUE (1) +#define LITE_FALSE (0) + +#ifndef container_of +#define container_of(ptr, type, member) ((type *)((char *)(ptr)-offsetof(type, member))) +#endif + +#define LITE_MINIMUM(a, b) (((a) <= (b)) ? (a) : (b)) +#define LITE_MAXIMUM(a, b) (((a) >= (b)) ? (a) : (b)) +#define LITE_isdigit(c) (((c) <= '9' && (c) >= '0') ? (LITE_TRUE) : (LITE_FALSE)) + +#if defined(_PLATFORM_IS_LINUX_) +#define LITE_ASSERT(expr) assert(expr) +#else +#define LITE_ASSERT(expr) \ + do { \ + if (!(expr)) { \ + HAL_Printf("### %s | %s(%d): ASSERT FAILED ###: %s is FALSE\r\n", __FILE__, __func__, __LINE__, #expr); \ + } \ + } while (0) +#endif + +char *LITE_strdup(const char *src); +char *LITE_format_string(const char *fmt, ...); +char *LITE_format_nstring(const int len, const char *fmt, ...); +void LITE_hexbuf_convert(unsigned char *digest, char *out, int buflen, int uppercase); +void LITE_hexstr_convert(char *hexstr, uint8_t *out_buf, int len); +void LITE_replace_substr(char orig[], char key[], char swap[]); + +char * LITE_json_value_of(char *key, char *src); +list_head_t *LITE_json_keys_of(char *src, char *prefix); +void LITE_json_keys_release(list_head_t *keylist); +char * LITE_json_string_value_strip_transfer(char *key, char *src); + +int LITE_get_int32(int32_t *value, char *src); +int LITE_get_int16(int16_t *value, char *src); +int LITE_get_int8(int8_t *value, char *src); +int LITE_get_uint32(uint32_t *value, char *src); +int LITE_get_uint16(uint16_t *value, char *src); +int LITE_get_uint8(uint8_t *value, char *src); +int LITE_get_float(float *value, char *src); +int LITE_get_double(double *value, char *src); +int LITE_get_boolean(bool *value, char *src); + +typedef struct _json_key_t { + char * key; + list_head_t list; +} json_key_t; + +#define foreach_json_keys_in(src, iter_key, keylist, pos) \ + for (keylist = (void *)LITE_json_keys_of((char *)src, ""), \ + pos = (void *)list_first_entry((list_head_t *)keylist, json_key_t, list), iter_key = ((json_key_t *)pos)->key; \ + (iter_key = ((json_key_t *)pos)->key); pos = list_next_entry((json_key_t *)pos, list, json_key_t)) + +#endif /* __LITE_UTILS_H__ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/platform.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/platform.h similarity index 81% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/platform.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/platform.h index cdd2d46a..b5ad29ca 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/platform.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/platform.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,25 +20,28 @@ extern "C" { #endif -#define PATH_MAX 4096 +#define PATH_MAX 4096 +/* Max size of cert/key file full path */ +#define FILE_PATH_MAX_LEN 256 #ifdef WIN32 #include #include #include +#include typedef unsigned long ssize_t; -#define getcwd(buffer,len) _getcwd(buffer,len) +#define getcwd(buffer, len) _getcwd(buffer, len) #endif #if defined(__linux__) && defined(__GLIBC__) -#include +#include #include +#include +#include +#include #include #include #include -#include -#include -#include #endif #ifdef __cplusplus diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_export.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_export.h similarity index 60% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_export.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_export.h index f3a5e494..139367dc 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_export.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_export.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -23,71 +23,69 @@ extern "C" { #include "config.h" #include "platform.h" - /* IoT C-SDK version info */ -#define QCLOUD_IOT_DEVICE_SDK_VERSION "3.1.2" +#define QCLOUD_IOT_DEVICE_SDK_VERSION "3.2.0" /**************** QCloud IoT C-SDK constants begin ************************/ /* MAX size of client ID */ -#define MAX_SIZE_OF_CLIENT_ID (80) +#define MAX_SIZE_OF_CLIENT_ID (80) /* MAX size of product ID */ -#define MAX_SIZE_OF_PRODUCT_ID (10) +#define MAX_SIZE_OF_PRODUCT_ID (10) /* MAX size of product secret */ -#define MAX_SIZE_OF_PRODUCT_SECRET (32) +#define MAX_SIZE_OF_PRODUCT_SECRET (32) /* MAX size of device name */ -#define MAX_SIZE_OF_DEVICE_NAME (48) +#define MAX_SIZE_OF_DEVICE_NAME (48) /* MAX size of device secret */ -#define MAX_SIZE_OF_DEVICE_SECRET (64) +#define MAX_SIZE_OF_DEVICE_SECRET (64) /* MAX size of device cert file name */ -#define MAX_SIZE_OF_DEVICE_CERT_FILE_NAME (128) +#define MAX_SIZE_OF_DEVICE_CERT_FILE_NAME (128) /* MAX size of device key file name */ -#define MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME (128) +#define MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME (128) /**************** QCloud IoT C-SDK constants end *************************/ typedef struct { - char product_id[MAX_SIZE_OF_PRODUCT_ID + 1]; - char device_name[MAX_SIZE_OF_DEVICE_NAME + 1]; - char client_id[MAX_SIZE_OF_CLIENT_ID + 1]; - + char product_id[MAX_SIZE_OF_PRODUCT_ID + 1]; + char device_name[MAX_SIZE_OF_DEVICE_NAME + 1]; + char client_id[MAX_SIZE_OF_CLIENT_ID + 1]; + #ifdef AUTH_MODE_CERT - char dev_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1]; - char dev_key_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1]; + char dev_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1]; + char dev_key_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1]; #else - char device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1]; + char device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1]; #endif #ifdef DEV_DYN_REG_ENABLED - char product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1]; -#endif + char product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1]; +#endif } DeviceInfo; #ifdef GATEWAY_ENABLED typedef struct { - DeviceInfo gw_info; - DeviceInfo *sub_dev_info; - unsigned int sub_dev_num; + DeviceInfo gw_info; + DeviceInfo* sub_dev_info; + unsigned int sub_dev_num; } GatewayDeviceInfo; -#endif +#endif -#include "qcloud_iot_export_variables.h" #include "qcloud_iot_export_coap.h" -#include "qcloud_iot_export_log.h" -#include "qcloud_iot_export_error.h" -#include "qcloud_iot_export_mqtt.h" -#include "qcloud_iot_export_shadow.h" -#include "qcloud_iot_export_ota.h" -#include "qcloud_iot_export_system.h" -#include "qcloud_iot_export_gateway.h" #include "qcloud_iot_export_dynreg.h" - +#include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_gateway.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_export_mqtt.h" +#include "qcloud_iot_export_ota.h" +#include "qcloud_iot_export_shadow.h" +#include "qcloud_iot_export_system.h" +#include "qcloud_iot_export_variables.h" #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_export_variables.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_export_variables.h similarity index 66% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_export_variables.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_export_variables.h index f9bcf223..e2cfbfab 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_export_variables.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_export_variables.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,58 +20,55 @@ * Below variables are dependant on user situation (network status/device memory/application context) * Adjust the default value to meet your requirement */ - + /* default MQTT/CoAP timeout value when connect/pub/sub (unit: ms) */ -#define QCLOUD_IOT_MQTT_COMMAND_TIMEOUT (5 * 1000) +#define QCLOUD_IOT_MQTT_COMMAND_TIMEOUT (5 * 1000) /* default MQTT keep alive interval (unit: ms) */ -#define QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL (240 * 1000) +#define QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL (240 * 1000) /* default MQTT Tx buffer size, MAX: 16*1024 */ -#define QCLOUD_IOT_MQTT_TX_BUF_LEN (2048) +#define QCLOUD_IOT_MQTT_TX_BUF_LEN (2048) /* default MQTT Rx buffer size, MAX: 16*1024 */ -#define QCLOUD_IOT_MQTT_RX_BUF_LEN (2048) +#define QCLOUD_IOT_MQTT_RX_BUF_LEN (2048) /* default COAP Tx buffer size, MAX: 1*1024 */ -#define COAP_SENDMSG_MAX_BUFLEN (512) +#define COAP_SENDMSG_MAX_BUFLEN (512) /* default COAP Rx buffer size, MAX: 1*1024 */ -#define COAP_RECVMSG_MAX_BUFLEN (512) +#define COAP_RECVMSG_MAX_BUFLEN (512) /* MAX MQTT reconnect interval (unit: ms) */ -#define MAX_RECONNECT_WAIT_INTERVAL (60 * 1000) +#define MAX_RECONNECT_WAIT_INTERVAL (60 * 1000) /* MAX valid time when connect to MQTT server. 0: always valid */ /* Use this only if the device has accurate UTC time. Otherwise, set to 0 */ -#define MAX_ACCESS_EXPIRE_TIMEOUT (0) - - +#define MAX_ACCESS_EXPIRE_TIMEOUT (0) /* log print/upload related variables */ /* MAX size of log buffer for one log item including header and content */ -#define MAX_LOG_MSG_LEN (511) +#define MAX_LOG_MSG_LEN (511) #if defined(__linux__) - #undef MAX_LOG_MSG_LEN - #define MAX_LOG_MSG_LEN (1023) +#undef MAX_LOG_MSG_LEN +#define MAX_LOG_MSG_LEN (1023) #endif -/* +/* * Log upload related params, which will affect the size of device memory/disk consumption * the default value can be changed for different user situation */ // size of buffer for log upload -#define LOG_UPLOAD_BUFFER_SIZE 5000 +#define LOG_UPLOAD_BUFFER_SIZE 5000 // Max size of one http log upload. Should not larger than 5000 -#define MAX_HTTP_LOG_POST_SIZE 3000 +#define MAX_HTTP_LOG_POST_SIZE 3000 // MAX size for saving log into NVS (files/FLASH) after upload fail -#define MAX_LOG_SAVE_SIZE (3*LOG_UPLOAD_BUFFER_SIZE) +#define MAX_LOG_SAVE_SIZE (3 * LOG_UPLOAD_BUFFER_SIZE) // interval of log upload (unit: ms) Decrease this value if LOG_UPLOAD_BUFFER_SIZE is small -#define LOG_UPLOAD_INTERVAL_MS 2000 - +#define LOG_UPLOAD_INTERVAL_MS 2000 #endif /* QCLOUD_IOT_EXPORT_VARIABLES_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_import.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_import.h similarity index 86% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_import.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_import.h index bfc22cac..e2e9f2a0 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/include/qcloud_iot_import.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/qcloud_iot_import.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,25 +19,24 @@ extern "C" { #endif +#include +#include +#include +#include +#include +#include + #include "config.h" #include "platform.h" -#include -#include -#include -#include -#include -#include +#define _IN_ /* indicate an input parameter */ +#define _OU_ /* indicate a output parameter */ -#define _IN_ /* indicate an input parameter */ -#define _OU_ /* indicate a output parameter */ - -#define IOT_TRUE (1) /* indicate boolean value true */ -#define IOT_FALSE (0) /* indicate boolean value false */ - -#define Max(a,b) ((a) > (b) ? (a) : (b)) -#define Min(a,b) ((a) < (b) ? (a) : (b)) +#define IOT_TRUE (1) /* indicate boolean value true */ +#define IOT_FALSE (0) /* indicate boolean value false */ +#define Max(a, b) ((a) > (b) ? (a) : (b)) +#define Min(a, b) ((a) < (b) ? (a) : (b)) /********************************************************************** * QCloud IoT C-SDK Hardware Abstraction Layer @@ -46,24 +45,24 @@ extern "C" { * Require porting when adapt SDK to new platform/OS *********************************************************************/ +typedef void (*ThreadRunFunc)(void *arg); + +typedef struct ThreadParams { + char * thread_name; + uint32_t thread_id; + ThreadRunFunc thread_func; + void * user_arg; + uint16_t priority; + uint32_t stack_size; +} ThreadParams; + /** * @brief Create a thread/task * - * @param stack_size thread stack size - * @param priority thread priority - * @param taskname task name - * @param fn thread runtime function callback - * @param arg thread function context - * @return a valid thread handle when success, or NULL otherwise + * @param params thread parameters + * @return 0 when success, or error code otherwise */ -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg); - -/** - * @brief Destroy a thread/task - * - * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ -int HAL_ThreadDestroy(void *thread_t); +int HAL_ThreadCreate(ThreadParams *params); /** * @brief create semaphore @@ -211,6 +210,15 @@ int HAL_SetDevInfo(void *pdevInfo); */ int HAL_GetDevInfo(void *pdevInfo); +/** + * @brief Get device info from a JSON file + * + * @param file_name JSON file path + * @param pdevInfo reference to device info + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int HAL_GetDevInfoFromFile(const char *file_name, void *dev_info); + #ifdef GATEWAY_ENABLED /** * @brief Get gateway device info from NVS(flash/files) @@ -221,7 +229,6 @@ int HAL_GetDevInfo(void *pdevInfo); int HAL_GetGwDevInfo(void *pgwDeviceInfo); #endif - /** * @brief Set the name of file which contain device info * @@ -230,15 +237,14 @@ int HAL_GetGwDevInfo(void *pgwDeviceInfo); */ int HAL_SetDevInfoFile(const char *file_name); - /** * Define timer structure, platform dependant */ struct Timer { #if defined(__linux__) && defined(__GLIBC__) - struct timeval end_time; + struct timeval end_time; #else - uintptr_t end_time; + uintptr_t end_time; #endif }; @@ -283,12 +289,13 @@ int HAL_Timer_remain(Timer *timer); */ void HAL_Timer_init(Timer *timer); +#define TIME_FORMAT_STR_LEN (20) /** - * @brief Get local time in format: %Y-%m-%d %z %H:%M:%S + * @brief Get local time in format: %y-%m-%d %H:%M:%S * * @return string of formatted time */ -char* HAL_Timer_current(void); +char *HAL_Timer_current(char *time_str); /** * @brief Get timestamp in second @@ -298,10 +305,10 @@ char* HAL_Timer_current(void); long HAL_Timer_current_sec(void); #ifdef AT_TCP_ENABLED -int HAL_AT_TCP_Init(void); +int HAL_AT_TCP_Init(void); uintptr_t HAL_AT_TCP_Connect(const char *host, uint16_t port); -int HAL_AT_TCP_Disconnect(uintptr_t fd); -int HAL_AT_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len); +int HAL_AT_TCP_Disconnect(uintptr_t fd); +int HAL_AT_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len); int HAL_AT_TCP_Read(uintptr_t fd, uint8_t *buf, uint32_t len, uint32_t timeout_ms, uint32_t *read_len); int at_device_init(void); int HAL_AT_Uart_Init(void); @@ -310,7 +317,6 @@ int HAL_AT_Uart_Send(void *data, uint32_t size); int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout); #endif - /********** TLS/DTLS network sturcture and operations **********/ #ifndef AUTH_WITH_NOTLS @@ -319,30 +325,29 @@ int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint * */ typedef struct { - const char *ca_crt; - uint16_t ca_crt_len; + const char *ca_crt; + uint16_t ca_crt_len; #ifdef AUTH_MODE_CERT - /** - * Device with certificate - */ - const char *cert_file; // public certificate file - const char *key_file; // pravite certificate file + /** + * Device with certificate + */ + const char *cert_file; // public certificate file + const char *key_file; // pravite certificate file #else /** * Device with PSK */ - const char *psk; // PSK string - const char *psk_id; // PSK ID + const char *psk; // PSK string + const char *psk_id; // PSK ID #endif - size_t psk_length; // PSK length + size_t psk_length; // PSK length - unsigned int timeout_ms; // SSL handshake timeout in millisecond + unsigned int timeout_ms; // SSL handshake timeout in millisecond } SSLConnectParams; - typedef SSLConnectParams TLSConnectParams; /** @@ -372,8 +377,7 @@ void HAL_TLS_Disconnect(uintptr_t handle); * @param written_len length of data written successfully * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int HAL_TLS_Write(uintptr_t handle, unsigned char *data, size_t totalLen, uint32_t timeout_ms, - size_t *written_len); +int HAL_TLS_Write(uintptr_t handle, unsigned char *data, size_t totalLen, uint32_t timeout_ms, size_t *written_len); /** * @brief Read data via TLS connection @@ -385,8 +389,7 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *data, size_t totalLen, uint32 * @param read_len length of data read successfully * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int HAL_TLS_Read(uintptr_t handle, unsigned char *data, size_t totalLen, uint32_t timeout_ms, - size_t *read_len); +int HAL_TLS_Read(uintptr_t handle, unsigned char *data, size_t totalLen, uint32_t timeout_ms, size_t *read_len); /********** DTLS network **********/ #ifdef COAP_COMM_ENABLED @@ -431,12 +434,10 @@ int HAL_DTLS_Write(uintptr_t handle, const unsigned char *data, size_t datalen, * @param read_len length of data read successfully * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int HAL_DTLS_Read(uintptr_t handle, unsigned char *data, size_t datalen, uint32_t timeout_ms, - size_t *read_len); - -#endif //COAP_COMM_ENABLED -#endif //AUTH_WITH_NOTLS +int HAL_DTLS_Read(uintptr_t handle, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); +#endif // COAP_COMM_ENABLED +#endif // AUTH_WITH_NOTLS /********** TCP network **********/ /** @@ -466,8 +467,7 @@ int HAL_TCP_Disconnect(uintptr_t fd); * @param written_len length of data written successfully * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int HAL_TCP_Write(uintptr_t fd, const unsigned char *data, uint32_t len, uint32_t timeout_ms, - size_t *written_len); +int HAL_TCP_Write(uintptr_t fd, const unsigned char *data, uint32_t len, uint32_t timeout_ms, size_t *written_len); /** * @brief Read data via TCP connection @@ -479,8 +479,7 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *data, uint32_t len, uint32_ * @param read_len length of data read successfully * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int HAL_TCP_Read(uintptr_t fd, unsigned char *data, uint32_t len, uint32_t timeout_ms, - size_t *read_len); +int HAL_TCP_Read(uintptr_t fd, unsigned char *data, uint32_t len, uint32_t timeout_ms, size_t *read_len); /********** UDP network **********/ #ifdef COAP_COMM_ENABLED @@ -531,7 +530,7 @@ int HAL_UDP_Read(uintptr_t fd, unsigned char *data, unsigned int len); * @return length of data read when success, or err code for failure */ int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datalen, unsigned int timeout_ms); -#endif //COAP_COMM_ENABLED +#endif // COAP_COMM_ENABLED #ifdef LOG_UPLOAD /* Functions for saving/reading logs into/from NVS(files/FLASH) after log upload fail/recover */ @@ -548,13 +547,13 @@ size_t HAL_Log_Save(const char *log, size_t len); * @param buf destination log buffer * @param len length of log to read * @return length of data read when success, or 0 for failure - */ + */ size_t HAL_Log_Read(char *buf, size_t len); /** - * @brief Functions for deleting logs in NVS(files/FLASH). + * @brief Functions for deleting logs in NVS(files/FLASH). * @return 0 when success - */ + */ int HAL_Log_Del(void); /** @@ -567,4 +566,4 @@ size_t HAL_Log_Get_Size(void); #if defined(__cplusplus) } #endif -#endif /* QCLOUD_IOT_IMPORT_H_ */ +#endif /* QCLOUD_IOT_IMPORT_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/utils_getopt.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/utils_getopt.h new file mode 100644 index 00000000..0b5f33b1 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/include/utils_getopt.h @@ -0,0 +1,22 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef __UTILS_GETOPT_H__ +#define __UTILS_GETOPT_H__ + +extern char* utils_optarg; /* pointer to argument of current option */ +int utils_getopt(int nargc, char* const* nargv, const char* options); + +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/make.settings b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/make.settings similarity index 75% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/make.settings rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/make.settings index 3e31db4d..ffe95218 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/make.settings +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/make.settings @@ -20,13 +20,13 @@ PLATFORM_AT_DEV = esp8266 FEATURE_MQTT_COMM_ENABLED = y # 是否打开设备影子的总开关 -FEATURE_MQTT_DEVICE_SHADOW = y +FEATURE_MQTT_DEVICE_SHADOW = y # 是否打开CoAP通道的总开关 -FEATURE_COAP_COMM_ENABLED = y +FEATURE_COAP_COMM_ENABLED = n # 是否打开MQTT通道网关功能 -FEATURE_GATEWAY_ENABLED = n +FEATURE_GATEWAY_ENABLED = y # 是否打开OTA固件升级总开关 FEATURE_OTA_COMM_ENABLED = y @@ -49,23 +49,23 @@ FEATURE_LOG_UPLOAD_ENABLED = n # 是否打开获取iot后台时间功能 FEATURE_SYSTEM_COMM_ENABLED = y -# 是否编译Linux多线程测试例程 -FEATURE_MULTITHREAD_TEST_ENABLED = y +# 是否打开多线程功能支持 +FEATURE_MULTITHREAD_ENABLED = y -# 是否打开代码中获取设备信息功能,OFF时将从device_info.json中读取设备信息 +# 是否使用HTTPS下载固件 +FEATURE_OTA_USE_HTTPS = y + +# 是否打开代码中获取设备信息功能,设为n时将从device_info.json中读取设备信息 FEATURE_DEBUG_DEV_INFO_USED = n # 是否使用AT方式实现TCP通信 -FEATURE_AT_TCP_ENABLED = n +FEATURE_AT_TCP_ENABLED = n # 是否打开AT模组中断接收功能 -FEATURE_AT_UART_RECV_IRQ = y +FEATURE_AT_UART_RECV_IRQ = n # 是否打开AT模组多线程功能 -FEATURE_AT_OS_USED = y +FEATURE_AT_OS_USED = n # 是否打开AT模组调试功能 -FEATURE_AT_DEBUG = y - -# 是否使用HTTPS下载固件 -FEATURE_OTA_USE_HTTPS = y \ No newline at end of file +FEATURE_AT_DEBUG = n diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/CMakeLists.txt b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/CMakeLists.txt similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/CMakeLists.txt rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/CMakeLists.txt diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c new file mode 100644 index 00000000..9f30bc96 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.c @@ -0,0 +1,558 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "at_device_esp8266.h" + +#include +#include + +#include "at_client.h" +#include "at_socket_inf.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +#define WIFI_CONN_FLAG (1 << 0) +#define SEND_OK_FLAG (1 << 1) +#define SEND_FAIL_FLAG (1 << 2) + +static uint8_t sg_SocketBitMap = 0; + +static at_evt_cb_t at_evt_cb_table[] = { + [AT_SOCKET_EVT_RECV] = NULL, + [AT_SOCKET_EVT_CLOSED] = NULL, +}; + +static int alloc_fd(void) +{ + uint8_t i; + int fd; + + for (i = 0; i < ESP8266_MAX_SOCKET_NUM; i++) { + if (0 == ((sg_SocketBitMap >> i) & 0x01)) { + sg_SocketBitMap |= (1 << i) & 0xff; + break; + } + } + + return (i < ESP8266_MAX_SOCKET_NUM) ? (fd = i) : (fd = UNUSED_SOCKET); +} + +static void free_fd(int fd) +{ + uint8_t i = fd; + + if ((fd != UNUSED_SOCKET) && fd < ESP8266_MAX_SOCKET_NUM) { + sg_SocketBitMap &= ~((1 << i) & 0xff); + } +} + +static void urc_send_func(const char *data, size_t size) +{ + POINTER_SANITY_CHECK_RTN(data); + + if (strstr(data, "SEND OK")) { + at_setFlag(SEND_OK_FLAG); + } else if (strstr(data, "SEND FAIL")) { + at_setFlag(SEND_FAIL_FLAG); + } +} + +static void urc_send_bfsz_func(const char *data, size_t size) +{ + POINTER_SANITY_CHECK_RTN(data); + int send_bfsz = 0; + + sscanf(data, "Recv %d bytes", &send_bfsz); +} + +static void urc_close_func(const char *data, size_t size) +{ + int fd = 0; + POINTER_SANITY_CHECK_RTN(data); + + sscanf(data, "%d,CLOSED", &fd); + + /* notice the socket is disconnect by remote */ + if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]) { + at_evt_cb_table[AT_SOCKET_EVT_CLOSED](fd, AT_SOCKET_EVT_CLOSED, NULL, 0); + } + + free_fd(fd); +} + +static void urc_recv_func(const char *data, size_t size) +{ + int fd; + size_t bfsz = 0, temp_size = 0; + uint32_t timeout; + char * recv_buf, temp[8]; + + POINTER_SANITY_CHECK_RTN(data); + + /* get the current socket and receive buffer size by receive data */ + sscanf(data, "+IPD,%d,%d:", &fd, (int *)&bfsz); + + /* get receive timeout by receive buffer length */ + timeout = bfsz; + + if (fd < 0 || bfsz == 0) + return; + + recv_buf = HAL_Malloc(bfsz); + if (NULL == recv_buf) { + Log_e("no memory for URC receive buffer (%d)!", bfsz); + /* read and clean the coming data */ + while (temp_size < bfsz) { + if (bfsz - temp_size > sizeof(temp)) { + at_client_recv(temp, sizeof(temp), timeout); + } else { + at_client_recv(temp, bfsz - temp_size, timeout); + } + temp_size += sizeof(temp); + } + return; + } + + /* sync receive data */ + if (at_client_recv(recv_buf, bfsz, timeout) != bfsz) { + Log_e("receive size(%d) data failed!", bfsz); + HAL_Free(recv_buf); + return; + } + + /* notice the receive buffer and buffer size */ + if (at_evt_cb_table[AT_SOCKET_EVT_RECV]) { + at_evt_cb_table[AT_SOCKET_EVT_RECV](fd, AT_SOCKET_EVT_RECV, recv_buf, bfsz); + } +} + +static void urc_busy_p_func(const char *data, size_t size) +{ + POINTER_SANITY_CHECK_RTN(data); + + Log_d("system is processing a commands and it cannot respond to the current commands."); +} + +static void urc_busy_s_func(const char *data, size_t size) +{ + POINTER_SANITY_CHECK_RTN(data); + + Log_d("system is sending data and it cannot respond to the current commands."); +} + +static void urc_func(const char *data, size_t size) +{ + POINTER_SANITY_CHECK_RTN(data); + int i; + + if (strstr(data, "WIFI CONNECTED")) { + at_setFlag(WIFI_CONN_FLAG); + } else if (strstr(data, "WIFI DISCONNECT")) { + /* notice the socket is disconnect by remote */ + if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]) { + for (i = 0; i < ESP8266_MAX_SOCKET_NUM; i++) { + at_evt_cb_table[AT_SOCKET_EVT_CLOSED](i, AT_SOCKET_EVT_CLOSED, NULL, 0); + free_fd(i); + } + } + } +} + +static at_urc urc_table[] = { + {"SEND OK", "\r\n", urc_send_func}, + {"SEND FAIL", "\r\n", urc_send_func}, + {"Recv", "bytes\r\n", urc_send_bfsz_func}, + {"", ",CLOSED\r\n", urc_close_func}, + {"+IPD", ":", urc_recv_func}, + {"busy p", "\r\n", urc_busy_p_func}, + {"busy s", "\r\n", urc_busy_s_func}, + {"WIFI CONNECTED", "\r\n", urc_func}, + {"WIFI DISCONNECT", "\r\n", urc_func}, +}; + +static void esp8266_set_event_cb(at_socket_evt_t event, at_evt_cb_t cb) +{ + if (event < sizeof(at_evt_cb_table) / sizeof(at_evt_cb_table[0])) { + at_evt_cb_table[event] = cb; + } +} + +static int esp8266_init(void) +{ + at_response_t resp = NULL; + int ret; + int i; + + resp = at_create_resp(512, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + /* reset module */ + at_exec_cmd(resp, "AT+RST"); + + /* reset waiting delay */ + at_delayms(2000); + + /* disable echo */ + + ret = at_exec_cmd(resp, "ATE0"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd ATE0 exec err"); + // goto exit; + } + + at_delayms(100); + /* set current mode to Wi-Fi station */ + ret = at_exec_cmd(resp, "AT+CWMODE=1"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CWMODE=1 exec err"); + // goto exit; + } + + at_delayms(100); + /* get module version */ + ret = at_exec_cmd(resp, "AT+GMR"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CWMODE=1 exec err"); + // goto exit; + } + + /* show module version */ + for (i = 0; i < resp->line_counts - 1; i++) { + Log_d("%s", at_resp_get_line(resp, i + 1)); + } + + at_delayms(100); + at_clearFlag(WIFI_CONN_FLAG); + /* connect to WiFi AP */ + ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); + + if (!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)) { + Log_e("wifi connect timeout"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + ret = at_exec_cmd(resp, "AT+CIPMUX=1"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CIPMUX=1 exec err"); + } + +__exit: + + if (resp) { + at_delete_resp(resp); + } + + return ret; +} + +static int esp8266_close(int fd) +{ + at_response_t resp; + int ret; + + resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + ret = at_exec_cmd(resp, "AT+CIPCLOSE=%d", fd); + + if (QCLOUD_RET_SUCCESS != ret) { // fancyxu + Log_e("close socket(%d) fail", fd); + } + + if (resp) { + at_delete_resp(resp); + } + + return ret; +} + +static int esp8266_connect(const char *ip, uint16_t port, eNetProto proto) +{ + at_response_t resp; + bool retryed = false; + int fd, ret; + + POINTER_SANITY_CHECK(ip, QCLOUD_ERR_INVAL); + resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + fd = alloc_fd(); + if (fd < 0) { + Log_e("esp8226 support max %d chain", ESP8266_MAX_SOCKET_NUM); + return QCLOUD_ERR_FAILURE; + } + +__retry: + + switch (proto) { + case eNET_TCP: + /* send AT commands to connect TCP server */ + ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d,60", fd, ip, port); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("start tcp connect failed, fd=%d,ip(%s),port(%d)", fd, ip, port); + } + break; + + case eNET_UDP: + ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d", fd, ip, port); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("start udp connect failed, fd=%d,ip(%s),port(%d)", fd, ip, port); + } + break; + + default: + Log_e("Not supported connect type : %d", proto); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + if ((QCLOUD_RET_SUCCESS != ret) && !retryed) { + Log_e("socket(%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", fd); + if (QCLOUD_RET_SUCCESS != esp8266_close(fd)) { + goto __exit; + } + retryed = true; + at_delayms(100); + goto __retry; + } + +__exit: + + if (resp) { + at_delete_resp(resp); + } + + if (QCLOUD_RET_SUCCESS != ret) { + free_fd(fd); + fd = UNUSED_SOCKET; + } + + at_delayms(200); + return fd; +} + +static int esp8266_send(int fd, const void *buff, size_t len) +{ + int ret; + at_response_t resp; + size_t cur_pkt_size = 0; + size_t sent_size = 0; + size_t temp_size = 0; + + POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); + resp = at_create_resp(512, 2, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + /* set AT client end sign to deal with '>' sign.*/ + at_set_end_sign('>'); + + while (sent_size < len) { + if (len - sent_size < ESP8266_SEND_MAX_LEN_ONCE) { + cur_pkt_size = len - sent_size; + } else { + cur_pkt_size = ESP8266_SEND_MAX_LEN_ONCE; + } + + at_clearFlag(SEND_OK_FLAG); + at_clearFlag(SEND_FAIL_FLAG); + /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line. */ + ret = at_exec_cmd(resp, "AT+CIPSEND=%d,%d", fd, cur_pkt_size); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CIPSEND exec err"); + goto __exit; + } + at_set_end_sign(0); + /* send the real data to server or client */ + temp_size = at_client_send(at_client_get(), (char *)buff + sent_size, cur_pkt_size, AT_RESP_TIMEOUT_MS); + + if (cur_pkt_size != temp_size) { + Log_e("at send real data failed"); + goto __exit; + } + +#ifndef AT_OS_USED + at_urc urc_send = {.cmd_prefix = "SEND OK", .cmd_suffix = "\r\n", NULL}; + at_client_yeild(&urc_send, resp->timeout); + if (at_client_get()->resp_status != AT_RESP_OK) { + Log_e("send fail"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } +#else + if (at_waitFlag(SEND_OK_FLAG | SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)) { + if (at_waitFlag(SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)) { + Log_e("send fail"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + } +#endif + sent_size += cur_pkt_size; + } + + ret = QCLOUD_RET_SUCCESS; + +__exit: + /* reset the end sign for data */ + if (resp) { + at_delete_resp(resp); + } + + return sent_size; // fancyxu +} + +static int esp8266_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) +{ +#ifndef AT_OS_USED + at_client_yeild(NULL, timeout); +#endif + return QCLOUD_RET_SUCCESS; +} + +static int esp8266_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) +{ +#define RESOLVE_RETRY 5 + + char recv_ip[16] = {0}; + at_response_t resp; + int ret, i; + + POINTER_SANITY_CHECK(host_name, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(host_ip, QCLOUD_ERR_INVAL); + + if (host_ip_len < 16) { + Log_e("host ip buff too short"); + return QCLOUD_ERR_FAILURE; + } + + resp = at_create_resp(128, 0, 4 * AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + for (i = 0; i < RESOLVE_RETRY; i++) { + ret = at_exec_cmd(resp, "AT+CIPDOMAIN=\"%s\"", host_name); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("exec AT+CIPDOMAIN=\"%s\" fail", host_name); + goto __exit; + } + + /* parse the third line of response data, get the IP address */ + if (at_resp_parse_line_args_by_kw(resp, "+CIPDOMAIN:", "+CIPDOMAIN:%s", recv_ip) < 0) { + at_delayms(100); + /* resolve failed, maybe receive an URC CRLF */ + continue; + } + + if (strlen(recv_ip) < 8) { + at_delayms(100); + /* resolve failed, maybe receive an URC CRLF */ + continue; + } else { + strncpy(host_ip, recv_ip, 15); + host_ip[15] = '\0'; + break; + } + } + +__exit: + + if (resp) { + at_delete_resp(resp); + } + +#undef RESOLVE_RETRY + + return ret; +} + +at_device_op_t at_ops_esp8266 = { + .init = esp8266_init, + .connect = esp8266_connect, + .send = esp8266_send, + .recv_timeout = esp8266_recv_timeout, + .close = esp8266_close, + .parse_domain = esp8266_parse_domain, + .set_event_cb = esp8266_set_event_cb, + .deviceName = "esp8266", +}; + +int at_device_esp8266_init(void) +{ + int i; + int ret; + at_client_t p_client; + + ret = HAL_AT_Uart_Init(); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at uart init fail!"); + } else { + Log_d("at uart init success!"); + } + + /* initialize AT client */ + ret = at_client_init(&p_client); + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at client init fail,ret:%d", ret); + goto exit; + } else { + Log_d("at client init success"); + } + + /* register URC data execution function */ + at_set_urc_table(p_client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); + + Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); + for (i = 0; i < p_client->urc_table_size; i++) { + Log_d("%s", p_client->urc_table[i].cmd_prefix); + } + + ret = at_device_op_register(&at_ops_esp8266); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at device driver register fail"); + goto exit; + } + +exit: + if (QCLOUD_RET_SUCCESS != ret) { + if (NULL != p_client) { + at_client_deinit(p_client); + } + } + + return ret; +} + +/*at device driver must realize this api which called by HAL_AT_TCP_Init*/ +int at_device_init(void) +{ + return at_device_esp8266_init(); +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.h similarity index 71% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.h index a131c195..ed33c041 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/at_device/esp8266/at_device_esp8266.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/at_device/esp8266/at_device_esp8266.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,18 +13,16 @@ * */ - #ifndef __AT_DEVICE_ESP8266_H__ #define __AT_DEVICE_ESP8266_H__ -#define AT_RESP_TIMEOUT_MS (5000) -#define ESP8266_SEND_MAX_LEN_ONCE (2048) -#define ESP8266_MAX_SOCKET_NUM (5) +#define AT_RESP_TIMEOUT_MS (5000) +#define ESP8266_SEND_MAX_LEN_ONCE (2048) +#define ESP8266_MAX_SOCKET_NUM (5) -#define WIFI_SSID "youga_wifi"//"Honor 8"// -#define WIFI_PASSWORD "Iot@2018"//"xy123123"// +#define WIFI_SSID "youga_wifi" //"Honor 8"// +#define WIFI_PASSWORD "Iot@2018" //"xy123123"// int at_device_esp8266_init(void); #endif /* __AT_DEVICE_ESP8266_H__ */ - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c new file mode 100644 index 00000000..2bdf45ee --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_AT_UART_freertos.c @@ -0,0 +1,77 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#ifdef AT_TCP_ENABLED + +#include +#include +#include +#include + +#include "at_client.h" +#include "stm32l4xx_hal.h" +#include "utils_ringbuff.h" + +#define HAL_AT_UART_IRQHandler USART1_IRQHandler +extern UART_HandleTypeDef huart1; +static UART_HandleTypeDef *pAtUart = &huart1; + +extern void AT_Uart_Init(void); +extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); + +#include "board.h" +/** + * @brief This function handles AT UART global interrupt,push recv char to ringbuff. + */ +void HAL_AT_UART_IRQHandler(void) +{ + uint8_t ch; + if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { + ch = (uint8_t)READ_REG(pAtUart->Instance->RDR) & 0xFF; + /*this callback for at_client*/ + at_client_uart_rx_isr_cb(&ch, 1); + HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + } + __HAL_UART_CLEAR_PEFLAG(pAtUart); +} + +/** + *pdata: pointer of data for send + *len: len of data to be sent + *return: the len of data send success + * @brief hal api for at data send + */ +int HAL_AT_Uart_Send(void *data, uint32_t size) +{ + if (HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) { + return size; + } else { + return 0; + } +} + +int HAL_AT_Uart_Init(void) +{ + AT_Uart_Init(); + return QCLOUD_RET_SUCCESS; +} + +int HAL_AT_Uart_Deinit(void) +{ + return QCLOUD_RET_SUCCESS; +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c new file mode 100644 index 00000000..e51ac07b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Device_freertos.c @@ -0,0 +1,165 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/* Enable this macro (also control by cmake) to use static string buffer to store device info */ +/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ +#define DEBUG_DEV_INFO_USED + +#ifdef DEBUG_DEV_INFO_USED +/* product Id */ +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; + +/* device name */ +static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; + +#ifdef DEV_DYN_REG_ENABLED +/* product secret for device dynamic Registration */ +static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; +#endif + +#ifdef AUTH_MODE_CERT +/* public cert file name of certificate device */ +static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; +/* private key file name of certificate device */ +static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; +#else +/* device secret of PSK device */ +static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; +#endif + +#ifdef GATEWAY_ENABLED +/* sub-device product id */ +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +/* sub-device device name */ +static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +#endif + +static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) +{ + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; +} + +#endif + +int HAL_SetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID); // set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME); // set dev name + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // set dev key file name +#else + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET); // set dev secret +#endif + +#else + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +int HAL_GetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID); // get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME); // get dev name + +#ifdef DEV_DYN_REG_ENABLED + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET); // get product ID +#endif + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // get dev key file name +#else + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET); // get dev secret +#endif + +#else + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +#ifdef GATEWAY_ENABLED +int HAL_GetGwDevInfo(void *pgwDeviceInfo) +{ + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info)); // get gw dev info + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + +#else + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_OS_freertos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c similarity index 59% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_OS_freertos.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c index 83127940..ab69962d 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_OS_freertos.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_OS_freertos.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -12,14 +12,15 @@ * limitations under the License. * */ +#include #include #include -#include -#include "qcloud_iot_import.h" #include "freertos/FreeRTOS.h" #include "freertos/semphr.h" #include "freertos/task.h" +#include "qcloud_iot_export_error.h" +#include "qcloud_iot_import.h" //#define PLATFORM_HAS_CMSIS @@ -28,17 +29,16 @@ #include "stm32l4xx_hal.h" #endif -//TODO platform dependant +// TODO platform dependant void HAL_SleepMs(_IN_ uint32_t ms) { - TickType_t ticks = ms / portTICK_PERIOD_MS; + TickType_t ticks = ms / portTICK_PERIOD_MS; - vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ + vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ - return ; + return; } - void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; @@ -53,7 +53,7 @@ void HAL_Printf(_IN_ const char *fmt, ...) int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) { va_list args; - int rc; + int rc; va_start(args, fmt); rc = vsnprintf(str, len, fmt, args); @@ -67,21 +67,20 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v return vsnprintf(str, len, format, ap); } - void *HAL_Malloc(_IN_ uint32_t size) { - return pvPortMalloc( size); + return pvPortMalloc(size); } void HAL_Free(_IN_ void *ptr) { - vPortFree(ptr); + if (ptr) + vPortFree(ptr); } - - void *HAL_MutexCreate(void) { +#ifdef MULTITHREAD_ENABLED SemaphoreHandle_t mutex = xSemaphoreCreateMutex(); if (NULL == mutex) { HAL_Printf("%s: xSemaphoreCreateMutex failed\n", __FUNCTION__); @@ -89,113 +88,142 @@ void *HAL_MutexCreate(void) } return mutex; +#else + return (void *)0xFFFFFFFF; +#endif } void HAL_MutexDestroy(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED if (xSemaphoreTake(mutex, 0) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); } vSemaphoreDelete(mutex); +#else + return; +#endif } void HAL_MutexLock(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED if (!mutex) { HAL_Printf("%s: invalid mutex\n", __FUNCTION__); - return ; + return; } - + if (xSemaphoreTake(mutex, portMAX_DELAY) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); - return ; + return; } +#else + return; +#endif } int HAL_MutexTryLock(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED if (!mutex) { HAL_Printf("%s: invalid mutex\n", __FUNCTION__); return -1; } - + if (xSemaphoreTake(mutex, 0) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); return -1; } - - return 0; -} + return 0; +#else + return 0; +#endif +} void HAL_MutexUnlock(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED if (!mutex) { HAL_Printf("%s: invalid mutex\n", __FUNCTION__); - return ; + return; } if (xSemaphoreGive(mutex) != pdTRUE) { HAL_Printf("%s: xSemaphoreGive failed\n", __FUNCTION__); - return ; + return; } +#else + return; +#endif } +#ifdef MULTITHREAD_ENABLED + +// platform-dependant thread routine/entry function +static void _HAL_thread_func_wrapper_(void *ptr) +{ + ThreadParams *params = (ThreadParams *)ptr; + + params->thread_func(params->user_arg); + + vTaskDelete(NULL); +} + +// platform-dependant thread create function +int HAL_ThreadCreate(ThreadParams *params) +{ + if (params == NULL) + return QCLOUD_ERR_INVAL; + + if (params->thread_name == NULL) { + HAL_Printf("thread name is required for FreeRTOS platform!\n"); + return QCLOUD_ERR_INVAL; + } + + int ret = xTaskCreate(_HAL_thread_func_wrapper_, params->thread_name, params->stack_size, (void *)params, + params->priority, (void *)¶ms->thread_id); + if (ret != pdPASS) { + HAL_Printf("%s: xTaskCreate failed: %d\n", __FUNCTION__, ret); + return QCLOUD_ERR_FAILURE; + } + + return QCLOUD_RET_SUCCESS; +} + +#endif + #if defined(PLATFORM_HAS_CMSIS) && defined(AT_TCP_ENABLED) -/* -* return void* threadId -*/ -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) -{ - osThreadId thread_t = (osThreadId)HAL_Malloc(sizeof(osThreadId)); - - osThreadDef(taskname, (os_pthread)fn, (osPriority)priority, 0, stack_size); - thread_t = osThreadCreate(osThread(taskname), arg); - if(NULL == thread_t){ - HAL_Printf("create thread fail\n\r"); - } - - return (void *)thread_t; -} - -int HAL_ThreadDestroy(void* threadId) -{ - return osThreadTerminate(threadId); -} - void *HAL_SemaphoreCreate(void) { - return (void *)osSemaphoreCreate(NULL, 1); + return (void *)osSemaphoreCreate(NULL, 1); } void HAL_SemaphoreDestroy(void *sem) { - osStatus ret; - - ret = osSemaphoreDelete ((osSemaphoreId)sem); - if(osOK != ret) - { - HAL_Printf("HAL_SemaphoreDestroy err, err:%d\n\r",ret); - } + osStatus ret; + + ret = osSemaphoreDelete((osSemaphoreId)sem); + if (osOK != ret) { + HAL_Printf("HAL_SemaphoreDestroy err, err:%d\n\r", ret); + } } void HAL_SemaphorePost(void *sem) { - osStatus ret; - - ret = osSemaphoreRelease ((osSemaphoreId) sem); + osStatus ret; - if(osOK != ret) - { - HAL_Printf("HAL_SemaphorePost err, err:%d\n\r",ret); - } + ret = osSemaphoreRelease((osSemaphoreId)sem); + + if (osOK != ret) { + HAL_Printf("HAL_SemaphorePost err, err:%d\n\r", ret); + } } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { - return osSemaphoreWait ((osSemaphoreId)sem, timeout_ms); - + return osSemaphoreWait((osSemaphoreId)sem, timeout_ms); } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_TCP_lwip.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c similarity index 75% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_TCP_lwip.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c index 8d5bb482..6d382eb7 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_TCP_lwip.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_TCP_lwip.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,23 +13,21 @@ * */ +#include #include #include -#include -#include "lwip/sockets.h" -#include "lwip/netdb.h" #include "lwip/inet.h" - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" -#include "qcloud_iot_export_error.h" +#include "lwip/netdb.h" +#include "lwip/sockets.h" #include "qcloud_iot_common.h" +#include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" /* lwIP socket handle start from 0 */ #define LWIP_SOCKET_FD_SHIFT 3 - static uint32_t _time_left(uint32_t t_end, uint32_t t_now) { uint32_t t_left; @@ -45,17 +43,17 @@ static uint32_t _time_left(uint32_t t_end, uint32_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; - int fd = 0; + int ret; + struct addrinfo hints, *addr_list, *cur; + int fd = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); memset(&hints, 0x00, sizeof(hints)); - hints.ai_family = AF_UNSPEC; + hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + hints.ai_protocol = IPPROTO_TCP; ret = getaddrinfo(host, port_str, &hints, &addr_list); if (ret) { @@ -64,21 +62,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } + fd = (int)socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd + LWIP_SOCKET_FD_SHIFT; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd + LWIP_SOCKET_FD_SHIFT; + break; + } - close( fd ); - ret = 0; + close(fd); + ret = 0; } if (ret == 0) { @@ -96,7 +92,6 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) return (uintptr_t)ret; } - int HAL_TCP_Disconnect(uintptr_t fd) { int rc; @@ -104,34 +99,33 @@ int HAL_TCP_Disconnect(uintptr_t fd) fd -= LWIP_SOCKET_FD_SHIFT; /* Shutdown both send and receive operations. */ - rc = shutdown((int) fd, 2); - if (0 != rc) { - Log_e("shutdown error: %s", strerror(errno)); + rc = shutdown((int)fd, 2); + if (0 != rc) { + Log_e("shutdown error: %s", strerror(errno)); return -1; } - rc = close((int) fd); + rc = close((int)fd); if (0 != rc) { - Log_e("closesocket error: %s", strerror(errno)); + Log_e("closesocket error: %s", strerror(errno)); return -1; } return 0; } - int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len) { - int ret; + int ret; uint32_t len_sent; uint32_t t_end, t_left; - fd_set sets; + fd_set sets; fd -= LWIP_SOCKET_FD_SHIFT; - t_end = HAL_GetTimeMs() + timeout_ms; + t_end = HAL_GetTimeMs() + timeout_ms; len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ + ret = 1; /* send one time if timeout_ms is value 0 */ do { t_left = _time_left(t_end, HAL_GetTimeMs()); @@ -142,7 +136,7 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t FD_ZERO(&sets); FD_SET(fd, &sets); - timeout.tv_sec = t_left / 1000; + timeout.tv_sec = t_left / 1000; timeout.tv_usec = (t_left % 1000) * 1000; ret = select(fd + 1, NULL, &sets, NULL, &timeout); @@ -163,13 +157,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -184,8 +177,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -196,32 +189,30 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t return len_sent > 0 ? QCLOUD_RET_SUCCESS : ret; } - int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *read_len) { - int ret, err_code; - uint32_t len_recv; - uint32_t t_end, t_left; - fd_set sets; + int ret, err_code; + uint32_t len_recv; + uint32_t t_end, t_left; + fd_set sets; struct timeval timeout; - fd -= LWIP_SOCKET_FD_SHIFT; - t_end = HAL_GetTimeMs() + timeout_ms; + t_end = HAL_GetTimeMs() + timeout_ms; len_recv = 0; err_code = 0; do { t_left = _time_left(t_end, HAL_GetTimeMs()); if (0 == t_left) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } FD_ZERO(&sets); FD_SET(fd, &sets); - timeout.tv_sec = t_left / 1000; + timeout.tv_sec = t_left / 1000; timeout.tv_usec = (t_left % 1000) * 1000; ret = select(fd + 1, &sets, NULL, NULL, &timeout); @@ -231,25 +222,25 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou len_recv += ret; } else if (0 == ret) { struct sockaddr_in peer; - socklen_t sLen = sizeof(peer); - int peer_port = 0; - getpeername(fd, (struct sockaddr*)&peer, &sLen); + socklen_t sLen = sizeof(peer); + int peer_port = 0; + getpeername(fd, (struct sockaddr *)&peer, &sLen); peer_port = ntohs(peer.sin_port); /* reduce log print due to frequent log server connect/disconnect */ if (peer_port == LOG_UPLOAD_SERVER_PORT) - UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); + UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } - Log_e("recv error: %s", strerror(errno)); + } + Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } @@ -257,7 +248,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } else { - Log_e("select-recv error: %s", strerror(errno)); + Log_e("select-recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Timer_freertos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c similarity index 54% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Timer_freertos.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c index c5a93bdd..2e1e0263 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_Timer_freertos.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_Timer_freertos.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,18 +17,19 @@ extern "C" { #endif +#include #include #include -#include -#include +#include + #include "qcloud_iot_import.h" #define PLATFORM_HAS_TIME_FUNCS //#define PLATFORM_HAS_CMSIS #ifdef PLATFORM_HAS_TIME_FUNCS -#include #include +#include #endif #ifdef PLATFORM_HAS_CMSIS @@ -36,79 +37,73 @@ extern "C" { #include "stm32l4xx_hal.h" #endif - -static char now_time_str[20] = {0}; - - uint32_t HAL_GetTimeMs(void) { #if defined PLATFORM_HAS_TIME_FUNCS - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec*1000 + tv.tv_usec/1000; - + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000 + tv.tv_usec / 1000; + #elif defined PLATFORM_HAS_CMSIS return HAL_GetTick(); -#endif +#endif } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - return HAL_GetTimeMs()/1000; + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) -{ +char *HAL_Timer_current(char *time_str) +{ #if defined PLATFORM_HAS_TIME_FUNCS struct timeval tv; - gettimeofday(&tv, NULL); - time_t now_time = tv.tv_sec; - struct tm tm_tmp = *localtime(&now_time); - strftime(now_time_str, 20, "%F %T", &tm_tmp); - return now_time_str; -#else - long time_sec; - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%ld", time_sec); - return now_time_str; + gettimeofday(&tv, NULL); + time_t now_time = tv.tv_sec; + struct tm tm_tmp = *localtime(&now_time); + strftime(time_str, TIME_FORMAT_STR_LEN, "%F %T", &tm_tmp); + return time_str; +#else + long time_sec; + time_sec = HAL_Timer_current_sec(); + memset(time_str, 0, TIME_FORMAT_STR_LEN); + snprintf(time_str, TIME_FORMAT_STR_LEN, "%ld", time_sec); + return time_str; #endif } -bool HAL_Timer_expired(Timer *timer) +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout_ms; } -int HAL_Timer_remain(Timer *timer) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - return (int)(timer->end_time - HAL_GetTimeMs()); + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout * 1000; } -void HAL_Timer_init(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - timer->end_time = 0; + return (int)(timer->end_time - HAL_GetTimeMs()); +} + +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; } - #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_UDP_lwip.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c similarity index 70% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_UDP_lwip.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c index e56de9eb..d82aed2d 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_UDP_lwip.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/freertos/HAL_UDP_lwip.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,18 +13,17 @@ * */ +#include #include #include #include -#include -#include "lwip/sockets.h" -#include "lwip/netdb.h" #include "lwip/inet.h" - -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" +#include "lwip/netdb.h" +#include "lwip/sockets.h" #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" #ifdef COAP_COMM_ENABLED @@ -33,41 +32,41 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) { -#define NETWORK_ADDR_LEN (16) +#define NETWORK_ADDR_LEN (16) - int ret; - struct addrinfo hints, *addr_list, *cur; - int fd = 0; + int ret; + struct addrinfo hints, *addr_list, *cur; + int fd = 0; - char port_str[6] = {0}; + char port_str[6] = {0}; HAL_Snprintf(port_str, 6, "%d", port); memset((char *)&hints, 0x00, sizeof(hints)); hints.ai_socktype = SOCK_DGRAM; - hints.ai_family = AF_INET; + hints.ai_family = AF_INET; hints.ai_protocol = IPPROTO_UDP; Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd + LWIP_SOCKET_FD_SHIFT; - break; - } + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd + LWIP_SOCKET_FD_SHIFT; + break; + } - close(fd); - ret = 0; + close(fd); + ret = 0; } if (0 == ret) { @@ -85,21 +84,21 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) void HAL_UDP_Disconnect(uintptr_t fd) { - long socket_id = -1; + long socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; close(socket_id); } int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datalen) { - int rc = -1; - long socket_id = -1; + int rc = -1; + long socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; - rc = send(socket_id, (char *)p_data, (int)datalen, 0); + rc = send(socket_id, (char *)p_data, (int)datalen, 0); if (-1 == rc) { return -1; } @@ -109,24 +108,24 @@ int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datale int HAL_UDP_Read(uintptr_t fd, unsigned char *p_data, unsigned int datalen) { - long socket_id = -1; - int count = -1; + long socket_id = -1; + int count = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; - count = (int)read(socket_id, p_data, datalen); + count = (int)read(socket_id, p_data, datalen); return count; } int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datalen, unsigned int timeout_ms) { - int ret; - struct timeval tv; - fd_set read_fds; - int socket_id = -1; + int ret; + struct timeval tv; + fd_set read_fds; + int socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; if (socket_id < 0) { @@ -143,12 +142,12 @@ int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datale /* Zero fds ready means we timed out */ if (ret == 0) { - return QCLOUD_ERR_SSL_READ_TIMEOUT; /* receive timeout */ + return QCLOUD_ERR_SSL_READ_TIMEOUT; /* receive timeout */ } if (ret < 0) { if (errno == EINTR) { - return -3; /* want read */ + return -3; /* want read */ } return QCLOUD_ERR_SSL_READ; /* receive failed */ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c new file mode 100644 index 00000000..73a2d68f --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_AT_UART_linux.c @@ -0,0 +1,237 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#ifdef AT_TCP_ENABLED + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "at_uart_hal.h" + +#ifdef AT_UART_RECV_IRQ +#include "at_client.h" +#include "utils_ringbuff.h" +static void at_uart_irq_recv(void *userContex); +#endif + +#define AT_UART_LINUX_DEV "/dev/ttyUSB0" + +static uart_dev_t sg_at_uart = { + .fd = -1, + .state = eUNUSED, + .config = {BAUDRATE_115200, DATA_WIDTH_8BIT, NO_PARITY, STOP_BITS_1, FLOW_CONTROL_DISABLED, MODE_TX_RX}}; + +int HAL_AT_Uart_Init(void) +{ + struct termios t_opt; + speed_t baud; + + if (sg_at_uart.state == eOPENED) { + Log_w("%s already opened", AT_UART_LINUX_DEV); + return QCLOUD_ERR_FAILURE; + } + + if ((sg_at_uart.fd = open(AT_UART_LINUX_DEV, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { + Log_e("open at uart failed\r\n"); + return QCLOUD_ERR_FAILURE; + } + + switch (sg_at_uart.config.baud_rate) { + case BAUDRATE_9600: + baud = B9600; + break; + case BAUDRATE_115200: + baud = B115200; + break; + case BAUDRATE_921600: + baud = B921600; + break; + default: + baud = B115200; + break; + } + + /* set the serial port parameters */ + fcntl(sg_at_uart.fd, F_SETFL, 0); + + if (0 != tcgetattr(sg_at_uart.fd, &t_opt)) { + return QCLOUD_ERR_FAILURE; + } + + /* set the input and output baudrate*/ + if (0 != cfsetispeed(&t_opt, baud)) { + return QCLOUD_ERR_FAILURE; + } + + if (0 != cfsetospeed(&t_opt, baud)) { + return QCLOUD_ERR_FAILURE; + } + + /* 8N1, flow control, etc. */ + t_opt.c_cflag |= (CLOCAL | CREAD); + if (sg_at_uart.config.parity == NO_PARITY) { + t_opt.c_cflag &= ~PARENB; + } + if (sg_at_uart.config.stop_bits == STOP_BITS_1) { + t_opt.c_cflag &= ~CSTOPB; + } else { + t_opt.c_cflag |= CSTOPB; + } + t_opt.c_cflag &= ~CSIZE; + switch (sg_at_uart.config.data_width) { + case DATA_WIDTH_5BIT: + t_opt.c_cflag |= CS5; + break; + case DATA_WIDTH_6BIT: + t_opt.c_cflag |= CS6; + break; + case DATA_WIDTH_7BIT: + t_opt.c_cflag |= CS7; + break; + case DATA_WIDTH_8BIT: + t_opt.c_cflag |= CS8; + break; + default: + t_opt.c_cflag |= CS8; + break; + } + t_opt.c_lflag &= ~(ECHO | ECHOE | ISIG | ICANON); + + /** + * AT is going to use a binary protocol, so make sure to + * turn off any CR/LF translation and the like. + */ + t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); + + t_opt.c_oflag &= ~OPOST; + t_opt.c_cc[VMIN] = 0; + t_opt.c_cc[VTIME] = 5; + if (0 != tcsetattr(sg_at_uart.fd, TCSANOW, &t_opt)) { + return QCLOUD_ERR_FAILURE; + } + + sg_at_uart.state = eOPENED; + + /* clear uart buffer */ + // Log_e("open at uart 1\r\n"); + // read_and_discard_all_data(sg_at_uart.fd); + // Log_e("open at uart 2\r\n"); + +#if defined(AT_UART_RECV_IRQ) && defined(MULTITHREAD_ENABLED) + // START THERAD + int result; + ThreadParams thread_params = {0}; + thread_params.thread_func = at_uart_irq_recv; + thread_params.thread_name = "at_uart_isr_thread"; + thread_params.user_arg = NULL; + thread_params.stack_size = 6144; + thread_params.priority = 0; + + result = HAL_ThreadCreate(&thread_params); + if (QCLOUD_RET_SUCCESS == result) { + Log_d("create uart_irq_recv thread success!"); + } else { + Log_e("create uart_irq_recv thread fail!"); + } +#endif + + return QCLOUD_RET_SUCCESS; +} + +int HAL_AT_Uart_Deinit(void) +{ + if (sg_at_uart.state == eOPENED) { + close(sg_at_uart.fd); + sg_at_uart.state = eCLOSED; + } + + return QCLOUD_RET_SUCCESS; +} + +int HAL_AT_Uart_Send(void *data, uint32_t size) +{ + uint32_t leftlen = size; + int ret = QCLOUD_RET_SUCCESS; + + if (sg_at_uart.state == eOPENED) { + while (leftlen > 0) { + ret = write(sg_at_uart.fd, (char *)data + size - leftlen, leftlen); + if (ret == -1) { + Log_e("write uart fd failed on error: %d.\r\n", errno); + ret = QCLOUD_ERR_FAILURE; + break; + } + leftlen -= ret; + } + } else { + Log_e("AT Uart uninitialized"); + ret = QCLOUD_ERR_FAILURE; + } + + return (ret == QCLOUD_ERR_FAILURE) ? QCLOUD_ERR_FAILURE : size; +} + +int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) +{ + int readlen; + int ret; + + if (sg_at_uart.state == eOPENED) { + if ((readlen = read(sg_at_uart.fd, data, expect_size)) == -1) { + ret = QCLOUD_ERR_FAILURE; + } + + if (recv_size) { + *recv_size = readlen; + } + + } else { + Log_e("AT Uart uninitialized"); + ret = QCLOUD_ERR_FAILURE; + } + + return ret; +} + +// simulate IRQ +#ifdef AT_UART_RECV_IRQ +extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); +static void at_uart_irq_recv(void *userContex) +{ + uint8_t data[64]; + int readlen; + while (1) { + if ((readlen = read(sg_at_uart.fd, data, sizeof(data))) == -1) { + continue; + } + at_client_uart_rx_isr_cb(data, readlen); // push + } +} +#endif + +#endif \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c new file mode 100644 index 00000000..4c9c1547 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Device_linux.c @@ -0,0 +1,481 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/* Enable this macro (also control by cmake) to use static string buffer to store device info */ +/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ +//#define DEBUG_DEV_INFO_USED + +#ifdef DEBUG_DEV_INFO_USED +/* product Id */ +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; + +/* device name */ +static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; + +#ifdef DEV_DYN_REG_ENABLED +/* product secret for device dynamic Registration */ +static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; +#endif + +#ifdef AUTH_MODE_CERT +/* public cert file name of certificate device */ +static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; +/* private key file name of certificate device */ +static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; +#else +/* device secret of PSK device */ +static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; +#endif + +#ifdef GATEWAY_ENABLED +/* sub-device product id */ +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +/* sub-device device name */ +static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +#endif + +static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) +{ + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; +} + +int HAL_SetDevInfoFile(const char *file_name) +{ + Log_w("device info is not stored in file!!"); + + return QCLOUD_RET_SUCCESS; +} + +#else +/*device info manage example method*/ + +#include "lite-utils.h" + +#define MAX_DEV_INFO_FILE_LEN 1024 +#define MAX_CONFIG_FILE_NAME 256 + +#define KEY_AUTH_MODE "auth_mode" +#define KEY_PRODUCT_ID "productId" +#define KEY_PRODUCT_SECRET "productSecret" +#define KEY_DEV_NAME "deviceName" +#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" +#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" +#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" +#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" +#define KEY_SUBDEV_NAME "subDev.sub_devName" + +#define STR_DEV_INFO "key_deviceinfo" +#define STR_DEV_SECRET "deviceSecret" +#define STR_DEV_CERT "cert_deviceinfo" +#define STR_DEV_CERT_FILE "devCertFile" +#define STR_DEV_KEY_FILE "devPrivateKeyFile" + +#define MAX_SIZE_OF_DEVICE_INFO_FILE 128 +static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE + 1] = {"./device_info.json"}; + +int HAL_SetDevInfoFile(const char *file_name) +{ + if (file_name == NULL || strlen(file_name) > MAX_SIZE_OF_DEVICE_INFO_FILE) { + Log_e("illegal device info file name!"); + return QCLOUD_ERR_INVAL; + } + + /* check if file exists */ + if (access(file_name, 0)) { + Log_e("device info file \"%s\" not existed", file_name); + return QCLOUD_ERR_FAILURE; + } + + memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); + strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); + return QCLOUD_RET_SUCCESS; +} + +int HAL_GetDevInfoFromFile(const char *file_name, void *dev_info) +{ + FILE * fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; + char * authMode = NULL; + char * productId = NULL; + char * devName = NULL; +#ifdef DEV_DYN_REG_ENABLED + char * productSecret = NULL; +#endif +#ifdef AUTH_MODE_CERT + char * devCrtFileName = NULL; + char * devKeyFileName = NULL; +#else + char *devSecret = NULL; +#endif + char * JsonDoc = NULL; + + DeviceInfo *pDevInfo = (DeviceInfo *)dev_info; + + fp = fopen(file_name, "r"); + if (NULL == fp) { + Log_e("open device info file \"%s\" failed", file_name); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", file_name); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + JsonDoc = (char *)HAL_Malloc(len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + memset(JsonDoc, 0, len + 10); + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*Get device info*/ + authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); + productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); + devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); + + if (NULL == authMode || NULL == productId || NULL == devName) { + Log_e("read device data from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + +#ifdef DEV_DYN_REG_ENABLED + productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); + if (NULL == productSecret) { + Log_e("read product secret from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); +#endif + +#ifdef AUTH_MODE_CERT + devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); + devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); + if (NULL == devCrtFileName || NULL == devKeyFileName) { + Log_e("read cert file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + // Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, + // devCrtFileName, devKeyFileName); +#else + devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); + if (NULL == devSecret) { + Log_e("read device secret from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); + // Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); +#endif + +exit: + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif +#ifdef AUTH_MODE_CERT + HAL_Free(devCrtFileName); + HAL_Free(devKeyFileName); +#else + HAL_Free(devSecret); +#endif + HAL_Free(JsonDoc); + + if (NULL != fp) { + fclose(fp); + } + + return ret; +} + +#ifdef GATEWAY_ENABLED +static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) +{ + FILE * fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; + char * productId = NULL; + char * devName = NULL; + char * JsonDoc = NULL; + + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { + Log_e("open device info file \"%s\" failed", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + JsonDoc = (char *)HAL_Malloc(len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } + + /*Get sub device info*/ + productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); + devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); + + if (NULL == productId || NULL == devName) { + Log_e("read sub device data from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + // Log_d("pid:%s, devName:%s", productId, devName); + +exit: + HAL_Free(productId); + HAL_Free(devName); + HAL_Free(JsonDoc); + + if (NULL != fp) { + fclose(fp); + } + + return ret; +} +#endif + +static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) +{ + char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; + int32_t remain_size = MAX_DEV_INFO_FILE_LEN; + int32_t rc_of_snprintf = 0; + int32_t wlen; + FILE * fp; + + rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); + remain_size -= rc_of_snprintf; + + // auth_mode +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n", KEY_AUTH_MODE, "CERT"); + remain_size -= rc_of_snprintf; +#else + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n", KEY_AUTH_MODE, "KEY"); + remain_size -= rc_of_snprintf; +#endif + + // product id, device name + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", + KEY_PRODUCT_ID, pDevInfo->product_id, KEY_DEV_NAME, pDevInfo->device_name); + remain_size -= rc_of_snprintf; + + // product secret +#ifdef DEV_DYN_REG_ENABLED + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n", KEY_PRODUCT_SECRET, + pDevInfo->product_secret); + remain_size -= rc_of_snprintf; +#endif + + // key device info or cert device info +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); + remain_size -= rc_of_snprintf; + rc_of_snprintf = + HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", STR_DEV_CERT_FILE, + pDevInfo->dev_cert_file_name, STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name); + remain_size -= rc_of_snprintf; +#else + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\"\n}", STR_DEV_SECRET, + pDevInfo->device_secret); + remain_size -= rc_of_snprintf; +#endif + + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); + remain_size -= rc_of_snprintf; + + Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); + + fp = fopen(sg_device_info_file, "w"); + if (NULL == fp) { + Log_e("open file %s failed", sg_device_info_file); + return QCLOUD_ERR_FAILURE; + } + + wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); + if (wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { + Log_e("write len less than needed"); + } + fclose(fp); + return QCLOUD_RET_SUCCESS; +} +#endif + +int HAL_SetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID); // set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME); // set dev name + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // set dev key file name +#else + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET); // set dev secret +#endif + +#else + ret = iot_save_devinfo_to_json_file(devInfo); +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +int HAL_GetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID); // get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME); // get dev name + +#ifdef DEV_DYN_REG_ENABLED + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET); // get product ID +#endif + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // get dev key file name +#else + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET); // get dev secret +#endif + +#else + // get devinfo from file + ret = HAL_GetDevInfoFromFile(sg_device_info_file, devInfo); +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +#ifdef GATEWAY_ENABLED +int HAL_GetGwDevInfo(void *pgwDeviceInfo) +{ + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info)); // get gw dev info + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + +#else + ret = HAL_GetDevInfoFromFile(sg_device_info_file, &(gwDevInfo->gw_info)); + if (ret != QCLOUD_RET_SUCCESS) { + return QCLOUD_ERR_FAILURE; + } + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Log_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c similarity index 79% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Log_linux.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c index ef9a0d06..cd3624fb 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Log_linux.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Log_linux.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -16,9 +16,9 @@ #include #include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" #ifdef LOG_UPLOAD @@ -26,62 +26,59 @@ size_t HAL_Log_Save(const char *log, size_t wLen) { - FILE *fp; - size_t len; + FILE * fp; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { + if ((fp = fopen(LOG_SAVE_FILE_PATH, "a+")) == NULL) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + len = fwrite((void *)log, 1, wLen, fp); Log_d("write %d of %d to log file", len, wLen); - + fclose(fp); return len; } - -size_t HAL_Log_Read (char *buff, size_t rLen) +size_t HAL_Log_Read(char *buff, size_t rLen) { - FILE *fp; - size_t len; + FILE * fp; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + if ((fp = fopen(LOG_SAVE_FILE_PATH, "r")) == NULL) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; } len = fread((void *)buff, 1, rLen, fp); Log_d("read %d of %d from log file", len, rLen); - + fclose(fp); return len; } - int HAL_Log_Del(void) { return remove(LOG_SAVE_FILE_PATH); } - size_t HAL_Log_Get_Size(void) { - long length; + long length; FILE *fp; /* check if file exists */ if (access(LOG_SAVE_FILE_PATH, 0)) return 0; - - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + + if ((fp = fopen(LOG_SAVE_FILE_PATH, "r")) == NULL) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + fseek(fp, 0L, SEEK_END); length = ftell(fp); fclose(fp); @@ -92,4 +89,3 @@ size_t HAL_Log_Get_Size(void) } #endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_OS_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c similarity index 52% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_OS_linux.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c index abe8293f..e74f654c 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_OS_linux.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_OS_linux.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,70 +13,86 @@ * */ -#include -#include -#include +#include #include - #include #include -#include - +#include +#include +#include #include #include #include +#include "qcloud_iot_export_error.h" #include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" - void *HAL_MutexCreate(void) { - int err_num; +#ifdef MULTITHREAD_ENABLED + int err_num; pthread_mutex_t *mutex = (pthread_mutex_t *)HAL_Malloc(sizeof(pthread_mutex_t)); if (NULL == mutex) { return NULL; } if (0 != (err_num = pthread_mutex_init(mutex, NULL))) { - HAL_Printf("%s: create mutex failed\n", __FUNCTION__); + HAL_Printf("%s: create mutex failed\n", __FUNCTION__); HAL_Free(mutex); return NULL; } return mutex; +#else + return (void *)0xFFFFFFFF; +#endif } void HAL_MutexDestroy(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED int err_num; if (0 != (err_num = pthread_mutex_destroy((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: destroy mutex failed\n", __FUNCTION__); + HAL_Printf("%s: destroy mutex failed\n", __FUNCTION__); } HAL_Free(mutex); +#else + return; +#endif } void HAL_MutexLock(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED int err_num; - if (0 != (err_num = pthread_mutex_lock((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: lock mutex failed\n", __FUNCTION__); + if (0 != (err_num = pthread_mutex_lock((pthread_mutex_t *)mutex))) { + HAL_Printf("%s: lock mutex failed\n", __FUNCTION__); } +#else + return; +#endif } int HAL_MutexTryLock(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED return pthread_mutex_trylock((pthread_mutex_t *)mutex); - //return 0; +#else + return 0; +#endif } void HAL_MutexUnlock(_IN_ void *mutex) { +#ifdef MULTITHREAD_ENABLED int err_num; - if (0 != (err_num = pthread_mutex_unlock((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: unlock mutex failed\n", __FUNCTION__); + if (0 != (err_num = pthread_mutex_unlock((pthread_mutex_t *)mutex))) { + HAL_Printf("%s: unlock mutex failed\n", __FUNCTION__); } +#else + return; +#endif } void *HAL_Malloc(_IN_ uint32_t size) @@ -86,7 +102,8 @@ void *HAL_Malloc(_IN_ uint32_t size) void HAL_Free(_IN_ void *ptr) { - free(ptr); + if (ptr) + free(ptr); } void HAL_Printf(_IN_ const char *fmt, ...) @@ -103,7 +120,7 @@ void HAL_Printf(_IN_ const char *fmt, ...) int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) { va_list args; - int rc; + int rc; va_start(args, fmt); rc = vsnprintf(str, len, fmt, args); @@ -118,9 +135,9 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v } uint32_t HAL_GetTimeMs(void) -{ +{ struct timeval time_val = {0}; - uint32_t time_ms; + uint32_t time_ms; gettimeofday(&time_val, NULL); time_ms = time_val.tv_sec * 1000 + time_val.tv_usec / 1000; @@ -133,90 +150,102 @@ void HAL_SleepMs(_IN_ uint32_t ms) usleep(1000 * ms); } +#ifdef MULTITHREAD_ENABLED + +// platform-dependant thread routine/entry function +static void *_HAL_thread_func_wrapper_(void *ptr) +{ + ThreadParams *params = (ThreadParams *)ptr; + + params->thread_func(params->user_arg); + + pthread_detach(pthread_self()); + pthread_exit(0); + return NULL; +} + +// platform-dependant thread create function +int HAL_ThreadCreate(ThreadParams *params) +{ + if (params == NULL) + return QCLOUD_ERR_INVAL; + + int ret = pthread_create((pthread_t *)¶ms->thread_id, NULL, _HAL_thread_func_wrapper_, (void *)params); + if (ret) { + HAL_Printf("%s: pthread_create failed: %d\n", __FUNCTION__, ret); + return QCLOUD_ERR_FAILURE; + } + + return QCLOUD_RET_SUCCESS; +} + +void HAL_ThreadExit(void) {} + +#endif + #ifdef AT_TCP_ENABLED void HAL_DelayMs(_IN_ uint32_t ms) { - usleep(1000 * ms); -} - -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) -{ - pthread_t *thread_t = (pthread_t *)HAL_Malloc(sizeof(unsigned long int)); - return pthread_create(thread_t, NULL, fn, arg) ? NULL : (void*)thread_t; -} - -int HAL_ThreadDestroy(void* threadId) -{ - int ret; - - if(0 == pthread_cancel(*((pthread_t*)threadId))){ - ret = QCLOUD_RET_SUCCESS; - }else{ - ret = QCLOUD_ERR_FAILURE; - } - - HAL_Free(threadId); - return ret; + usleep(1000 * ms); } void *HAL_SemaphoreCreate(void) { - sem_t *sem = (sem_t *)malloc(sizeof(sem_t)); - if (NULL == sem) { - return NULL; - } + sem_t *sem = (sem_t *)malloc(sizeof(sem_t)); + if (NULL == sem) { + return NULL; + } - if (0 != sem_init(sem, 0, 0)) { - free(sem); - return NULL; - } + if (0 != sem_init(sem, 0, 0)) { + free(sem); + return NULL; + } - return sem; + return sem; } void HAL_SemaphoreDestroy(void *sem) { - sem_destroy((sem_t *)sem); - free(sem); + sem_destroy((sem_t *)sem); + free(sem); } void HAL_SemaphorePost(void *sem) { - sem_post((sem_t *)sem); + sem_post((sem_t *)sem); } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { #define PLATFORM_WAIT_INFINITE (~0) - if (PLATFORM_WAIT_INFINITE == timeout_ms) { - sem_wait(sem); - return QCLOUD_RET_SUCCESS; - } - else { - struct timespec ts; - int s; - /* Restart if interrupted by handler */ - do { - if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { - return QCLOUD_ERR_FAILURE; - } + if (PLATFORM_WAIT_INFINITE == timeout_ms) { + sem_wait(sem); + return QCLOUD_RET_SUCCESS; + } else { + struct timespec ts; + int s; + /* Restart if interrupted by handler */ + do { + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { + return QCLOUD_ERR_FAILURE; + } - s = 0; - ts.tv_nsec += (timeout_ms % 1000) * 1000000; - if (ts.tv_nsec >= 1000000000) { - ts.tv_nsec -= 1000000000; - s = 1; - } + s = 0; + ts.tv_nsec += (timeout_ms % 1000) * 1000000; + if (ts.tv_nsec >= 1000000000) { + ts.tv_nsec -= 1000000000; + s = 1; + } - ts.tv_sec += timeout_ms / 1000 + s; + ts.tv_sec += timeout_ms / 1000 + s; - } while (((s = sem_timedwait(sem, &ts)) != 0) && errno == EINTR); + } while (((s = sem_timedwait(sem, &ts)) != 0) && errno == EINTR); - return s ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; - } -#undef PLATFORM_WAIT_INFINITE + return s ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; + } +#undef PLATFORM_WAIT_INFINITE } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_TCP_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c similarity index 79% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_TCP_linux.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c index 74528f73..e02538ba 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_TCP_linux.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_TCP_linux.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,28 +13,28 @@ * */ +#include +#include +#include +#include +#include +#include #include #include -#include -#include #include #include +#include #include -#include -#include -#include -#include -#include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" -#include "qcloud_iot_export_error.h" #include "qcloud_iot_common.h" +#include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" static uint64_t _linux_get_time_ms(void) { - struct timeval tv = { 0 }; - uint64_t time_ms; + struct timeval tv = {0}; + uint64_t time_ms; gettimeofday(&tv, NULL); @@ -58,20 +58,20 @@ static uint64_t _linux_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; - int fd = 0; + int ret; + struct addrinfo hints, *addr_list, *cur; + int fd = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); memset(&hints, 0x00, sizeof(hints)); - hints.ai_family = AF_UNSPEC; + hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + hints.ai_protocol = IPPROTO_TCP; ret = getaddrinfo(host, port_str, &hints, &addr_list); - if (ret) { + if (ret) { if (ret == EAI_SYSTEM) Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); else @@ -80,21 +80,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } + fd = (int)socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } - close( fd ); - ret = 0; + close(fd); + ret = 0; } if (0 == ret) { @@ -117,15 +115,15 @@ int HAL_TCP_Disconnect(uintptr_t fd) int rc; /* Shutdown both send and receive operations. */ - rc = shutdown((int) fd, 2); - if (0 != rc) { - Log_e("shutdown error: %s", strerror(errno)); + rc = shutdown((int)fd, 2); + if (0 != rc) { + Log_e("shutdown error: %s", strerror(errno)); return -1; } - rc = close((int) fd); + rc = close((int)fd); if (0 != rc) { - Log_e("closesocket error: %s", strerror(errno)); + Log_e("closesocket error: %s", strerror(errno)); return -1; } @@ -134,15 +132,15 @@ int HAL_TCP_Disconnect(uintptr_t fd) int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len) { - int ret; + int ret; uint32_t len_sent; uint64_t t_end, t_left; - fd_set sets; + fd_set sets; - t_end = _linux_get_time_ms() + timeout_ms; + t_end = _linux_get_time_ms() + timeout_ms; len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ + /* send one time if timeout_ms is value 0 */ do { t_left = _linux_time_left(t_end, _linux_get_time_ms()); @@ -152,7 +150,7 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t FD_ZERO(&sets); FD_SET(fd, &sets); - timeout.tv_sec = t_left / 1000; + timeout.tv_sec = t_left / 1000; timeout.tv_usec = (t_left % 1000) * 1000; ret = select(fd + 1, NULL, &sets, NULL, &timeout); @@ -173,13 +171,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -194,8 +191,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -208,13 +205,13 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *read_len) { - int ret, err_code; - uint32_t len_recv; - uint64_t t_end, t_left; - fd_set sets; + int ret, err_code; + uint32_t len_recv; + uint64_t t_end, t_left; + fd_set sets; struct timeval timeout; - t_end = _linux_get_time_ms() + timeout_ms; + t_end = _linux_get_time_ms() + timeout_ms; len_recv = 0; err_code = 0; @@ -228,7 +225,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou FD_ZERO(&sets); FD_SET(fd, &sets); - timeout.tv_sec = t_left / 1000; + timeout.tv_sec = t_left / 1000; timeout.tv_usec = (t_left % 1000) * 1000; ret = select(fd + 1, &sets, NULL, NULL, &timeout); @@ -238,9 +235,9 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou len_recv += ret; } else if (0 == ret) { struct sockaddr_in peer; - socklen_t sLen = sizeof(peer); - int peer_port = 0; - getpeername(fd, (struct sockaddr*)&peer, &sLen); + socklen_t sLen = sizeof(peer); + int peer_port = 0; + getpeername(fd, (struct sockaddr *)&peer, &sLen); peer_port = ntohs(peer.sin_port); /* reduce log print due to frequent log server connect/disconnect */ @@ -248,14 +245,14 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } + } Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Timer_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c similarity index 67% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Timer_linux.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c index b07481e1..cac52f59 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_Timer_linux.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_Timer_linux.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -16,64 +16,72 @@ #ifdef __cplusplus extern "C" { #endif - -#include + #include - +#include + #include "qcloud_iot_import.h" -static char now_time_str[20] = {0}; - -bool HAL_Timer_expired(Timer *timer) { +bool HAL_Timer_expired(Timer *timer) +{ struct timeval now, res; gettimeofday(&now, NULL); timersub(&timer->end_time, &now, &res); return res.tv_sec < 0 || (res.tv_sec == 0 && res.tv_usec <= 0); } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ struct timeval now; gettimeofday(&now, NULL); struct timeval interval = {timeout_ms / 1000, (timeout_ms % 1000) * 1000}; timeradd(&now, &interval, &timer->end_time); } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ struct timeval now; gettimeofday(&now, NULL); struct timeval interval = {timeout, 0}; timeradd(&now, &interval, &timer->end_time); } -int HAL_Timer_remain(Timer *timer) { +int HAL_Timer_remain(Timer *timer) +{ struct timeval now, res; gettimeofday(&now, NULL); timersub(&timer->end_time, &now, &res); return (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000; } -void HAL_Timer_init(Timer *timer) { - timer->end_time = (struct timeval) {0, 0}; +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = (struct timeval){0, 0}; } -char* HAL_Timer_current(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - time_t now_time = tv.tv_sec; +char *HAL_Timer_current(char *time_str) +{ + if (time_str == NULL) + return " "; - struct tm tm_tmp = *localtime(&now_time); - strftime(now_time_str, 20, "%F %T", &tm_tmp); + struct timeval tv; + gettimeofday(&tv, NULL); + time_t now_time = tv.tv_sec; - return now_time_str; + struct tm tm_tmp = *localtime(&now_time); + strftime(time_str, TIME_FORMAT_STR_LEN, "%F %T", &tm_tmp); + + return time_str; } -long HAL_Timer_current_sec(void) { - struct timeval tv; - gettimeofday(&tv, NULL); +long HAL_Timer_current_sec(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); - return tv.tv_sec; + return tv.tv_sec; } - + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_UDP_linux.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c similarity index 69% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_UDP_linux.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c index 82a6b5a1..2d22cc46 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/linux/HAL_UDP_linux.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/linux/HAL_UDP_linux.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,61 +13,61 @@ * */ +#include +#include +#include +#include +#include #include #include #include -#include #include #include -#include -#include -#include #include -#include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" #ifdef COAP_COMM_ENABLED uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) { -#define NETWORK_ADDR_LEN (16) +#define NETWORK_ADDR_LEN (16) - int ret; - struct addrinfo hints, *addr_list, *cur; - int fd = 0; + int ret; + struct addrinfo hints, *addr_list, *cur; + int fd = 0; - char port_str[6] = {0}; + char port_str[6] = {0}; HAL_Snprintf(port_str, 6, "%d", port); memset((char *)&hints, 0x00, sizeof(hints)); hints.ai_socktype = SOCK_DGRAM; - hints.ai_family = AF_INET; + hints.ai_family = AF_INET; hints.ai_protocol = IPPROTO_UDP; Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd; - break; - } + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd; + break; + } - close(fd); - ret = 0; + close(fd); + ret = 0; } if (0 == ret) { @@ -85,7 +85,7 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) void HAL_UDP_Disconnect(uintptr_t fd) { - long socket_id = -1; + long socket_id = -1; socket_id = (int)fd; close(socket_id); @@ -93,11 +93,11 @@ void HAL_UDP_Disconnect(uintptr_t fd) int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datalen) { - int rc = -1; - long socket_id = -1; + int rc = -1; + long socket_id = -1; socket_id = (int)fd; - rc = send(socket_id, (char *)p_data, (int)datalen, 0); + rc = send(socket_id, (char *)p_data, (int)datalen, 0); if (-1 == rc) { return -1; } @@ -107,21 +107,21 @@ int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datale int HAL_UDP_Read(uintptr_t fd, unsigned char *p_data, unsigned int datalen) { - long socket_id = -1; - int count = -1; + long socket_id = -1; + int count = -1; socket_id = (int)fd; - count = (int)read(socket_id, p_data, datalen); + count = (int)read(socket_id, p_data, datalen); return count; } int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datalen, unsigned int timeout_ms) { - int ret; - struct timeval tv; - fd_set read_fds; - int socket_id = -1; + int ret; + struct timeval tv; + fd_set read_fds; + int socket_id = -1; socket_id = (int)fd; @@ -139,12 +139,12 @@ int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datale /* Zero fds ready means we timed out */ if (ret == 0) { - return QCLOUD_ERR_SSL_READ_TIMEOUT; /* receive timeout */ + return QCLOUD_ERR_SSL_READ_TIMEOUT; /* receive timeout */ } if (ret < 0) { if (errno == EINTR) { - return -3; /* want read */ + return -3; /* want read */ } return QCLOUD_ERR_SSL_READ; /* receive failed */ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c new file mode 100644 index 00000000..d100b55c --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_AT_UART_nonos.c @@ -0,0 +1,73 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include +#include +#include +#include + +#include "at_client.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "stm32l4xx_hal.h" +#include "utils_ringbuff.h" + +#define HAL_AT_UART_IRQHandler USART1_IRQHandler +extern UART_HandleTypeDef huart1; +static UART_HandleTypeDef *pAtUart = &huart1; + +extern void AT_Uart_Init(void); +extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); + +#include "board.h" +/** + * @brief This function handles AT UART global interrupt,push recv char to ringbuff. + */ +void HAL_AT_UART_IRQHandler(void) +{ + uint8_t ch; + if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { + ch = (uint8_t)READ_REG(pAtUart->Instance->RDR) & 0xFF; + /*this callback for at_client*/ + at_client_uart_rx_isr_cb(&ch, 1); + HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + } + __HAL_UART_CLEAR_PEFLAG(pAtUart); +} + +/** + *pdata: pointer of data for send + *len: len of data to be sent + *return: the len of data send success + * @brief hal api for at data send + */ +int HAL_AT_Uart_Send(void *data, uint32_t size) +{ + if (HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) { + return size; + } else { + return 0; + } +} + +int HAL_AT_Uart_Init(void) +{ + AT_Uart_Init(); + return QCLOUD_RET_SUCCESS; +} + +int HAL_AT_Uart_Deinit(void) +{ + return QCLOUD_RET_SUCCESS; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c new file mode 100644 index 00000000..11c132dc --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Device_nonos.c @@ -0,0 +1,166 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/* Enable this macro (also control by cmake) to use static string buffer to store device info */ +/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ +#define DEBUG_DEV_INFO_USED + +#ifdef DEBUG_DEV_INFO_USED +/* product Id */ +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; + +/* device name */ +static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; + +#ifdef DEV_DYN_REG_ENABLED +/* product secret for device dynamic Registration */ +static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; +#endif + +#ifdef AUTH_MODE_CERT +/* public cert file name of certificate device */ +static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; +/* private key file name of certificate device */ +static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; +#else +/* device secret of PSK device */ +static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; +#endif + +#ifdef GATEWAY_ENABLED +/* sub-device product id */ +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +/* sub-device device name */ +static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +#endif + +static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) +{ + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; +} + +#endif + +int HAL_SetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID); // set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME); // set dev name + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // set dev key file name +#else + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET); // set dev secret +#endif + +#else + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +int HAL_GetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID); // get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME); // get dev name + +#ifdef DEV_DYN_REG_ENABLED + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET); // get product ID +#endif + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // get dev key file name +#else + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET); // get dev secret +#endif + +#else + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +#ifdef GATEWAY_ENABLED +int HAL_GetGwDevInfo(void *pgwDeviceInfo) +{ + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info)); // get gw dev info + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + +#else + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_OS_nonos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c similarity index 89% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_OS_nonos.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c index e8c37095..a5c20f5c 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_OS_nonos.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_OS_nonos.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,13 +13,13 @@ * */ +#include #include #include -#include + #include "qcloud_iot_import.h" #include "stm32l4xx_hal.h" - void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; @@ -34,7 +34,7 @@ void HAL_Printf(_IN_ const char *fmt, ...) int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) { va_list args; - int rc; + int rc; va_start(args, fmt); rc = vsnprintf(str, len, fmt, args); @@ -50,17 +50,18 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void HAL_SleepMs(_IN_ uint32_t ms) { - (void)HAL_Delay(ms); + (void)HAL_Delay(ms); } void HAL_DelayMs(_IN_ uint32_t ms) { - (void)HAL_Delay(ms); + (void)HAL_Delay(ms); } void HAL_Free(void *ptr) { - free(ptr); + if (ptr) + free(ptr); } void *HAL_Malloc(uint32_t size) @@ -87,4 +88,3 @@ void HAL_MutexUnlock(void *mutex) { return; } - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Timer_nonos.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c similarity index 55% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Timer_nonos.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c index 47fe2ed9..6c62aa11 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/nonos/HAL_Timer_nonos.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/nonos/HAL_Timer_nonos.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,76 +17,71 @@ extern "C" { #endif +#include #include #include -#include -#include +#include + #include "qcloud_iot_import.h" #include "stm32l4xx_hal.h" - static char now_time_str[20] = {0}; - uint32_t HAL_GetTimeMs(void) -{ +{ return HAL_GetTick(); } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - //return GetTimeStampByAt(NULL); - - return HAL_GetTimeMs()/1000; + // return GetTimeStampByAt(NULL); + + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) +char *HAL_Timer_current(void) { - long time_sec; - - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%d",time_sec); - - return now_time_str; + long time_sec; + + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%ld", time_sec); + + return now_time_str; } - - -bool HAL_Timer_expired(Timer *timer) +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) -{ - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; -} - -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout_ms; } -int HAL_Timer_remain(Timer *timer) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - return (int)(timer->end_time - HAL_GetTimeMs()); + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout * 1000; } -void HAL_Timer_init(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - timer->end_time = 0; + return (int)(timer->end_time - HAL_GetTimeMs()); +} + +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; } - #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c new file mode 100644 index 00000000..e51ac07b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Device_rtthread.c @@ -0,0 +1,165 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/* Enable this macro (also control by cmake) to use static string buffer to store device info */ +/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ +#define DEBUG_DEV_INFO_USED + +#ifdef DEBUG_DEV_INFO_USED +/* product Id */ +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; + +/* device name */ +static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; + +#ifdef DEV_DYN_REG_ENABLED +/* product secret for device dynamic Registration */ +static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; +#endif + +#ifdef AUTH_MODE_CERT +/* public cert file name of certificate device */ +static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; +/* private key file name of certificate device */ +static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; +#else +/* device secret of PSK device */ +static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; +#endif + +#ifdef GATEWAY_ENABLED +/* sub-device product id */ +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +/* sub-device device name */ +static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +#endif + +static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) +{ + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; +} + +#endif + +int HAL_SetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID); // set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME); // set dev name + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // set dev key file name +#else + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET); // set dev secret +#endif + +#else + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +int HAL_GetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID); // get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME); // get dev name + +#ifdef DEV_DYN_REG_ENABLED + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET); // get product ID +#endif + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // get dev key file name +#else + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET); // get dev secret +#endif + +#else + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +#ifdef GATEWAY_ENABLED +int HAL_GetGwDevInfo(void *pgwDeviceInfo) +{ + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info)); // get gw dev info + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + +#else + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c similarity index 69% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c index 4333f30f..fac836df 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_OS_rtthread.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -12,35 +12,32 @@ * limitations under the License. * */ +#include #include #include -#include -#include "rtconfig.h" -#include "qcloud_iot_import.h" + #include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "rtconfig.h" - -#define HAL_OS_LOG_MAXLEN 1024 +#define HAL_OS_LOG_MAXLEN 1024 static uint16_t g_mutex_count = 0; - - void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; - char log_buf[HAL_OS_LOG_MAXLEN]; - + char log_buf[HAL_OS_LOG_MAXLEN]; + va_start(args, fmt); rt_vsnprintf(log_buf, HAL_OS_LOG_MAXLEN, fmt, args); va_end(args); printf("%s", log_buf); } - int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) { va_list args; - int rc; + int rc; va_start(args, fmt); rc = vsnprintf(str, len, fmt, args); @@ -49,51 +46,44 @@ int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) return rc; } - int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap) { return vsnprintf(str, len, format, ap); } - void *HAL_MutexCreate(void) { - rt_mutex_t mutex; - char mutexName[RT_NAME_MAX]; + rt_mutex_t mutex; + char mutexName[RT_NAME_MAX]; - memset(mutexName, 0, RT_NAME_MAX); - HAL_Snprintf(mutexName, RT_NAME_MAX, "tmutex_%d", g_mutex_count++); - mutex = rt_mutex_create(mutexName, RT_IPC_FLAG_FIFO); + memset(mutexName, 0, RT_NAME_MAX); + HAL_Snprintf(mutexName, RT_NAME_MAX, "tmutex_%d", g_mutex_count++); + mutex = rt_mutex_create(mutexName, RT_IPC_FLAG_FIFO); if (NULL == mutex) { - HAL_Printf("create mutex failed"); - + HAL_Printf("create mutex failed"); } return mutex; - - } void HAL_MutexDestroy(_IN_ void *mutex) { - int err_num; + int err_num; - err_num = rt_mutex_delete((rt_mutex_t)mutex); + err_num = rt_mutex_delete((rt_mutex_t)mutex); - if (0 != err_num) - { + if (0 != err_num) { HAL_Printf("destroy mutex failed"); } } void HAL_MutexLock(_IN_ void *mutex) { - int err_num; - - err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_FOREVER); + int err_num; - if (0 != err_num) - { + err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_FOREVER); + + if (0 != err_num) { HAL_Printf("lock mutex failed"); } } @@ -102,42 +92,37 @@ void HAL_MutexUnlock(_IN_ void *mutex) { int err_num; - err_num = rt_mutex_release((rt_mutex_t)mutex); - - if (0 != err_num) - { + err_num = rt_mutex_release((rt_mutex_t)mutex); + + if (0 != err_num) { HAL_Printf("unlock mutex failed"); } - } int HAL_MutexTryLock(_IN_ void *mutex) { - int err_num; - - err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_NO); + int err_num; - if (0 != err_num) - { + err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_NO); + + if (0 != err_num) { HAL_Printf("trylock mutex failed"); } return err_num; } - void *HAL_Malloc(_IN_ uint32_t size) { - return rt_malloc(size); + return rt_malloc(size); } void HAL_Free(_IN_ void *ptr) { - rt_free(ptr); + if (ptr) + rt_free(ptr); } void HAL_SleepMs(_IN_ uint32_t ms) { (void)rt_thread_delay(rt_tick_from_millisecond(ms)); } - - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c new file mode 100644 index 00000000..f31d35bf --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TCP_rtthread.c @@ -0,0 +1,245 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +//#include +#include +#include +//#include +#include +#include +#include +#include +#include +#include + +#include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" + +static uint64_t rtthread_get_time_ms(void) +{ + return HAL_GetTimeMs(); +} + +static uint64_t rtthread_time_left(uint64_t t_end, uint64_t t_now) +{ + uint64_t t_left; + + if (t_end > t_now) { + t_left = t_end - t_now; + } else { + t_left = 0; + } + + return t_left; +} + +uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) +{ + int ret; + struct addrinfo hints, *addr_list, *cur; + int fd = 0; + + char port_str[6]; + HAL_Snprintf(port_str, 6, "%d", port); + + memset(&hints, 0x00, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + + Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); + + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + perror("getaddrinfo error"); + return 0; + } + + for (cur = addr_list; cur != NULL; cur = cur->ai_next) { + if (cur->ai_family != AF_INET) { + perror("socket type error"); + ret = -1; + continue; + } + fd = (int)socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } + + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } + + close(fd); + ret = 0; + } + + if (0 == ret) { + Log_e("fail to establish tcp"); + } else { + Log_d("success to establish tcp, fd=%d", ret); + } + + freeaddrinfo(addr_list); + + return (uintptr_t)ret; +} + +int HAL_TCP_Disconnect(uintptr_t fd) +{ + int rc; + + rc = close((int)fd); + if (0 != rc) { + perror("closesocket error"); + return -1; + } + + return 0; +} + +int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len) +{ + int ret; + uint32_t len_sent; + uint64_t t_end, t_left; + fd_set sets; + + t_end = rtthread_get_time_ms() + timeout_ms; + len_sent = 0; + ret = 1; /* send one time if timeout_ms is value 0 */ + + do { + t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); + if (0 != t_left) { + struct timeval timeout; + + FD_ZERO(&sets); + FD_SET(fd, &sets); + + timeout.tv_sec = t_left / 1000; + timeout.tv_usec = (t_left % 1000) * 1000; + + ret = select(fd + 1, NULL, &sets, NULL, &timeout); + if (ret > 0) { + if (0 == FD_ISSET(fd, &sets)) { + Log_e("Should NOT arrive"); + /* If timeout in next loop, it will not sent any data */ + ret = 0; + continue; + } + } else if (0 == ret) { + Log_e("select-write timeout %d", (int)fd); + break; + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } + + perror("select-write fail"); + break; + } + } else { + ret = QCLOUD_ERR_SSL_WRITE_TIMEOUT; + } + + if (ret > 0) { + ret = send(fd, buf + len_sent, len - len_sent, 0); + if (ret > 0) { + len_sent += ret; + } else if (0 == ret) { + Log_e("No data be sent"); + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } + + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + perror("send fail"); + break; + } + } + } while ((len_sent < len) && (rtthread_time_left(t_end, rtthread_get_time_ms()) > 0)); + + *written_len = (size_t)len_sent; + + return len_sent > 0 ? QCLOUD_RET_SUCCESS : ret; +} + +int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *read_len) +{ + int ret, err_code; + uint32_t len_recv; + uint64_t t_end, t_left; + fd_set sets; + struct timeval timeout; + + // Log_d("readTimeout %dms,readlen %d", timeout_ms, *read_len); + HAL_SleepMs(1); // wihout delay,read seems to be blocked + + t_end = rtthread_get_time_ms() + timeout_ms; + len_recv = 0; + err_code = 0; + + do { + t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); + if (0 == t_left) { + err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; + break; + } + FD_ZERO(&sets); + FD_SET(fd, &sets); + + timeout.tv_sec = t_left / 1000; + timeout.tv_usec = (t_left % 1000) * 1000; + + ret = select(fd + 1, &sets, NULL, NULL, &timeout); + if (ret > 0) { + ret = recv(fd, buf + len_recv, len - len_recv, 0); + if (ret > 0) { + len_recv += ret; + } else if (0 == ret) { + perror("connection is closed"); + err_code = -1; + break; + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } + perror("recv fail"); + err_code = -2; + break; + } + } else if (0 == ret) { + err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; + break; + } else { + perror("select-recv fail"); + err_code = -2; + break; + } + } while ((len_recv < len)); + + *read_len = (size_t)len_recv; + + return (0 != len_recv) ? 0 : err_code; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c similarity index 76% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c index 60dc46ef..7a6acbf4 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,44 +19,42 @@ extern "C" { #include "qcloud_iot_import.h" -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS +#include #include #include -#include +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/entropy.h" +#include "mbedtls/error.h" +#include "mbedtls/net_sockets.h" +#include "mbedtls/ssl.h" #include "qcloud_iot_export_error.h" #include "qcloud_iot_export_log.h" #include "utils_param_check.h" - -#include "mbedtls/ssl.h" -#include "mbedtls/entropy.h" -#include "mbedtls/net_sockets.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" - #include "utils_timer.h" #ifndef AUTH_MODE_CERT -static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; +static const int ciphersuites[] = {MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0}; #endif - + /** * @brief data structure for mbedtls SSL connection */ typedef struct { - mbedtls_net_context socket_fd; - mbedtls_entropy_context entropy; - mbedtls_ctr_drbg_context ctr_drbg; - mbedtls_ssl_context ssl; - mbedtls_ssl_config ssl_conf; + mbedtls_net_context socket_fd; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + mbedtls_ssl_context ssl; + mbedtls_ssl_config ssl_conf; #if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt ca_cert; - mbedtls_x509_crt client_cert; + mbedtls_x509_crt ca_cert; + mbedtls_x509_crt client_cert; #endif - mbedtls_pk_context private_key; + mbedtls_pk_context private_key; } TLSDataParams; - + /** * @brief free memory/resources allocated by mbedtls */ @@ -67,12 +65,12 @@ static void _free_mebedtls(TLSDataParams *pParams) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif +#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free(pParams); } @@ -87,65 +85,65 @@ static void _free_mebedtls(TLSDataParams *pParams) * @param pConnectParams device info for TLS connection * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) { - +static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) +{ int ret = QCLOUD_RET_SUCCESS; mbedtls_net_init(&(pDataParams->socket_fd)); mbedtls_ssl_init(&(pDataParams->ssl)); mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); mbedtls_ctr_drbg_init(&(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_init(&(pDataParams->ca_cert)); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif +#endif mbedtls_entropy_init(&(pDataParams->entropy)); // custom parameter is NULL for now - if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, - &(pDataParams->entropy), NULL, 0)) != 0) { - Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret<0?-ret:ret); + if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, + 0)) != 0) { + Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_INIT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { +#if defined(MBEDTLS_X509_CRT_PARSE_C) + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { - Log_e("parse ca crt failed returned 0x%04x", ret<0?-ret:ret); + (pConnectParams->ca_crt_len + 1)))) { + Log_e("parse ca crt failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } -#endif +#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { - Log_e("load client cert file failed returned 0x%x", ret<0?-ret:ret); + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + Log_e("load client cert file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { - Log_e("load client key file failed returned 0x%x", ret<0?-ret:ret); + Log_e("load client key file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } else { - Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); + Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, + pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; - ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, + pConnectParams->psk_length, (const unsigned char *)psk_id, strlen(psk_id)); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret<0?-ret:ret); - return ret; - } + + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret < 0 ? -ret : ret); + return ret; + } #endif return QCLOUD_RET_SUCCESS; @@ -159,13 +157,13 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { - int ret = 0; +int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ + int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_TCP)) != 0) { - - Log_e("tcp connect failed returned 0x%04x errno: %d", ret<0?-ret:ret, errno); + Log_e("tcp connect failed returned 0x%04x errno: %d", ret < 0 ? -ret : ret, errno); switch (ret) { case MBEDTLS_ERR_NET_SOCKET_FAILED: @@ -175,11 +173,10 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p default: return QCLOUD_ERR_TCP_CONNECT; } - } #if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { - Log_e("set block faliled returned 0x%04x", ret<0?-ret:ret); + Log_e("set block faliled returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_TCP_CONNECT; } #endif @@ -196,28 +193,26 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p #if defined(MBEDTLS_X509_CRT_PARSE_C) -int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { +int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +{ return *flags; } #endif - uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, int port) { int ret = 0; - TLSDataParams * pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); - + TLSDataParams *pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); + if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { goto error; } - - Log_d("Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&(pDataParams->ssl_conf), MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -229,38 +224,36 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in #endif mbedtls_ssl_conf_rng(&(pDataParams->ssl_conf), mbedtls_ctr_drbg_random, &(pDataParams->ctr_drbg)); - #if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); - if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), - &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { - Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret<0?-ret:ret); + if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), + &(pDataParams->private_key))) != 0) { + Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #endif mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), pConnectParams->timeout_ms); if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #ifndef AUTH_MODE_CERT // ciphersuites selection for PSK device - if(pConnectParams->psk != NULL) { + if (pConnectParams->psk != NULL) { mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); } #endif - #if defined(MBEDTLS_X509_CRT_PARSE_C) // Set the hostname to check against the received server certificate and sni if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } - + #endif mbedtls_ssl_set_bio(&(pDataParams->ssl), &(pDataParams->socket_fd), mbedtls_net_send, mbedtls_net_recv, @@ -271,29 +264,29 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in if ((ret = _mbedtls_tcp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { goto error; } - + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { Log_e("mbedtls_ssl_handshake failed returned 0x%04x", -ret); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) + +#if defined(MBEDTLS_X509_CRT_PARSE_C) if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { Log_e("Unable to verify the server's certificate"); } -#endif +#endif goto error; } } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { - Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), 100); Log_i("connected with /%s/%d...", host, port); - + return (uintptr_t)pDataParams; error: @@ -301,13 +294,14 @@ error: return 0; } -void HAL_TLS_Disconnect(uintptr_t handle) { +void HAL_TLS_Disconnect(uintptr_t handle) +{ if ((uintptr_t)NULL == handle) { Log_d("handle is NULL"); return; } TLSDataParams *pParams = (TLSDataParams *)handle; - int ret = 0; + int ret = 0; do { ret = mbedtls_ssl_close_notify(&(pParams->ssl)); } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); @@ -322,29 +316,26 @@ void HAL_TLS_Disconnect(uintptr_t handle) { mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free((void *)handle); } -int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, - size_t *written_len) +int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *written_len) { - Timer timer; InitTimer(&timer); - countdown_ms(&timer, (unsigned int) timeout_ms); + countdown_ms(&timer, (unsigned int)timeout_ms); size_t written_so_far; - bool errorFlag = false; - int write_rc = 0; - + bool errorFlag = false; + int write_rc = 0; + TLSDataParams *pParams = (TLSDataParams *)handle; for (written_so_far = 0; written_so_far < totalLen && !expired(&timer); written_so_far += write_rc) { - - while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) - { + while (!expired(&timer) && + (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) { if (write_rc != MBEDTLS_ERR_SSL_WANT_READ && write_rc != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("HAL_TLS_write failed 0x%04x", write_rc<0?-write_rc:write_rc); + Log_e("HAL_TLS_write failed 0x%04x", write_rc < 0 ? -write_rc : write_rc); errorFlag = true; break; } @@ -366,27 +357,27 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ return QCLOUD_RET_SUCCESS; } -int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) +int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) { - - //mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even timeout + // mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even + // timeout // use non-blocking read Timer timer; InitTimer(&timer); - countdown_ms(&timer, (unsigned int) timeout_ms); + countdown_ms(&timer, (unsigned int)timeout_ms); *read_len = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; do { int read_rc = 0; - read_rc = mbedtls_ssl_read(&(pParams->ssl), msg + *read_len, totalLen - *read_len); + read_rc = mbedtls_ssl_read(&(pParams->ssl), msg + *read_len, totalLen - *read_len); if (read_rc > 0) { *read_len += read_rc; - } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE - && read_rc != MBEDTLS_ERR_SSL_WANT_READ && read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { - Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc<0?-read_rc:read_rc); + } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE && read_rc != MBEDTLS_ERR_SSL_WANT_READ && + read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { + Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc < 0 ? -read_rc : read_rc); return QCLOUD_ERR_SSL_READ; } @@ -411,4 +402,4 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t } #endif -#endif +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c new file mode 100644 index 00000000..7e8d38a8 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/HAL_Timer_rtthread.c @@ -0,0 +1,91 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "qcloud_iot_import.h" + +static char now_time_str[20] = {0}; + +uint32_t HAL_GetTimeMs(void) +{ +#if (RT_TICK_PER_SECOND == 1000) + /* #define RT_TICK_PER_SECOND 1000 */ + return (unsigned long)rt_tick_get(); +#else + unsigned long tick = 0; + + tick = rt_tick_get(); + tick = tick * 1000; + return (unsigned long)((tick + RT_TICK_PER_SECOND - 1) / RT_TICK_PER_SECOND); +#endif +} + +/*Get timestamp*/ +long HAL_Timer_current_sec(void) +{ + return HAL_GetTimeMs() / 1000; +} + +char *HAL_Timer_current(void) +{ + long time_sec; + + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%ld", time_sec); + + return now_time_str; +} + +bool HAL_Timer_expired(Timer *timer) +{ + uint32_t now_ts; + + now_ts = HAL_GetTimeMs(); + + return (now_ts > timer->end_time) ? true : false; +} + +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout_ms; +} + +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout * 1000; +} + +int HAL_Timer_remain(Timer *timer) +{ + return (int)(timer->end_time - HAL_GetTimeMs()); +} + +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/tc_tls_config.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/tc_tls_config.h similarity index 99% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/tc_tls_config.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/tc_tls_config.h index 2cfecba4..e735d7e9 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/rtthread/tc_tls_config.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/rtthread/tc_tls_config.h @@ -540,7 +540,7 @@ * * Comment macros to disable the curve and functions for it */ -#if 0 +#if 0 #define MBEDTLS_ECP_DP_SECP192R1_ENABLED #define MBEDTLS_ECP_DP_SECP224R1_ENABLED #define MBEDTLS_ECP_DP_SECP256R1_ENABLED @@ -1806,7 +1806,7 @@ * * This module provides debugging functions. */ - + #ifdef PKG_USING_MBEDTLS_DEBUG #define MBEDTLS_DEBUG_C #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c new file mode 100644 index 00000000..391308c4 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_AT_UART_win.c @@ -0,0 +1,55 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#ifdef AT_TCP_ENABLED + +#include +#include +#include +#include + +#include "at_client.h" +#include "utils_ringbuff.h" + +/** + * @brief This function handles AT UART global interrupt,push recv char to ringbuff. + */ +void HAL_AT_UART_IRQHandler(void) {} + +/** + *pdata: pointer of data for send + *len: len of data to be sent + *return: the len of data send success + * @brief hal api for at data send + */ +int HAL_AT_Uart_Send(void *data, uint32_t size) +{ + return 0; +} + +int HAL_AT_Uart_Init(void) +{ + return QCLOUD_RET_SUCCESS; +} + +int HAL_AT_Uart_Deinit(void) +{ + return QCLOUD_RET_SUCCESS; +} + +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Device_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Device_win.c new file mode 100644 index 00000000..7f4fa38b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Device_win.c @@ -0,0 +1,481 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/* Enable this macro (also control by cmake) to use static string buffer to store device info */ +/* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ +//#define DEBUG_DEV_INFO_USED + +#ifdef DEBUG_DEV_INFO_USED +/* product Id */ +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; + +/* device name */ +static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; + +#ifdef DEV_DYN_REG_ENABLED +/* product secret for device dynamic Registration */ +static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; +#endif + +#ifdef AUTH_MODE_CERT +/* public cert file name of certificate device */ +static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] = "YOUR_DEVICE_NAME_cert.crt"; +/* private key file name of certificate device */ +static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; +#else +/* device secret of PSK device */ +static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; +#endif + +#ifdef GATEWAY_ENABLED +/* sub-device product id */ +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +/* sub-device device name */ +static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +#endif + +static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) +{ + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; +} + +int HAL_SetDevInfoFile(const char *file_name) +{ + Log_w("device info is not stored in file!!"); + + return QCLOUD_RET_SUCCESS; +} + +#else +/*device info manage example method*/ + +#include "lite-utils.h" + +#define MAX_DEV_INFO_FILE_LEN 1024 +#define MAX_CONFIG_FILE_NAME 256 + +#define KEY_AUTH_MODE "auth_mode" +#define KEY_PRODUCT_ID "productId" +#define KEY_PRODUCT_SECRET "productSecret" +#define KEY_DEV_NAME "deviceName" +#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" +#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" +#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" +#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" +#define KEY_SUBDEV_NAME "subDev.sub_devName" + +#define STR_DEV_INFO "key_deviceinfo" +#define STR_DEV_SECRET "deviceSecret" +#define STR_DEV_CERT "cert_deviceinfo" +#define STR_DEV_CERT_FILE "devCertFile" +#define STR_DEV_KEY_FILE "devPrivateKeyFile" + +#define MAX_SIZE_OF_DEVICE_INFO_FILE 128 +static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE + 1] = {".\\device_info.json"}; + +int HAL_SetDevInfoFile(const char *file_name) +{ + if (file_name == NULL || strlen(file_name) > MAX_SIZE_OF_DEVICE_INFO_FILE) { + Log_e("illegal device info file name!"); + return QCLOUD_ERR_INVAL; + } + + /* check if file exists */ + if (access(file_name, 0)) { + Log_e("device info file \"%s\" not existed", file_name); + return QCLOUD_ERR_FAILURE; + } + + memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); + strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); + return QCLOUD_RET_SUCCESS; +} + +int HAL_GetDevInfoFromFile(const char *file_name, void *dev_info) +{ + FILE * fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; + char * authMode = NULL; + char * productId = NULL; + char * devName = NULL; +#ifdef DEV_DYN_REG_ENABLED + char * productSecret = NULL; +#endif +#ifdef AUTH_MODE_CERT + char * devCrtFileName = NULL; + char * devKeyFileName = NULL; +#else + char *devSecret = NULL; +#endif + char * JsonDoc = NULL; + + DeviceInfo *pDevInfo = (DeviceInfo *)dev_info; + + fp = fopen(file_name, "rb"); + if (NULL == fp) { + Log_e("open device info file \"%s\" failed", file_name); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", file_name); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + JsonDoc = (char *)HAL_Malloc(len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + memset(JsonDoc, 0, len + 10); + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*Get device info*/ + authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); + productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); + devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); + + if (NULL == authMode || NULL == productId || NULL == devName) { + Log_e("read device data from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + +#ifdef DEV_DYN_REG_ENABLED + productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); + if (NULL == productSecret) { + Log_e("read product secret from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); +#endif + +#ifdef AUTH_MODE_CERT + devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); + devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); + if (NULL == devCrtFileName || NULL == devKeyFileName) { + Log_e("read cert file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + // Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, + // devCrtFileName, devKeyFileName); +#else + devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); + if (NULL == devSecret) { + Log_e("read device secret from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); + // Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); +#endif + +exit: + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif +#ifdef AUTH_MODE_CERT + HAL_Free(devCrtFileName); + HAL_Free(devKeyFileName); +#else + HAL_Free(devSecret); +#endif + HAL_Free(JsonDoc); + + if (NULL != fp) { + fclose(fp); + } + + return ret; +} + +#ifdef GATEWAY_ENABLED +static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) +{ + FILE * fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; + char * productId = NULL; + char * devName = NULL; + char * JsonDoc = NULL; + + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { + Log_e("open device info file \"%s\" failed", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + JsonDoc = (char *)HAL_Malloc(len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } + + /*Get sub device info*/ + productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); + devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); + + if (NULL == productId || NULL == devName) { + Log_e("read sub device data from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + // Log_d("pid:%s, devName:%s", productId, devName); + +exit: + HAL_Free(productId); + HAL_Free(devName); + HAL_Free(JsonDoc); + + if (NULL != fp) { + fclose(fp); + } + + return ret; +} +#endif + +static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) +{ + char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; + int32_t remain_size = MAX_DEV_INFO_FILE_LEN; + int32_t rc_of_snprintf = 0; + int32_t wlen; + FILE * fp; + + rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); + remain_size -= rc_of_snprintf; + + // auth_mode +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n", KEY_AUTH_MODE, "CERT"); + remain_size -= rc_of_snprintf; +#else + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n", KEY_AUTH_MODE, "KEY"); + remain_size -= rc_of_snprintf; +#endif + + // product id, device name + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", + KEY_PRODUCT_ID, pDevInfo->product_id, KEY_DEV_NAME, pDevInfo->device_name); + remain_size -= rc_of_snprintf; + + // product secret +#ifdef DEV_DYN_REG_ENABLED + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n", KEY_PRODUCT_SECRET, + pDevInfo->product_secret); + remain_size -= rc_of_snprintf; +#endif + + // key device info or cert device info +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); + remain_size -= rc_of_snprintf; + rc_of_snprintf = + HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", STR_DEV_CERT_FILE, + pDevInfo->dev_cert_file_name, STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name); + remain_size -= rc_of_snprintf; +#else + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":\"%s\"\n}", STR_DEV_SECRET, + pDevInfo->device_secret); + remain_size -= rc_of_snprintf; +#endif + + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); + remain_size -= rc_of_snprintf; + + Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); + + fp = fopen(sg_device_info_file, "w"); + if (NULL == fp) { + Log_e("open file %s failed", sg_device_info_file); + return QCLOUD_ERR_FAILURE; + } + + wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); + if (wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { + Log_e("write len less than needed"); + } + fclose(fp); + return QCLOUD_RET_SUCCESS; +} +#endif + +int HAL_SetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID); // set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME); // set dev name + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // set dev key file name +#else + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET); // set dev secret +#endif + +#else + ret = iot_save_devinfo_to_json_file(devInfo); +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +int HAL_GetDevInfo(void *pdevInfo) +{ + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID); // get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME); // get dev name + +#ifdef DEV_DYN_REG_ENABLED + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET); // get product ID +#endif + +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, + MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); // get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, + MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); // get dev key file name +#else + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET); // get dev secret +#endif + +#else + // get devinfo from file + ret = HAL_GetDevInfoFromFile(sg_device_info_file, devInfo); +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} + +#ifdef GATEWAY_ENABLED +int HAL_GetGwDevInfo(void *pgwDeviceInfo) +{ + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + +#ifdef DEBUG_DEV_INFO_USED + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info)); // get gw dev info + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + +#else + ret = HAL_GetDevInfoFromFile(sg_device_info_file, &(gwDevInfo->gw_info)); + if (ret != QCLOUD_RET_SUCCESS) { + return QCLOUD_ERR_FAILURE; + } + // only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + gwDevInfo->sub_dev_info = (DeviceInfo *)HAL_Malloc(sizeof(DeviceInfo) * (gwDevInfo->sub_dev_num)); + memset((char *)gwDevInfo->sub_dev_info, '\0', sizeof(DeviceInfo)); + // copy sub dev info + ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); +#endif + + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Log_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Log_win.c similarity index 79% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Log_win.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Log_win.c index ef9a0d06..cd3624fb 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_Log_win.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Log_win.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -16,9 +16,9 @@ #include #include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" #ifdef LOG_UPLOAD @@ -26,62 +26,59 @@ size_t HAL_Log_Save(const char *log, size_t wLen) { - FILE *fp; - size_t len; + FILE * fp; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { + if ((fp = fopen(LOG_SAVE_FILE_PATH, "a+")) == NULL) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + len = fwrite((void *)log, 1, wLen, fp); Log_d("write %d of %d to log file", len, wLen); - + fclose(fp); return len; } - -size_t HAL_Log_Read (char *buff, size_t rLen) +size_t HAL_Log_Read(char *buff, size_t rLen) { - FILE *fp; - size_t len; + FILE * fp; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + if ((fp = fopen(LOG_SAVE_FILE_PATH, "r")) == NULL) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; } len = fread((void *)buff, 1, rLen, fp); Log_d("read %d of %d from log file", len, rLen); - + fclose(fp); return len; } - int HAL_Log_Del(void) { return remove(LOG_SAVE_FILE_PATH); } - size_t HAL_Log_Get_Size(void) { - long length; + long length; FILE *fp; /* check if file exists */ if (access(LOG_SAVE_FILE_PATH, 0)) return 0; - - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + + if ((fp = fopen(LOG_SAVE_FILE_PATH, "r")) == NULL) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + fseek(fp, 0L, SEEK_END); length = ftell(fp); fclose(fp); @@ -92,4 +89,3 @@ size_t HAL_Log_Get_Size(void) } #endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_OS_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_OS_win.c new file mode 100644 index 00000000..8385229d --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_OS_win.c @@ -0,0 +1,175 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export_error.h" +#include "qcloud_iot_import.h" + +void *HAL_MutexCreate(void) +{ +#ifdef MULTITHREAD_ENABLED + HANDLE mutex = CreateMutex(NULL, FALSE, NULL); + + if (mutex == NULL) { + HAL_Printf("%s: create mutex failed\n", __FUNCTION__); + } + + return (void *)mutex; +#else + return (void *)0xFFFFFFFF; +#endif +} + +void HAL_MutexDestroy(_IN_ void *mutex) +{ +#ifdef MULTITHREAD_ENABLED + CloseHandle((HANDLE)mutex); +#else + return; +#endif +} + +void HAL_MutexLock(_IN_ void *mutex) +{ +#ifdef MULTITHREAD_ENABLED + WaitForSingleObject((HANDLE)mutex, INFINITE); +#else + return; +#endif +} + +int HAL_MutexTryLock(_IN_ void *mutex) +{ +#ifdef MULTITHREAD_ENABLED + return WaitForSingleObject((HANDLE)mutex, 0) == WAIT_OBJECT_0 ? 0 : -1; +#else + return 0; +#endif +} + +void HAL_MutexUnlock(_IN_ void *mutex) +{ +#ifdef MULTITHREAD_ENABLED + ReleaseMutex((HANDLE)mutex); +#else + return; +#endif +} + +void *HAL_Malloc(_IN_ uint32_t size) +{ + return malloc(size); +} + +void HAL_Free(_IN_ void *ptr) +{ + if (ptr) + free(ptr); +} + +void HAL_Printf(_IN_ const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); + + fflush(stdout); +} + +int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) +{ + va_list args; + int rc; + + va_start(args, fmt); + rc = vsnprintf(str, len, fmt, args); + va_end(args); + + return rc; +} + +int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap) +{ + return vsnprintf(str, len, format, ap); +} + +uint32_t HAL_GetTimeMs(void) +{ + return (uint32_t)GetTickCount64(); +} + +void HAL_SleepMs(_IN_ uint32_t ms) +{ + Sleep(ms); +} + +#ifdef MULTITHREAD_ENABLED + +// platform-dependant thread routine/entry function +static void _HAL_thread_func_wrapper_(void *ptr) +{ + ThreadParams *params = (ThreadParams *)ptr; + + params->thread_func(params->user_arg); + + _endthread(); +} + +// platform-dependant thread create function +int HAL_ThreadCreate(ThreadParams *params) +{ + if (params == NULL) + return QCLOUD_ERR_INVAL; + + uintptr_t ret = _beginthread(_HAL_thread_func_wrapper_, params->stack_size, (void *)params); + if (ret == -1L) { + HAL_Printf("%s: _beginthread failed: %d\n", __FUNCTION__, errno); + return QCLOUD_ERR_FAILURE; + } + + return QCLOUD_RET_SUCCESS; +} + +#endif + +#ifdef AT_TCP_ENABLED + +void *HAL_SemaphoreCreate(void) +{ + return NULL; +} + +void HAL_SemaphoreDestroy(void *sem) +{ + return; +} + +void HAL_SemaphorePost(void *sem) +{ + return; +} + +int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) +{ + return QCLOUD_RET_SUCCESS; +} + +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_TCP_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c similarity index 62% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_TCP_win.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c index 2f9fa9ec..93e8a371 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_TCP_win.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_TCP_win.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -12,20 +12,20 @@ * limitations under the License. * */ +#include #include #include -#include -//DO NOT change the include order -#include +// DO NOT change the include order #include +#include #pragma comment(lib, "ws2_32.lib") #include #include "qcloud_iot_common.h" -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" static uint64_t _win_get_time_ms(void) { @@ -45,88 +45,82 @@ static uint64_t _win_time_left(uint64_t t_end, uint64_t t_now) return t_left; } -uintptr_t HAL_TCP_Connect(const char* host, uint16_t port) +uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - WORD sockVersion = MAKEWORD(2, 2); - WSADATA data; + WORD sockVersion = MAKEWORD(2, 2); + WSADATA data; - if (WSAStartup(sockVersion, &data) != 0) - { - return 0; - } - int ret; - struct addrinfo hints, * addr_list, * cur; - SOCKET fd; + if (WSAStartup(sockVersion, &data) != 0) { + return 0; + } + int ret; + struct addrinfo hints, *addr_list, *cur; + SOCKET fd; - char port_str[6]; - HAL_Snprintf(port_str, 6, "%d", port); + char port_str[6]; + HAL_Snprintf(port_str, 6, "%d", port); - memset(&hints, 0x00, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + memset(&hints, 0x00, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; - ret = getaddrinfo(host, port_str, &hints, &addr_list); - if (ret) { - Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); + ret = getaddrinfo(host, port_str, &hints, &addr_list); + if (ret) { + Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); - return 0; - } + return 0; + } - for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd == INVALID_SOCKET) - { - ret = 0; - continue; - } + for (cur = addr_list; cur != NULL; cur = cur->ai_next) { + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd == INVALID_SOCKET) { + ret = 0; + continue; + } - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } - closesocket(fd); - ret = 0; - } + closesocket(fd); + ret = 0; + } - if (0 == ret) { - Log_e("fail to connect with TCP server: %s:%s", host, port_str); - } - else { - /* reduce log print due to frequent log server connect/disconnect */ - if (0 == strncmp(host, LOG_UPLOAD_SERVER_DOMAIN, HOST_STR_LENGTH)) - UPLOAD_DBG("connected with TCP server: %s:%s", host, port_str); - else - Log_i("connected with TCP server: %s:%s", host, port_str); - } + if (0 == ret) { + Log_e("fail to connect with TCP server: %s:%s", host, port_str); + } else { + /* reduce log print due to frequent log server connect/disconnect */ + if (0 == strncmp(host, LOG_UPLOAD_SERVER_DOMAIN, HOST_STR_LENGTH)) + UPLOAD_DBG("connected with TCP server: %s:%s", host, port_str); + else + Log_i("connected with TCP server: %s:%s", host, port_str); + } - freeaddrinfo(addr_list); + freeaddrinfo(addr_list); - return (uintptr_t)ret; + return (uintptr_t)ret; } - int HAL_TCP_Disconnect(uintptr_t fd) { - closesocket(fd); - WSACleanup(); + closesocket(fd); + WSACleanup(); return 0; } - int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *written_len) { - int ret; + int ret; uint32_t len_sent; uint64_t t_end, t_left; - fd_set sets; + fd_set sets; - t_end = _win_get_time_ms() + timeout_ms; + t_end = _win_get_time_ms() + timeout_ms; len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ + ret = 1; /* send one time if timeout_ms is value 0 */ do { t_left = _win_time_left(t_end, _win_get_time_ms()); @@ -137,7 +131,7 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t FD_ZERO(&sets); FD_SET(fd, &sets); - timeout.tv_sec = (long)t_left / 1000; + timeout.tv_sec = (long)t_left / 1000; timeout.tv_usec = ((long)t_left % 1000) * 1000; ret = select(fd + 1, NULL, &sets, NULL, &timeout); @@ -158,13 +152,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -179,8 +172,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -191,30 +184,29 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t return len_sent > 0 ? QCLOUD_RET_SUCCESS : ret; } - int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeout_ms, size_t *read_len) { - int ret, err_code; - uint32_t len_recv; - uint64_t t_end, t_left; - fd_set sets; + int ret, err_code; + uint32_t len_recv; + uint64_t t_end, t_left; + fd_set sets; struct timeval timeout; - t_end = _win_get_time_ms() + timeout_ms; + t_end = _win_get_time_ms() + timeout_ms; len_recv = 0; err_code = 0; do { t_left = _win_time_left(t_end, _win_get_time_ms()); if (0 == t_left) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } FD_ZERO(&sets); FD_SET(fd, &sets); - timeout.tv_sec = (long)(t_left / 1000); + timeout.tv_sec = (long)(t_left / 1000); timeout.tv_usec = (long)((t_left % 1000) * 1000); ret = select(fd + 1, &sets, NULL, NULL, &timeout); @@ -224,25 +216,25 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou len_recv += ret; } else if (0 == ret) { struct sockaddr_in peer; - int sLen = sizeof(peer); - int peer_port = 0; - getpeername(fd, (struct sockaddr*)&peer, &sLen); + int sLen = sizeof(peer); + int peer_port = 0; + getpeername(fd, (struct sockaddr *)&peer, &sLen); peer_port = ntohs(peer.sin_port); /* reduce log print due to frequent log server connect/disconnect */ if (peer_port == LOG_UPLOAD_SERVER_PORT) - UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); + UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } - Log_e("recv error: %s", strerror(errno)); + } + Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } @@ -250,7 +242,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } else { - Log_e("select-recv error: %s", strerror(errno)); + Log_e("select-recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c new file mode 100644 index 00000000..ed6d8dc4 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_Timer_win.c @@ -0,0 +1,81 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "qcloud_iot_import.h" + +bool HAL_Timer_expired(Timer *timer) +{ + if (GetTickCount64() >= timer->end_time) { + return true; + } + + return false; +} + +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ + timer->end_time = GetTickCount64() + timeout_ms; +} + +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ + timer->end_time = GetTickCount64() + (UINT64)timeout * 1000; +} + +int HAL_Timer_remain(Timer *timer) +{ + UINT64 now = GetTickCount64(); + + if (now >= timer->end_time) { + return 0; + } + + return (int)(timer->end_time - now); +} + +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; +} + +char *HAL_Timer_current(char *time_str) +{ + time_t now; + struct tm tm_val; + + time(&now); + localtime_s(&tm_val, &now); + + snprintf(time_str, TIME_FORMAT_STR_LEN, "%04d/%02d/%02d %02d:%02d:%02d", tm_val.tm_year + 1900, tm_val.tm_mon + 1, + tm_val.tm_mday, tm_val.tm_hour, tm_val.tm_min, tm_val.tm_sec); + + return time_str; +} + +long HAL_Timer_current_sec(void) +{ + return (long)(GetTickCount64() / 1000); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_UDP_win.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c similarity index 68% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_UDP_win.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c index 9bc308d4..39ff2634 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/windows/HAL_UDP_win.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/os/windows/HAL_UDP_win.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,60 +13,60 @@ * */ +#include #include #include #include -#include -//DO NOT change the include order -#include +// DO NOT change the include order #include +#include #pragma comment(lib, "ws2_32.lib") #include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export_log.h" #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" #ifdef COAP_COMM_ENABLED uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) { -#define NETWORK_ADDR_LEN (16) +#define NETWORK_ADDR_LEN (16) - int ret; - struct addrinfo hints, *addr_list, *cur; - int fd = 0; + int ret; + struct addrinfo hints, *addr_list, *cur; + int fd = 0; - char port_str[6] = {0}; + char port_str[6] = {0}; HAL_Snprintf(port_str, 6, "%d", port); memset((char *)&hints, 0x00, sizeof(hints)); hints.ai_socktype = SOCK_DGRAM; - hints.ai_family = AF_INET; + hints.ai_family = AF_INET; hints.ai_protocol = IPPROTO_UDP; Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd; - break; - } + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd; + break; + } - closesocket(fd); - ret = 0; + closesocket(fd); + ret = 0; } if (0 == ret) { @@ -84,19 +84,19 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) void HAL_UDP_Disconnect(uintptr_t fd) { - long socket_id = -1; + long socket_id = -1; socket_id = (int)fd; - closesocket(socket_id); + closesocket(socket_id); } int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datalen) { - int rc = -1; - long socket_id = -1; + int rc = -1; + long socket_id = -1; socket_id = (int)fd; - rc = send(socket_id, (char *)p_data, (int)datalen, 0); + rc = send(socket_id, (char *)p_data, (int)datalen, 0); if (-1 == rc) { return -1; } @@ -106,21 +106,21 @@ int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datale int HAL_UDP_Read(uintptr_t fd, unsigned char *p_data, unsigned int datalen) { - long socket_id = -1; - int count = -1; + long socket_id = -1; + int count = -1; socket_id = (int)fd; - count = (int)recv(socket_id, p_data, datalen, 0); + count = (int)recv(socket_id, p_data, datalen, 0); return count; } int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datalen, unsigned int timeout_ms) { - int ret; - struct timeval tv; - fd_set read_fds; - int socket_id = -1; + int ret; + struct timeval tv; + fd_set read_fds; + int socket_id = -1; socket_id = (int)fd; @@ -138,12 +138,12 @@ int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datale /* Zero fds ready means we timed out */ if (ret == 0) { - return QCLOUD_ERR_SSL_READ_TIMEOUT; /* receive timeout */ + return QCLOUD_ERR_SSL_READ_TIMEOUT; /* receive timeout */ } if (ret < 0) { if (errno == EINTR) { - return -3; /* want read */ + return -3; /* want read */ } return QCLOUD_ERR_SSL_READ; /* receive failed */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c similarity index 60% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c index 2f5725e7..8a24a729 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_DTLS_mbedtls.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -24,49 +24,43 @@ extern "C" { #ifdef COAP_COMM_ENABLED +#include #include #include -#include -#include "mbedtls/net_sockets.h" -#include "mbedtls/debug.h" -#include "mbedtls/ssl.h" -#include "mbedtls/entropy.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" #include "mbedtls/certs.h" -#include "mbedtls/timing.h" +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/debug.h" +#include "mbedtls/entropy.h" +#include "mbedtls/error.h" +#include "mbedtls/net_sockets.h" +#include "mbedtls/ssl.h" #include "mbedtls/ssl_cookie.h" - -#include "utils_timer.h" +#include "mbedtls/timing.h" #include "utils_param_check.h" +#include "utils_timer.h" #define DEBUG_LEVEL 0 #ifndef AUTH_MODE_CERT -static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; +static const int ciphersuites[] = {MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0}; #endif /** * @brief data structure for mbedtls SSL connection */ -typedef struct -{ - mbedtls_net_context socket_fd; - mbedtls_entropy_context entropy; - mbedtls_ctr_drbg_context ctr_drbg; - mbedtls_ssl_context ssl; - mbedtls_ssl_config ssl_conf; -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt ca_cert; - mbedtls_x509_crt client_cert; -#endif - mbedtls_pk_context private_key; +typedef struct { + mbedtls_net_context socket_fd; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + mbedtls_ssl_context ssl; + mbedtls_ssl_config ssl_conf; + mbedtls_x509_crt ca_cert; + mbedtls_x509_crt client_cert; + mbedtls_pk_context private_key; - mbedtls_timing_delay_context timer; -#if 0 - mbedtls_ssl_cookie_ctx cookie_ctx; -#endif + mbedtls_timing_delay_context timer; + mbedtls_ssl_cookie_ctx cookie_ctx; } DTLSDataParams; /** @@ -75,108 +69,94 @@ typedef struct static void _free_mebeddtls(DTLSDataParams *pParams) { mbedtls_net_free(&(pParams->socket_fd)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); -#if 0 mbedtls_ssl_cookie_free(&(pParams->cookie_ctx)); -#endif HAL_Free(pParams); } -static void _dtls_debug( void *ctx, int level, - const char *file, int line, - const char *str ) +static void _dtls_debug(void *ctx, int level, const char *file, int line, const char *str) { Log_i("[mbedTLS]:[%s]:[%d]: %s\r\n", file, line, str); } static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams *pConnectParams) { - int ret = QCLOUD_RET_SUCCESS; + int ret = QCLOUD_RET_SUCCESS; #if defined(MBEDTLS_DEBUG_C) - mbedtls_debug_set_threshold( DEBUG_LEVEL ); + mbedtls_debug_set_threshold(DEBUG_LEVEL); #endif - mbedtls_net_init( &(pDataParams->socket_fd) ); - mbedtls_ssl_init( &(pDataParams->ssl) ); - mbedtls_ssl_config_init( &(pDataParams->ssl_conf) ); -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt_init( &(pDataParams->ca_cert) ); + mbedtls_net_init(&(pDataParams->socket_fd)); + mbedtls_ssl_init(&(pDataParams->ssl)); + mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); + mbedtls_x509_crt_init(&(pDataParams->ca_cert)); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif - mbedtls_ctr_drbg_init( &(pDataParams->ctr_drbg) ); - mbedtls_entropy_init( &(pDataParams->entropy) ); + mbedtls_ctr_drbg_init(&(pDataParams->ctr_drbg)); + mbedtls_entropy_init(&(pDataParams->entropy)); - if((ret = mbedtls_ctr_drbg_seed(&pDataParams->ctr_drbg, mbedtls_entropy_func, - &pDataParams->entropy, NULL,0)) != 0) - { + if ((ret = mbedtls_ctr_drbg_seed(&pDataParams->ctr_drbg, mbedtls_entropy_func, &pDataParams->entropy, NULL, 0)) != + 0) { Log_e("mbedtls_ctr_drbg_seed failed returned -0x%x", -ret); return QCLOUD_ERR_SSL_INIT; } - mbedtls_ssl_conf_authmode(&pDataParams->ssl_conf, MBEDTLS_SSL_VERIFY_NONE ); + mbedtls_ssl_conf_authmode(&pDataParams->ssl_conf, MBEDTLS_SSL_VERIFY_NONE); -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { + (pConnectParams->ca_crt_len + 1)))) { Log_e("parse ca crt failed returned -0x%04x", -ret); return QCLOUD_ERR_SSL_CERT; } } -#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { Log_e("load client cert file failed returned -0x%x", ret); return QCLOUD_ERR_SSL_CERT; } -#endif if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { Log_e("load client key file failed returned -0x%x", ret); return QCLOUD_ERR_SSL_CERT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) if (0 == ret) { mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); - if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { + if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), + &(pDataParams->private_key))) != 0) { Log_e("mbedtls_ssl_conf_own_cert failed returned -0x%x", -ret); return QCLOUD_ERR_SSL_CERT; } } -#endif } else { - Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); + Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, + pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; - ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, + pConnectParams->psk_length, (const unsigned char *)psk_id, strlen(psk_id)); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: -0x%x", -ret); - return ret; - } + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: -0x%x", -ret); + return ret; + } #endif return ret; @@ -190,8 +170,9 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { - int ret = 0; +int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ + int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_UDP)) != 0) { @@ -206,34 +187,32 @@ int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int p } } -#if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { Log_e("set block faliled returned -0x%04x", -ret); return QCLOUD_ERR_TCP_CONNECT; } -#endif return QCLOUD_RET_SUCCESS; } uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, int port) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; int ret = QCLOUD_RET_SUCCESS; - DTLSDataParams * pDataParams = (DTLSDataParams *)HAL_Malloc(sizeof(DTLSDataParams)); + DTLSDataParams *pDataParams = (DTLSDataParams *)HAL_Malloc(sizeof(DTLSDataParams)); if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { - goto error; - } + goto error; + } if ((ret = _mbedtls_udp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { - goto error; - } + goto error; + } - if ((ret = mbedtls_ssl_config_defaults(&pDataParams->ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_DATAGRAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { + if ((ret = mbedtls_ssl_config_defaults(&pDataParams->ssl_conf, MBEDTLS_SSL_IS_CLIENT, + MBEDTLS_SSL_TRANSPORT_DATAGRAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { Log_e("mbedtls_ssl_config_defaults result 0x%04x", ret); goto error; } @@ -243,61 +222,57 @@ uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, mbedtls_ssl_conf_rng(&pDataParams->ssl_conf, mbedtls_ctr_drbg_random, &pDataParams->ctr_drbg); mbedtls_ssl_conf_dbg(&pDataParams->ssl_conf, _dtls_debug, NULL); -#if 0 - if ((ret = mbedtls_ssl_cookie_setup(&pDataParams->cookie_ctx, mbedtls_ctr_drbg_random, &pDataParams->ctr_drbg)) != 0) { + if ((ret = mbedtls_ssl_cookie_setup(&pDataParams->cookie_ctx, mbedtls_ctr_drbg_random, &pDataParams->ctr_drbg)) != + 0) { Log_e("mbedtls_ssl_cookie_setup result 0x%04x", ret); goto error; } - mbedtls_ssl_conf_dtls_cookies(&pDataParams->ssl_conf, mbedtls_ssl_cookie_write, mbedtls_ssl_cookie_check, &pDataParams->cookie_ctx); -#endif + mbedtls_ssl_conf_dtls_cookies(&pDataParams->ssl_conf, mbedtls_ssl_cookie_write, mbedtls_ssl_cookie_check, + &pDataParams->cookie_ctx); #ifndef AUTH_MODE_CERT - mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); + mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); #endif #ifdef MBEDTLS_SSL_PROTO_DTLS - if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) - { + if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) { mbedtls_ssl_conf_min_version(&pDataParams->ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); mbedtls_ssl_conf_max_version(&pDataParams->ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); mbedtls_ssl_conf_handshake_timeout(&pDataParams->ssl_conf, (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2), - (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2 * 4)); + (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2 * 4)); } #endif + if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned -0x%x", -ret); - goto error; - } + Log_e("mbedtls_ssl_setup failed returned -0x%x", -ret); + goto error; + } if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) { - mbedtls_ssl_set_timer_cb(&(pDataParams->ssl), (void *)&pDataParams->timer, mbedtls_timing_set_delay, - mbedtls_timing_get_delay); - } + mbedtls_ssl_set_timer_cb(&(pDataParams->ssl), (void *)&pDataParams->timer, mbedtls_timing_set_delay, + mbedtls_timing_get_delay); + } -#if defined(MBEDTLS_X509_CRT_PARSE_C) if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned -0x%x", -ret); - goto error; - } -#endif + Log_e("mbedtls_ssl_set_hostname failed returned -0x%x", -ret); + goto error; + } - mbedtls_ssl_set_bio(&(pDataParams->ssl), (void *)&pDataParams->socket_fd, mbedtls_net_send, mbedtls_net_recv, - mbedtls_net_recv_timeout); + mbedtls_ssl_set_bio(&(pDataParams->ssl), (void *)&pDataParams->socket_fd, mbedtls_net_send, mbedtls_net_recv, + mbedtls_net_recv_timeout); - while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("mbedtls_ssl_handshake failed returned -0x%x", -ret); -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { - Log_e("Unable to verify the server's certificate"); - } -#endif - goto error; - } - } + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { + Log_e("mbedtls_ssl_handshake failed returned -0x%x", -ret); + if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { + Log_e("Unable to verify the server's certificate"); + } + goto error; + } + } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { Log_e("mbedtls_ssl_get_verify_result failed returned -0x%x", -ret); @@ -307,7 +282,7 @@ uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, return (uintptr_t)pDataParams; error: - _free_mebeddtls(pDataParams); + _free_mebeddtls(pDataParams); return 0; } @@ -319,85 +294,79 @@ void HAL_DTLS_Disconnect(uintptr_t handle) } DTLSDataParams *pParams = (DTLSDataParams *)handle; - int ret = 0; + int ret = 0; do { ret = mbedtls_ssl_close_notify(&(pParams->ssl)); } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); mbedtls_net_free(&(pParams->socket_fd)); -#ifdef MBEDTLS_X509_CRT_PARSE_C mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); -#if 0 mbedtls_ssl_cookie_free(&(pParams->cookie_ctx)); -#endif HAL_Free((void *)handle); } int HAL_DTLS_Write(uintptr_t handle, const unsigned char *data, size_t datalen, size_t *written_len) { - DTLSDataParams *data_params = (DTLSDataParams *)handle; - POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(written_len, QCLOUD_ERR_INVAL); + DTLSDataParams *data_params = (DTLSDataParams *)handle; + POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(written_len, QCLOUD_ERR_INVAL); int rc = mbedtls_ssl_write(&data_params->ssl, data, datalen); - if( rc < 0 ) { - Log_e("failed! mbedtls_ssl_write returned %d", rc); - rc = QCLOUD_ERR_SSL_WRITE; - } + if (rc < 0) { + Log_e("failed! mbedtls_ssl_write returned %d", rc); + rc = QCLOUD_ERR_SSL_WRITE; + } - *written_len = rc; - rc = QCLOUD_RET_SUCCESS; + *written_len = rc; + rc = QCLOUD_RET_SUCCESS; IOT_FUNC_EXIT_RC(rc); } -int HAL_DTLS_Read(uintptr_t handle, unsigned char *data, size_t datalen, unsigned int timeout_ms, - size_t *read_len) +int HAL_DTLS_Read(uintptr_t handle, unsigned char *data, size_t datalen, unsigned int timeout_ms, size_t *read_len) { DTLSDataParams *data_params = (DTLSDataParams *)handle; POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(read_len, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(read_len, QCLOUD_ERR_INVAL); int rc = QCLOUD_ERR_SSL_READ; - mbedtls_ssl_conf_read_timeout(&(data_params->ssl_conf), timeout_ms); + mbedtls_ssl_conf_read_timeout(&(data_params->ssl_conf), timeout_ms); - do { - rc = mbedtls_ssl_read(&(data_params->ssl), data, datalen); - } while (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE); + do { + rc = mbedtls_ssl_read(&(data_params->ssl), data, datalen); + } while (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE); - if( rc <= 0 ) { - *read_len = 0; - switch( rc ) - { - case MBEDTLS_ERR_SSL_TIMEOUT: - rc = QCLOUD_ERR_SSL_READ_TIMEOUT; - break; + if (rc <= 0) { + *read_len = 0; + switch (rc) { + case MBEDTLS_ERR_SSL_TIMEOUT: + rc = QCLOUD_ERR_SSL_READ_TIMEOUT; + break; - case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: - Log_e("connection was closed gracefully"); - rc = QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY; - break; + case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: + Log_e("connection was closed gracefully"); + rc = QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY; + break; - default: - Log_e( " mbedtls_ssl_read returned -0x%x", -rc ); - break; - } - } else { - *read_len = rc; - rc = QCLOUD_RET_SUCCESS; - } + default: + Log_e(" mbedtls_ssl_read returned -0x%x", -rc); + break; + } + } else { + *read_len = rc; + rc = QCLOUD_RET_SUCCESS; + } return rc; } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c similarity index 74% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c index ebea54f5..693f1956 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/platform/tls/mbedtls/HAL_TLS_mbedtls.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -21,40 +21,36 @@ extern "C" { #ifndef AUTH_WITH_NOTLS +#include #include #include -#include +#include "mbedtls/ctr_drbg.h" +#include "mbedtls/entropy.h" +#include "mbedtls/error.h" +#include "mbedtls/net_sockets.h" +#include "mbedtls/ssl.h" #include "qcloud_iot_export_error.h" #include "qcloud_iot_export_log.h" #include "utils_param_check.h" - -#include "mbedtls/ssl.h" -#include "mbedtls/entropy.h" -#include "mbedtls/net_sockets.h" -#include "mbedtls/ctr_drbg.h" -#include "mbedtls/error.h" - #include "utils_timer.h" #ifndef AUTH_MODE_CERT -static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; +static const int ciphersuites[] = {MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0}; #endif /** * @brief data structure for mbedtls SSL connection */ typedef struct { - mbedtls_net_context socket_fd; - mbedtls_entropy_context entropy; - mbedtls_ctr_drbg_context ctr_drbg; - mbedtls_ssl_context ssl; - mbedtls_ssl_config ssl_conf; -#if defined(MBEDTLS_X509_CRT_PARSE_C) - mbedtls_x509_crt ca_cert; - mbedtls_x509_crt client_cert; -#endif - mbedtls_pk_context private_key; + mbedtls_net_context socket_fd; + mbedtls_entropy_context entropy; + mbedtls_ctr_drbg_context ctr_drbg; + mbedtls_ssl_context ssl; + mbedtls_ssl_config ssl_conf; + mbedtls_x509_crt ca_cert; + mbedtls_x509_crt client_cert; + mbedtls_pk_context private_key; } TLSDataParams; /** @@ -63,11 +59,9 @@ typedef struct { static void _free_mebedtls(TLSDataParams *pParams) { mbedtls_net_free(&(pParams->socket_fd)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); @@ -87,67 +81,61 @@ static void _free_mebedtls(TLSDataParams *pParams) * @param pConnectParams device info for TLS connection * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) { - +static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) +{ int ret = QCLOUD_RET_SUCCESS; mbedtls_net_init(&(pDataParams->socket_fd)); mbedtls_ssl_init(&(pDataParams->ssl)); mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); mbedtls_ctr_drbg_init(&(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_init(&(pDataParams->ca_cert)); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif mbedtls_entropy_init(&(pDataParams->entropy)); // custom parameter is NULL for now - if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, - &(pDataParams->entropy), NULL, 0)) != 0) { - Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret<0?-ret:ret); + if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, + 0)) != 0) { + Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_INIT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { - Log_e("parse ca crt failed returned 0x%04x", ret<0?-ret:ret); + (pConnectParams->ca_crt_len + 1)))) { + Log_e("parse ca crt failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } -#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { - Log_e("load client cert file failed returned 0x%x", ret<0?-ret:ret); + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + Log_e("load client cert file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } -#endif if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { - Log_e("load client key file failed returned 0x%x", ret<0?-ret:ret); + Log_e("load client key file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } else { - Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); + Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, + pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; - ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, + pConnectParams->psk_length, (const unsigned char *)psk_id, strlen(psk_id)); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret<0?-ret:ret); - return ret; - } + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret < 0 ? -ret : ret); + return ret; + } #endif return QCLOUD_RET_SUCCESS; @@ -161,13 +149,13 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { - int ret = 0; +int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ + int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_TCP)) != 0) { - - Log_e("tcp connect failed returned 0x%04x errno: %d", ret<0?-ret:ret, errno); + Log_e("tcp connect failed returned 0x%04x errno: %d", ret < 0 ? -ret : ret, errno); switch (ret) { case MBEDTLS_ERR_NET_SOCKET_FAILED: @@ -177,15 +165,12 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p default: return QCLOUD_ERR_TCP_CONNECT; } - } -#if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { - Log_e("set block faliled returned 0x%04x", ret<0?-ret:ret); + Log_e("set block faliled returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_TCP_CONNECT; } -#endif return QCLOUD_RET_SUCCESS; } @@ -197,68 +182,59 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p * * @return */ -#if defined(MBEDTLS_X509_CRT_PARSE_C) -int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { +int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +{ return *flags; } -#endif uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, int port) { int ret = 0; - TLSDataParams * pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); + TLSDataParams *pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { goto error; } - - Log_d("Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&(pDataParams->ssl_conf), MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_ssl_conf_verify(&(pDataParams->ssl_conf), _qcloud_server_certificate_verify, (void *)host); mbedtls_ssl_conf_authmode(&(pDataParams->ssl_conf), MBEDTLS_SSL_VERIFY_REQUIRED); -#endif mbedtls_ssl_conf_rng(&(pDataParams->ssl_conf), mbedtls_ctr_drbg_random, &(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); - if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), - &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { - Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret<0?-ret:ret); + if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), + &(pDataParams->private_key))) != 0) { + Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } -#endif mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), pConnectParams->timeout_ms); if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #ifndef AUTH_MODE_CERT // ciphersuites selection for PSK device - if(pConnectParams->psk != NULL) { + if (pConnectParams->psk != NULL) { mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); } #endif -#if defined(MBEDTLS_X509_CRT_PARSE_C) // Set the hostname to check against the received server certificate and sni if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } -#endif mbedtls_ssl_set_bio(&(pDataParams->ssl), &(pDataParams->socket_fd), mbedtls_net_send, mbedtls_net_recv, mbedtls_net_recv_timeout); @@ -271,19 +247,16 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("mbedtls_ssl_handshake failed returned 0x%04x", ret<0?-ret:ret); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) + Log_e("mbedtls_ssl_handshake failed returned 0x%04x", ret < 0 ? -ret : ret); if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { Log_e("Unable to verify the server's certificate"); } -#endif goto error; } } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { - Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -298,23 +271,22 @@ error: return 0; } -void HAL_TLS_Disconnect(uintptr_t handle) { +void HAL_TLS_Disconnect(uintptr_t handle) +{ if ((uintptr_t)NULL == handle) { Log_d("handle is NULL"); return; } TLSDataParams *pParams = (TLSDataParams *)handle; - int ret = 0; + int ret = 0; do { ret = mbedtls_ssl_close_notify(&(pParams->ssl)); } while (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE); mbedtls_net_free(&(pParams->socket_fd)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); @@ -323,25 +295,22 @@ void HAL_TLS_Disconnect(uintptr_t handle) { HAL_Free((void *)handle); } -int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, - size_t *written_len) +int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *written_len) { - Timer timer; InitTimer(&timer); - countdown_ms(&timer, (unsigned int) timeout_ms); + countdown_ms(&timer, (unsigned int)timeout_ms); size_t written_so_far; - bool errorFlag = false; - int write_rc = 0; + bool errorFlag = false; + int write_rc = 0; TLSDataParams *pParams = (TLSDataParams *)handle; for (written_so_far = 0; written_so_far < totalLen && !expired(&timer); written_so_far += write_rc) { - - while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) - { + while (!expired(&timer) && + (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) { if (write_rc != MBEDTLS_ERR_SSL_WANT_READ && write_rc != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("HAL_TLS_write failed 0x%04x", write_rc<0?-write_rc:write_rc); + Log_e("HAL_TLS_write failed 0x%04x", write_rc < 0 ? -write_rc : write_rc); errorFlag = true; break; } @@ -365,25 +334,25 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) { - - //mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even timeout + // mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even + // timeout // use non-blocking read Timer timer; InitTimer(&timer); - countdown_ms(&timer, (unsigned int) timeout_ms); + countdown_ms(&timer, (unsigned int)timeout_ms); *read_len = 0; TLSDataParams *pParams = (TLSDataParams *)handle; do { int read_rc = 0; - read_rc = mbedtls_ssl_read(&(pParams->ssl), msg + *read_len, totalLen - *read_len); + read_rc = mbedtls_ssl_read(&(pParams->ssl), msg + *read_len, totalLen - *read_len); if (read_rc > 0) { *read_len += read_rc; - } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE - && read_rc != MBEDTLS_ERR_SSL_WANT_READ && read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { - Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc<0?-read_rc:read_rc); + } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE && read_rc != MBEDTLS_ERR_SSL_WANT_READ && + read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { + Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc < 0 ? -read_rc : read_rc); return QCLOUD_ERR_SSL_READ; } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/CMakeLists.txt b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/CMakeLists.txt similarity index 85% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/CMakeLists.txt rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/CMakeLists.txt index 82851661..c2dd8322 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/CMakeLists.txt +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/CMakeLists.txt @@ -39,12 +39,22 @@ add_executable(door_mqtt_sample ${src_door_mqtt_sample}) target_link_libraries(door_mqtt_sample ${lib}) endif() -if (PLATFORM STREQUAL "linux" AND COMPILE_TOOLS STREQUAL "gcc") +# Multi-Thread Multi-Client sample +if (${FEATURE_MULTITHREAD_ENABLED} STREQUAL "ON") file(GLOB src_multi_thread_mqtt_sample ${PROJECT_SOURCE_DIR}/samples/mqtt/multi_thread_mqtt_sample.c) add_executable(multi_thread_mqtt_sample ${src_multi_thread_mqtt_sample}) target_link_libraries(multi_thread_mqtt_sample ${lib}) -endif() +if (${FEATURE_DEBUG_DEV_INFO_USED} STREQUAL "OFF") + file(GLOB src_multi_client_mqtt_sample ${PROJECT_SOURCE_DIR}/samples/multi_client/multi_client_mqtt_sample.c) + add_executable(multi_client_mqtt_sample ${src_multi_client_mqtt_sample}) + target_link_libraries(multi_client_mqtt_sample ${lib}) + + file(GLOB src_multi_client_shadow_sample ${PROJECT_SOURCE_DIR}/samples/multi_client/multi_client_shadow_sample.c) + add_executable(multi_client_shadow_sample ${src_multi_client_shadow_sample}) + target_link_libraries(multi_client_shadow_sample ${lib}) +endif() +endif() # DYN_REG if(${FEATURE_DEV_DYN_REG_ENABLED} STREQUAL "ON") diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/Makefile b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/Makefile similarity index 87% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/Makefile rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/Makefile index 86181454..fef3fdd3 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/Makefile +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/Makefile @@ -39,9 +39,9 @@ ifeq ($(FEATURE_AUTH_MODE),CERT) CFLAGS += -DAUTH_MODE_CERT endif -.PHONY: mqtt_sample ota_mqtt_sample ota_coap_sample shadow_sample coap_sample gateway_sample multi_thread_mqtt_sample dynreg_dev_sample +.PHONY: mqtt_sample ota_mqtt_sample ota_coap_sample shadow_sample coap_sample gateway_sample multi_thread_mqtt_sample dynreg_dev_sample multi_client -all: mqtt_sample ota_mqtt_sample ota_coap_sample shadow_sample coap_sample gateway_sample multi_thread_mqtt_sample dynreg_dev_sample +all: mqtt_sample ota_mqtt_sample ota_coap_sample shadow_sample coap_sample gateway_sample multi_thread_mqtt_sample dynreg_dev_sample multi_client ifneq (,$(filter -DMQTT_COMM_ENABLED,$(CFLAGS))) mqtt_sample: @@ -55,13 +55,27 @@ mqtt_sample: mv door_$@ $(FINAL_DIR)/bin && \ mv $@ $(FINAL_DIR)/bin -ifneq (,$(filter -DMULTITHREAD_TEST_ENABLED,$(CFLAGS))) +# Multi-Thread Multi-Client sample +ifneq (,$(filter -DMULTITHREAD_ENABLED,$(CFLAGS))) multi_thread_mqtt_sample: $(TOP_Q) \ $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/mqtt/$@.c $(LDFLAGS) -o $@ $(TOP_Q) \ mv $@ $(FINAL_DIR)/bin + +ifeq (,$(filter -DDEBUG_DEV_INFO_USED,$(CFLAGS))) +multi_client: + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/multi_client/$@_mqtt_sample.c $(LDFLAGS) -o $@_mqtt_sample + + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/multi_client/$@_shadow_sample.c $(LDFLAGS) -o $@_shadow_sample + + $(TOP_Q) \ + mv $@_mqtt_sample $(FINAL_DIR)/bin && \ + mv $@_shadow_sample $(FINAL_DIR)/bin +endif endif ifneq (,$(filter -DDEV_DYN_REG_ENABLED,$(CFLAGS))) diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/coap/coap_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/coap/coap_sample.c new file mode 100644 index 00000000..1404799b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/coap/coap_sample.c @@ -0,0 +1,195 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +void response_message_callback(void *coap_message, void *userContext) +{ + int ret_code = IOT_COAP_GetMessageCode(coap_message); + switch (ret_code) { + case COAP_EVENT_RECEIVE_ACK: + Log_i("message received ACK, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_RECEIVE_RESPCONTENT: { + char *payload = NULL; + int payload_len = 0; + int ret = -1; + ret = IOT_COAP_GetMessagePayload(coap_message, &payload, &payload_len); + if (ret == QCLOUD_RET_SUCCESS) { + Log_i("message received response, content: %s", payload); + } else { + Log_e("message received response, content error."); + } + } + + break; + case COAP_EVENT_UNAUTHORIZED: + Log_i("coap client auth token expired or invalid, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_FORBIDDEN: + Log_i("coap URI is invalid for this device, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_INTERNAL_SERVER_ERROR: + Log_i("coap server internal error, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_ACK_TIMEOUT: + Log_i("message receive ACK timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_SEPRESP_TIMEOUT: + Log_i("message received ACK but receive response timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + default: + break; + } +} + +void event_handler(void *pcontext, CoAPEventMessage *message) +{ + switch (message->event_type) { + case COAP_EVENT_RECEIVE_ACK: + Log_i("message received ACK, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_RECEIVE_RESPCONTENT: + Log_i("message received response, content: %s", IOT_COAP_GetMessageId(message->message)); + break; + case COAP_EVENT_UNAUTHORIZED: + Log_i("coap client auth token expired or invalid, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_FORBIDDEN: + Log_i("coap URI is invalid for this device, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_INTERNAL_SERVER_ERROR: + Log_i("coap server internal error, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_ACK_TIMEOUT: + Log_i("message receive ACK timeout, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_SEPRESP_TIMEOUT: + Log_i("message received ACK but receive response timeout, msgid: %d", + (unsigned)(uintptr_t)message->message); + break; + default: + Log_e("unrecogonized event type: %d", message->event_type); + break; + } +} + +static int _setup_connect_init_params(CoAPInitParams *initParams, DeviceInfo *device_info) +{ + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = device_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->event_handle.h_fp = event_handler; + initParams->max_retry_count = 3; + + return QCLOUD_RET_SUCCESS; +} + +int main(int argc, char **argv) +{ + int rc = QCLOUD_RET_SUCCESS; + + IOT_Log_Set_Level(eLOG_DEBUG); + + DeviceInfo device_info = {0}; + rc = HAL_GetDevInfo((void *)&device_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get device info failed: %d", rc); + return rc; + } + + CoAPInitParams init_params = DEFAULT_COAPINIT_PARAMS; + rc = _setup_connect_init_params(&init_params, &device_info); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + void *coap_client = IOT_COAP_Construct(&init_params); + if (coap_client == NULL) { + Log_e("COAP Client construct failed."); + return QCLOUD_ERR_FAILURE; + } + + do { + SendMsgParams send_params = DEFAULT_SENDMSG_PARAMS; + send_params.pay_load = "{\"action\":\"hello world\"}"; + send_params.pay_load_len = strlen("{\"action\":\"hello world\"}"); + send_params.resp_callback = response_message_callback; + + char topicName[128] = ""; + sprintf(topicName, "%s/%s/data", device_info.product_id, device_info.device_name); + Log_i("topic name is %s", topicName); + + rc = IOT_COAP_SendMessage(coap_client, topicName, &send_params); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } else { + Log_d("client topic has been sent, msg_id: %d", rc); + } + + if (!(argc >= 2 && !strcmp("loop", argv[1]))) { + HAL_SleepMs(1000); + } + + rc = IOT_COAP_Yield(coap_client, 200); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("exit with error: %d", rc); + break; + } + + if (argc >= 2) + HAL_SleepMs(1000); + + } while (argc >= 2 && !strcmp("loop", argv[1])); + + IOT_COAP_Destroy(&coap_client); + + return QCLOUD_RET_SUCCESS; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c new file mode 100644 index 00000000..20b9140a --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/dynreg_dev/dynreg_dev_sample.c @@ -0,0 +1,105 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +#ifdef AUTH_MODE_CERT +/* NULL cert file */ +#define QCLOUD_IOT_NULL_CERT_FILENAME "YOUR_DEVICE_NAME_cert.crt" +/* NULL key file */ +#define QCLOUD_IOT_NULL_KEY_FILENAME "YOUR_DEVICE_NAME_private.key" +#else +/* NULL device secret */ +#define QCLOUD_IOT_NULL_DEVICE_SECRET "YOUR_IOT_PSK" +#endif + +int main(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:")) != EOF) switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + default: + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n", + argv[0]); + + return -1; + } + + // init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + int ret; + DeviceInfo sDevInfo; + bool infoNullFlag = false; + + memset((char *)&sDevInfo, 0, sizeof(DeviceInfo)); + + ret = HAL_GetDevInfo(&sDevInfo); + +#ifdef AUTH_MODE_CERT + /* just demo the cert/key files are empty */ + if (!strcmp(sDevInfo.dev_cert_file_name, QCLOUD_IOT_NULL_CERT_FILENAME) || + !strcmp(sDevInfo.dev_key_file_name, QCLOUD_IOT_NULL_KEY_FILENAME)) { + Log_d("dev Cert not exist!"); + infoNullFlag = true; + } else { + Log_d("dev Cert exist"); + } +#else + /* just demo the PSK is empty */ + if (!strcmp(sDevInfo.device_secret, QCLOUD_IOT_NULL_DEVICE_SECRET)) { + Log_d("dev psk not exist!"); + infoNullFlag = true; + } else { + Log_d("dev psk exist"); + } +#endif + + /* device cert/key files or PSK is empty, do dynamic register to fetch */ + if (infoNullFlag) { + if (QCLOUD_RET_SUCCESS == IOT_DynReg_Device(&sDevInfo)) { + ret = HAL_SetDevInfo(&sDevInfo); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("devices info save fail"); + } else { +#ifdef AUTH_MODE_CERT + Log_d("dynamic register success, productID: %s, devName: %s, CertFile: %s, KeyFile: %s", + sDevInfo.product_id, sDevInfo.device_name, sDevInfo.dev_cert_file_name, + sDevInfo.dev_key_file_name); +#else + Log_d("dynamic register success,productID: %s, devName: %s, device_secret: %s", sDevInfo.product_id, + sDevInfo.device_name, sDevInfo.device_secret); +#endif + } + } else { + Log_e("%s dynamic register fail", sDevInfo.device_name); + } + } + + return ret; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/gateway/gateway_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/gateway/gateway_sample.c new file mode 100644 index 00000000..e4f8d733 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/gateway/gateway_sample.c @@ -0,0 +1,337 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "utils_getopt.h" + +void _event_handler(void *client, void *context, MQTTEventMsg *msg) +{ + MQTTMessage *mqtt_messge = (MQTTMessage *)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, mqtt_messge->ptopic, mqtt_messge->payload_len, mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +static void _message_handler(void *client, MQTTMessage *message, void *user_data) +{ + if (message == NULL) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", (int)message->topic_len, message->ptopic, + (int)message->payload_len, (char *)message->payload); +} + +static int _setup_gw_init_params(GatewayInitParam *gw_init_params, GatewayDeviceInfo *gw_dev_info) +{ + MQTTInitParams *init_params = &gw_init_params->init_param; + DeviceInfo * dev_info = &gw_dev_info->gw_info; + init_params->product_id = dev_info->product_id; + init_params->device_name = dev_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(init_params->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + dev_info->dev_cert_file_name); + HAL_Snprintf(init_params->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + dev_info->dev_key_file_name); +#else + HAL_Snprintf(init_params->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + dev_info->dev_cert_file_name); + HAL_Snprintf(init_params->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + dev_info->dev_key_file_name); +#endif + +#else + init_params->device_secret = dev_info->device_secret; +#endif + + init_params->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + init_params->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + init_params->auto_connect_enable = 1; + init_params->event_handle.h_fp = _event_handler; + init_params->event_handle.context = NULL; + + return QCLOUD_RET_SUCCESS; +} + +// subscribe subdev MQTT topic and wait for sub result +static int _subscribe_subdev_topic_wait_result(void *client, char *topic_keyword, QoS qos, GatewayParam *gw_info) +{ + char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", gw_info->subdev_product_id, + gw_info->subdev_device_name, topic_keyword); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = _message_handler; + + int rc = IOT_Gateway_Subscribe(client, topic_name, &sub_params); + if (rc < 0) { + Log_e("IOT_Gateway_Subscribe fail."); + return rc; + } + + int wait_cnt = 10; + while (!IOT_Gateway_IsSubReady(client, topic_name) && (wait_cnt > 0)) { + // wait for subscription result + rc = IOT_Gateway_Yield(client, 1000); + if (rc) { + Log_e("MQTT error: %d", rc); + return rc; + } + wait_cnt--; + } + + if (wait_cnt > 0) { + return QCLOUD_RET_SUCCESS; + } else { + Log_e("wait for subscribe result timeout!"); + return QCLOUD_ERR_FAILURE; + } +} + +// publish MQTT msg +static int _publish_subdev_msg(void *client, char *topic_keyword, QoS qos, GatewayParam *gw_info) +{ + char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", gw_info->subdev_product_id, + gw_info->subdev_device_name, topic_keyword); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + static int test_count = 0; + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + + char topic_content[128] = {0}; + size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"gateway_test\", \"count\": \"%d\"}", + test_count++); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + pub_params.payload = topic_content; + pub_params.payload_len = strlen(topic_content); + + return IOT_Gateway_Publish(client, topic_name, &pub_params); +} + +static int sg_loop_count = 5; +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l:")) != EOF) switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_count = atoi(utils_optarg); + if (sg_loop_count > 10000) + sg_loop_count = 10000; + else if (sg_loop_count < 0) + sg_loop_count = 1; + break; + + default: + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n" + " [-l ] \n", + argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + int rc = QCLOUD_ERR_FAILURE; + void *client = NULL; + + IOT_Log_Set_Level(eLOG_DEBUG); + + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + GatewayDeviceInfo gw_dev_info; + rc = HAL_GetGwDevInfo((void *)&gw_dev_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("Get gateway dev info err,rc:%d", rc); + return rc; + } + + GatewayInitParam init_params = DEFAULT_GATEWAY_INIT_PARAMS; + _setup_gw_init_params(&init_params, &gw_dev_info); + + client = IOT_Gateway_Construct(&init_params); + if (client == NULL) { + Log_e("client constructed failed."); + return QCLOUD_ERR_FAILURE; + } + + // make sub-device online + GatewayParam gw_param = DEFAULT_GATEWAY_PARAMS; + ; + gw_param.product_id = gw_dev_info.gw_info.product_id; + gw_param.device_name = gw_dev_info.gw_info.device_name; + + DeviceInfo *sub_dev_info; + sub_dev_info = gw_dev_info.sub_dev_info; + + gw_param.subdev_product_id = sub_dev_info->product_id; + gw_param.subdev_device_name = sub_dev_info->device_name; + +#if 0 + // one GatewayParam only support one sub-device + // use more GatewayParam to add more sub-device + GatewayParam gw_param1 = DEFAULT_GATEWAY_PARAMS;; + gw_param1.product_id = gw_dev_info.gw_info.product_id; + gw_param1.device_name = gw_dev_info.gw_info.device_name; + + gw_param1.subdev_product_id = "SUB-PRODUCT"; + gw_param1.subdev_device_name = "SUB-DEVICE"; +#endif + + rc = IOT_Gateway_Subdev_Online(client, &gw_param); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("IOT_Gateway_Subdev_Online fail."); + return rc; + } + + // gateway proxy loop for sub-device + // subscribe sub-device topic + rc = _subscribe_subdev_topic_wait_result(client, "data", QOS0, &gw_param); + if (rc) { + Log_e("Subdev Subscribe Topic Failed: %d", rc); + return rc; + } + + do { + // publish msg to sub-device topic + rc = _publish_subdev_msg(client, "data", QOS1, &gw_param); + if (rc < 0) { + Log_e("IOT_Gateway_Publish fail."); + } + + rc = IOT_Gateway_Yield(client, 200); + + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + HAL_SleepMs(1000); + + } while (--sg_loop_count > 0); + + // make sub-device offline + rc = IOT_Gateway_Subdev_Offline(client, &gw_param); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("IOT_Gateway_Subdev_Offline fail."); + return rc; + } + + rc = IOT_Gateway_Destroy(client); + + return rc; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/mqtt_sample.c new file mode 100644 index 00000000..34333395 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/mqtt_sample.c @@ -0,0 +1,356 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +// MQTT event callback +static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage *mqtt_messge = (MQTTMessage *)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, mqtt_messge->ptopic, mqtt_messge->payload_len, mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams *initParams, DeviceInfo *device_info) +{ + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = device_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _mqtt_event_handler; + initParams->event_handle.context = NULL; + + return QCLOUD_RET_SUCCESS; +} + +// publish MQTT msg +static int _publish_test_msg(void *client, char *topic_keyword, QoS qos) +{ + char topic_name[128] = {0}; + DeviceInfo *dev_info = IOT_MQTT_GetDeviceInfo(client); + + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", dev_info->product_id, dev_info->device_name, + topic_keyword); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + static int test_count = 0; + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + + char topic_content[128] = {0}; + size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"publish_test\", \"count\": \"%d\"}", + test_count++); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + pub_params.payload = topic_content; + pub_params.payload_len = strlen(topic_content); + + return IOT_MQTT_Publish(client, topic_name, &pub_params); +} + +// callback when MQTT msg arrives +static void _on_message_callback(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", (int)message->topic_len, message->ptopic, + (int)message->payload_len, (char *)message->payload); +} + +// subscribe MQTT topic and wait for sub result +static int _subscribe_topic_wait_result(void *client, char *topic_keyword, QoS qos) +{ + char topic_name[128] = {0}; + DeviceInfo *dev_info = IOT_MQTT_GetDeviceInfo(client); + + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", dev_info->product_id, dev_info->device_name, + topic_keyword); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = _on_message_callback; + + int rc = IOT_MQTT_Subscribe(client, topic_name, &sub_params); + if (rc < 0) { + Log_e("MQTT subscribe FAILED: %d", rc); + return rc; + } + + int wait_cnt = 10; + while (!IOT_MQTT_IsSubReady(client, topic_name) && (wait_cnt > 0)) { + // wait for subscription result + rc = IOT_MQTT_Yield(client, 1000); + if (rc) { + Log_e("MQTT error: %d", rc); + return rc; + } + wait_cnt--; + } + + if (wait_cnt > 0) { + return QCLOUD_RET_SUCCESS; + } else { + Log_e("wait for subscribe result timeout!"); + return QCLOUD_ERR_FAILURE; + } +} + +#ifdef LOG_UPLOAD +// init log upload module +static int _init_log_upload(MQTTInitParams *init_params) +{ + LogUploadInitParams log_init_params; + memset(&log_init_params, 0, sizeof(LogUploadInitParams)); + + log_init_params.product_id = init_params->product_id; + log_init_params.device_name = init_params->device_name; +#ifdef AUTH_MODE_CERT + log_init_params.sign_key = init_params->cert_file; +#else + log_init_params.sign_key = init_params->device_secret; +#endif + +#if defined(__linux__) || defined(WIN32) + log_init_params.read_func = HAL_Log_Read; + log_init_params.save_func = HAL_Log_Save; + log_init_params.del_func = HAL_Log_Del; + log_init_params.get_size_func = HAL_Log_Get_Size; +#endif + + return IOT_Log_Init_Uploader(&log_init_params); +} + +#endif + +static bool sg_loop_test = false; +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l")) != EOF) switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_test = true; + break; + + default: + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n" + " [-l ] loop test or not\n", + argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + int rc; + // init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + DeviceInfo device_info = {0}; + rc = HAL_GetDevInfo((void *)&device_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get device info failed: %d", rc); + return rc; + } + + // init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params, &device_info); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params error, rc = %d", rc); + return rc; + } + +#ifdef LOG_UPLOAD + // _init_log_upload should be done after _setup_connect_init_params and before IOT_MQTT_Construct + rc = _init_log_upload(&init_params); + if (rc != QCLOUD_RET_SUCCESS) + Log_e("init log upload error, rc = %d", rc); +#endif + + // create MQTT client and connect with server + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("MQTT Construct failed!"); + IOT_Log_Upload(true); + return QCLOUD_ERR_FAILURE; + } + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + + // subscribe normal topics and wait result + rc = _subscribe_topic_wait_result(client, "data", QOS0); + if (rc) { + Log_e("Client Subscribe Topic Failed: %d", rc); + IOT_Log_Upload(true); + return rc; + } + + do { + rc = _publish_test_msg(client, "data", QOS1); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } + + rc = IOT_MQTT_Yield(client, 500); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (sg_loop_test) + HAL_SleepMs(1000); + + } while (sg_loop_test); + + rc = IOT_MQTT_Destroy(&client); + + IOT_Log_Upload(true); + + return rc; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c new file mode 100644 index 00000000..210be199 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/mqtt/multi_thread_mqtt_sample.c @@ -0,0 +1,488 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "lite-utils.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +/* + * Notes for using SDK in multi-thread programing + * 1. IOT_MQTT_Yield, IOT_MQTT_Construct and IOT_MQTT_Destroy are NOT thread-safe, only calling them in the same thread + * 2. IOT_MQTT_Publish, IOT_MQTT_Subscribe and IOT_MQTT_Unsubscribe are thread-safe, and be executed in multi-threads + * simultaneously + * 3. IOT_MQTT_Yield is the only entry to read from socket and should not be hand up for long + * 4. Using IOT_MQTT_StartLoop to start a default thread for IOT_MQTT_Yield is recommended + */ + +/* + * This sample test MQTT multi-thread performance for one device. + */ + +#define MAX_PUB_THREAD_COUNT 5 +#define PUBLISH_COUNT 10 +#define THREAD_SLEEP_INTERVAL_MS 1000 +#define RX_RECEIVE_PERCENTAGE 99.0f +#define MAX_SIZE_OF_TOPIC_CONTENT 100 + +// device info +static DeviceInfo sg_device_info; + +static bool sg_sub_unsub_thread_quit; +static unsigned int sg_rx_count_array[MAX_PUB_THREAD_COUNT] + [PUBLISH_COUNT]; // record the times when msg from subscribed topic is received +static unsigned int sg_rx_msg_buf_too_big_count; // record the times when msg is oversize +static unsigned int sg_rx_unexpected_count; // record the times when unexpected msg is received +static unsigned int sg_republish_count; // record the times of re-publish +static char sg_pub_sub_test_topic[MAX_SIZE_OF_TOPIC_CONTENT]; // topic for sub/pub + +typedef struct AppThreadData { + void *client; + int thread_id; + int thread_status; +} AppThreadData; + +void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage *mqtt_messge = (MQTTMessage *)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, mqtt_messge->ptopic, mqtt_messge->payload_len, mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +static int _setup_connect_init_params(MQTTInitParams *initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_device_info); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_device_info.device_name; + initParams->product_id = sg_device_info.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_device_info.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_device_info.dev_key_file_name); +#else + initParams->device_secret = sg_device_info.device_secret; +#endif + + memset(sg_pub_sub_test_topic, 0, MAX_SIZE_OF_TOPIC_CONTENT); + HAL_Snprintf(sg_pub_sub_test_topic, MAX_SIZE_OF_TOPIC_CONTENT, "%s/%s/data", sg_device_info.product_id, + sg_device_info.device_name); + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = event_handler; + + return QCLOUD_RET_SUCCESS; +} + +static void _mqtt_message_handler(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) { + return; + } + + if (MAX_SIZE_OF_TOPIC_CONTENT >= message->payload_len) { + /* parsing payload */ + char tempBuf[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + unsigned int tempRow = 0, tempCol = 0; + char * temp = NULL; + + HAL_Snprintf(tempBuf, message->payload_len + 1, "%s", (char *)message->payload); + Log_d("Message received : %s", tempBuf); + + char *count_value = LITE_json_value_of("count", tempBuf); + if (count_value != NULL) { + tempCol = atoi(count_value); + HAL_Free(count_value); + } else { + Log_e("count value not found!"); + sg_rx_unexpected_count++; + return; + } + + char *action_value = LITE_json_value_of("action", tempBuf); + if (action_value != NULL) { + temp = strstr(action_value, "-"); + if (NULL != temp) { + tempRow = atoi(temp + 1); + HAL_Free(action_value); + } else { + HAL_Free(action_value); + Log_e("invalid action value: %s", action_value); + sg_rx_unexpected_count++; + return; + } + } else { + Log_e("action value not found!"); + sg_rx_unexpected_count++; + return; + } + + if (((tempRow - 1) < MAX_PUB_THREAD_COUNT) && (tempCol < PUBLISH_COUNT)) { + sg_rx_count_array[tempRow - 1][tempCol]++; + } else { + Log_e(" Unexpected Thread : %d, Message : %d ", tempRow, tempCol); + sg_rx_unexpected_count++; + } + } else { + sg_rx_msg_buf_too_big_count++; + } +} + +/** + * subscribe/unsubscribe test thread runner + * subscribed and unsubscribe + */ +static void _mqtt_sub_unsub_thread_runner(void *ptr) +{ + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; + char testTopic[128]; + HAL_Snprintf(testTopic, 128, "%s/%s/control", sg_device_info.product_id, sg_device_info.device_name); + + while (QCLOUD_RET_SUCCESS == rc && false == sg_sub_unsub_thread_quit) { + do { + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = QOS1; + sub_params.on_message_handler = _mqtt_message_handler; + rc = IOT_MQTT_Subscribe(pClient, testTopic, &sub_params); + + } while (QCLOUD_ERR_MQTT_NO_CONN == rc || QCLOUD_ERR_MQTT_REQUEST_TIMEOUT == rc); + + if (rc < 0) { + Log_e("Subscribe failed. Ret : %d ", rc); + } + + HAL_SleepMs(1000); + + do { + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + rc = IOT_MQTT_Unsubscribe(pClient, testTopic); + } while (QCLOUD_ERR_MQTT_NO_CONN == rc || QCLOUD_ERR_MQTT_REQUEST_TIMEOUT == rc); + + if (rc < 0) { + Log_e("Unsubscribe failed. Returned : %d ", rc); + } + } +} + +/** + * do subscribe in the thread + */ +static int _mqtt_subscribe_to_test_topic(void *pClient) +{ + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _mqtt_message_handler; + sub_params.qos = QOS1; + return IOT_MQTT_Subscribe(pClient, sg_pub_sub_test_topic, &sub_params); +} + +/** + * do publish in the thread + * loop for PUBLISH_COUNT times + * If publish failed in 1st time, do it again + */ +static void _mqtt_publish_thread_runner(void *ptr) +{ + int itr = 0; + char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + + PublishParams params; + int rc = QCLOUD_RET_SUCCESS; + AppThreadData *thread_data = (AppThreadData *)ptr; + void * pClient = thread_data->client; + int thread_id = thread_data->thread_id; + + for (itr = 0; itr < PUBLISH_COUNT; itr++) { + int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"thread-%d\", \"count\": \"%d\"}", + thread_id, itr); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + } + + params.payload = (void *)topic_content; + params.payload_len = strlen(topic_content); + params.qos = QOS1; + Log_d("Msg being published: %s", topic_content); + + do { + rc = IOT_MQTT_Publish(pClient, sg_pub_sub_test_topic, ¶ms); + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + } while (QCLOUD_ERR_MQTT_NO_CONN == rc || QCLOUD_ERR_MQTT_REQUEST_TIMEOUT == rc); + + // 1st publish failed, re-publish and update sg_republish_count + if (rc < 0) { + Log_e("Failed attempt 1 Publishing Thread : %d, Msg : %d, cs : %d ", thread_id, itr, rc); + do { + rc = IOT_MQTT_Publish(pClient, sg_pub_sub_test_topic, ¶ms); + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + } while (QCLOUD_ERR_MQTT_NO_CONN == rc); + sg_republish_count++; + if (rc < 0) { + Log_e("Failed attempt 2 Publishing Thread : %d, Msg : %d, cs : %d Second Attempt ", thread_id, itr, rc); + } + } + } + + thread_data->thread_status = 1; +} + +/** + * thread safety performance test + */ +static int _mqtt_multi_thread_test(void *client) +{ + float percent_of_rx_msg = 0.0; // record the success percentage of every pub send and recv + int finished_thread_count = 0; // record the number of finished publish threads + int rx_msg_count = 0; // record the times of successfull subscribe + // thread data passed to publish thread + AppThreadData thread_data[MAX_PUB_THREAD_COUNT] = {0}; + ThreadParams pub_thread_params[MAX_PUB_THREAD_COUNT] = {0}; + + int rc = QCLOUD_RET_SUCCESS; + int test_result = 0; + int i = 0, j = 0; + + // init the global variables + sg_rx_msg_buf_too_big_count = 0; + sg_rx_unexpected_count = 0; + sg_republish_count = 0; + + if (client == NULL) { + Log_e("MQTT client is invalid!"); + return QCLOUD_ERR_FAILURE; + } + + /* create a thread to test subscribe and unsubscribe another topic */ + ThreadParams sub_thread_params = {0}; + sub_thread_params.thread_func = _mqtt_sub_unsub_thread_runner; + sub_thread_params.user_arg = client; + + rc = HAL_ThreadCreate(&sub_thread_params); + if (rc < 0) { + Log_e("Create Sub_unsub thread failed: %d", rc); + return rc; + } + + /* subscribe the same test topic as publish threads */ + rc = _mqtt_subscribe_to_test_topic(client); + if (rc < 0) { + Log_e("Client subscribe failed: %d", rc); + return rc; + } + + /* setup the thread info for pub-threads */ + for (j = 0; j < MAX_PUB_THREAD_COUNT; j++) { + thread_data[j].client = client; + // self defined thread ID: 1 - MAX_PUB_THREAD_COUNT + thread_data[j].thread_id = j + 1; + thread_data[j].thread_status = 0; + for (i = 0; i < PUBLISH_COUNT; i++) { + sg_rx_count_array[j][i] = 0; + } + } + + /* create multi threads to test IOT_MQTT_Publish() */ + for (i = 0; i < MAX_PUB_THREAD_COUNT; i++) { + pub_thread_params[i].thread_func = _mqtt_publish_thread_runner; + pub_thread_params[i].user_arg = (void *)&thread_data[i]; + + rc = HAL_ThreadCreate(&pub_thread_params[i]); + if (rc < 0) { + Log_e("Create publish thread(ID: %d) failed: %d", thread_data[i].thread_id, rc); + } + } + + /* wait for all pub-threads to finish their jobs */ + do { + finished_thread_count = 0; + for (i = 0; i < MAX_PUB_THREAD_COUNT; i++) { + finished_thread_count += thread_data[i].thread_status; + } + + Log_i(">>>>>>>>Finished thread count : %d", finished_thread_count); + + int exit_code; + if (!IOT_MQTT_GetLoopStatus(client, &exit_code)) + Log_e("MQTT Loop thread quit with code: %d", exit_code); + + HAL_SleepMs(1000); + } while (finished_thread_count < MAX_PUB_THREAD_COUNT); + + Log_i("Publishing is finished"); + + sg_sub_unsub_thread_quit = true; + + /* Allow time for sub_sunsub thread to exit */ + HAL_SleepMs(1000); + + /* all threads should have terminated gracefully at this point. If they haven't, + * which should not be possible, something below will fail. */ + + /* Calculating Test Results */ + for (i = 0; i < PUBLISH_COUNT; i++) { + for (j = 0; j < MAX_PUB_THREAD_COUNT; j++) { + if (sg_rx_count_array[j][i] > 0) { + rx_msg_count++; + } + } + } + percent_of_rx_msg = (float)rx_msg_count * 100 / (PUBLISH_COUNT * MAX_PUB_THREAD_COUNT); + + HAL_Printf("\n\nMQTT Multi-thread Test Result : \n"); + HAL_Printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"); + if (RX_RECEIVE_PERCENTAGE <= percent_of_rx_msg && 0 == sg_rx_msg_buf_too_big_count && 0 == sg_rx_unexpected_count) { + // test success + HAL_Printf("Success! PercentOfRxMsg: %f %%\n", percent_of_rx_msg); + HAL_Printf("Published Messages: %d , Received Messages: %d \n", PUBLISH_COUNT * MAX_PUB_THREAD_COUNT, + rx_msg_count); + HAL_Printf("QoS 1 re publish count %u\n", sg_republish_count); + test_result = 0; + } else { + // test fail + HAL_Printf("\nFailure! PercentOfRxMsg: %f %%\n", percent_of_rx_msg); + HAL_Printf("Published Messages: %d , Received Messages: %d \n", PUBLISH_COUNT * MAX_PUB_THREAD_COUNT, + rx_msg_count); + HAL_Printf("\"Received message was too big than anything sent\" count: %u\n", sg_rx_msg_buf_too_big_count); + HAL_Printf("\"The number received is out of the range\" count: %u\n", sg_rx_unexpected_count); + test_result = -1; + } + HAL_Printf("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n\n"); + + return test_result; +} + +int main(int argc, char **argv) +{ + int rc; + + // Init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + // Init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + // MQTT client create and connect + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("Cloud Device Construct Failed"); + return QCLOUD_ERR_FAILURE; + } + + // Start the default loop thread to read and handle MQTT packet + rc = IOT_MQTT_StartLoop(client); + if (rc) { + Log_e("MQTT start loop failed: %d", rc); + rc = IOT_MQTT_Destroy(&client); + return rc; + } + + // Start application + rc = _mqtt_multi_thread_test(client); + if (0 != rc) { + Log_e("MQTT multi-thread test FAILED! RC: %d", rc); + } else { + Log_i("MQTT multi-thread test SUCCESS"); + } + + // Finish and destroy + IOT_MQTT_StopLoop(client); + rc = IOT_MQTT_Destroy(&client); + return rc; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_mqtt_sample.c new file mode 100644 index 00000000..1af34256 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_mqtt_sample.c @@ -0,0 +1,430 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +/* + * This sample test multi MQTT clients in multi-thread runtime. + * 3 MQTT clients run in each own thread + * psk/cert_device_info1/2/3.json for each device info are required + * data topic forward configuration is required + */ + +#define MAX_MQTT_THREAD_COUNT 3 +// record the status of all the threadss +static unsigned int sg_thread_status[MAX_MQTT_THREAD_COUNT]; + +#ifdef WIN32 +#define OS_PATH ".\\" +#else +#define OS_PATH "./" +#endif + +#ifdef AUTH_MODE_CERT +char *device_info_file[MAX_MQTT_THREAD_COUNT] = {OS_PATH "cert_device_info1.json", OS_PATH "cert_device_info2.json", + OS_PATH "cert_device_info3.json"}; +#else +char *device_info_file[MAX_MQTT_THREAD_COUNT] = {OS_PATH "psk_device_info1.json", OS_PATH "psk_device_info2.json", + OS_PATH "psk_device_info3.json"}; +#endif + +// sample data structures +typedef struct AppThreadData { + int thread_id; + char * device_info_file; + bool sub_ready; + uint32_t msg_recv_cnt; +} AppThreadData; + +static int sg_loop_cnt = 10; + +// MQTT event callback +static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage * mqtt_messge = (MQTTMessage *)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + AppThreadData *app_data = (AppThreadData *)handle_context; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, mqtt_messge->ptopic, mqtt_messge->payload_len, mqtt_messge->payload); + break; + + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_d("mqtt topic subscribe success"); + app_data->sub_ready = true; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("mqtt topic subscribe timeout"); + app_data->sub_ready = false; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("mqtt topic subscribe NACK"); + app_data->sub_ready = false; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + app_data->sub_ready = false; + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams *initParams, DeviceInfo *device_info, AppThreadData *app_data) +{ + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = device_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _mqtt_event_handler; + initParams->event_handle.context = (void *)app_data; + + return QCLOUD_RET_SUCCESS; +} + +#define MAX_SIZE_OF_TOPIC_CONTENT 100 +// publish MQTT msg +static int _publish_test_msg(void *client, char *topic_keyword, QoS qos, int count, int thread_id) +{ + char topic_name[128] = {0}; + DeviceInfo *dev_info = IOT_MQTT_GetDeviceInfo(client); + + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", dev_info->product_id, dev_info->device_name, + topic_keyword); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + + char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + + size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"text\": \"thread-%u\", \"count\": \"%d\"}", thread_id, + count); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + pub_params.payload = topic_content; + pub_params.payload_len = strlen(topic_content); + + return IOT_MQTT_Publish(client, topic_name, &pub_params); +} + +// callback when MQTT msg arrives +static void _on_message_callback(void *pClient, MQTTMessage *message, void *user_data) +{ + if (message == NULL) { + return; + } + + AppThreadData *app_data = (AppThreadData *)user_data; + app_data->msg_recv_cnt += 1; + Log_i("Thread-%d recv msg topic:%.*s, payload:%.*s", app_data->thread_id, (int)message->topic_len, message->ptopic, + (int)message->payload_len, (char *)message->payload); +} + +// subscrib MQTT topic +static int _subscribe_topic_wait_result(void *client, char *topic_keyword, QoS qos, AppThreadData *app_data) +{ + static char topic_name[128] = {0}; + DeviceInfo *dev_info = IOT_MQTT_GetDeviceInfo(client); + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", dev_info->product_id, dev_info->device_name, + topic_keyword); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = _on_message_callback; + sub_params.user_data = (void *)app_data; + int rc = IOT_MQTT_Subscribe(client, topic_name, &sub_params); + if (rc < 0) { + Log_e("MQTT subscribe failed: %d", rc); + return rc; + } + + int wait_cnt = 10; + while (!app_data->sub_ready && (wait_cnt > 0)) { + // wait for subscription result + rc = IOT_MQTT_Yield(client, 1000); + if (rc) { + Log_e("MQTT error: %d", rc); + return rc; + } + wait_cnt--; + } + + if (wait_cnt > 0) { + return QCLOUD_RET_SUCCESS; + } else { + Log_e("wait for subscribe result timeout!"); + return QCLOUD_ERR_FAILURE; + } +} + +static uint32_t _get_random_delay(void) +{ + srand((unsigned)HAL_GetTimeMs()); + /* range: 1000 - 5000 ms, in 10ms unit */ + return (rand() % 400 + 100) * 10; +} + +static void _mqtt_client_thread_runner(void *ptr) +{ + int pub_cnt = 0; + void * client = NULL; + AppThreadData *app_data = (AppThreadData *)ptr; + int thread_id = app_data->thread_id; + + DeviceInfo dev_info = {0}; + if (HAL_GetDevInfoFromFile(app_data->device_info_file, (void *)&dev_info)) { + Log_e("invalid dev info file: %s", app_data->device_info_file); + goto thread_exit; + } + + Log_i("Thread running. ID: %d; device file: %s", thread_id, app_data->device_info_file); + + // init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + int rc = _setup_connect_init_params(&init_params, &dev_info, app_data); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params error: %d", rc); + goto thread_exit; + } + + // create MQTT client and connect with server + client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("MQTT Construct failed!"); + goto thread_exit; + } + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + + // subscribe topic first + rc = _subscribe_topic_wait_result(client, "data", QOS1, app_data); + if (rc < 0) { + Log_e("Client Subscribe Topic Failed: %d", rc); + goto thread_exit; + } + + int test_count = 0; + do { + rc = _publish_test_msg(client, "data", QOS1, test_count, thread_id); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } else { + pub_cnt++; + } + + rc = IOT_MQTT_Yield(client, 1000); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + test_count++; + + if (test_count < sg_loop_cnt) + HAL_SleepMs(_get_random_delay()); + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + } while (test_count < sg_loop_cnt); + +thread_exit: + if (client != NULL) + IOT_MQTT_Destroy(&client); + + Log_i(">>>>>>>>>>Thread-%d totally pub %d msg and recv %d msg", thread_id, pub_cnt, app_data->msg_recv_cnt); + sg_thread_status[thread_id] = 1; +} + +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "l:")) != EOF) switch (c) { + case 'l': + sg_loop_cnt = atoi(utils_optarg); + break; + + default: + HAL_Printf( + "usage: %s [options]\n" + " [-l n] test loop count\n", + argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + // init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + parse_arguments(argc, argv); + + AppThreadData app_data[MAX_MQTT_THREAD_COUNT]; + + int i; + // init thread app data + for (i = 0; i < MAX_MQTT_THREAD_COUNT; i++) { + sg_thread_status[i] = 0; // init thread status flag + + app_data[i].device_info_file = device_info_file[i]; + app_data[i].thread_id = i; + app_data[i].sub_ready = false; + app_data[i].msg_recv_cnt = 0; + } + + int created_thread_cnt = 0; + /* create multi threads for multi mqtt client test */ + for (i = 0; i < MAX_MQTT_THREAD_COUNT; i++) { + sg_thread_status[i] = 0; // init thread status flag + + ThreadParams thread_params = {0}; + thread_params.thread_func = _mqtt_client_thread_runner; + thread_params.user_arg = &app_data[i]; + + int rc = HAL_ThreadCreate(&thread_params); + if (rc) { + Log_e("create mqtt thread fail: %d", rc); + } else { + created_thread_cnt++; + } + + HAL_SleepMs(300); + } + + Log_i("created %d mqtt threads", created_thread_cnt); + + /* wait for all threads to finish their jobs */ + int finished_created_thread_cnt; + do { + finished_created_thread_cnt = 0; + for (i = 0; i < MAX_MQTT_THREAD_COUNT; i++) { + finished_created_thread_cnt += sg_thread_status[i]; + } + Log_i(">>>>>>>>Finished thread count : %d", finished_created_thread_cnt); + + HAL_SleepMs(1000); + } while (finished_created_thread_cnt < created_thread_cnt); + + return 0; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_shadow_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_shadow_sample.c new file mode 100644 index 00000000..a5b53d3e --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/multi_client/multi_client_shadow_sample.c @@ -0,0 +1,304 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +/* + * This sample test multi shadow clients in multi-thread runtime. + * 3 shadow clients run in each own thread + * psk/cert_device_info1/2/3.json for each device info are required + */ + +#define MAX_MQTT_THREAD_COUNT 3 +// record the status of all the threadss +static unsigned int sg_thread_status[MAX_MQTT_THREAD_COUNT]; + +#ifdef WIN32 +#ifdef AUTH_MODE_CERT +char *device_info_file[MAX_MQTT_THREAD_COUNT] = {".\\cert_device_info1.json", ".\\cert_device_info2.json", + ".\\cert_device_info3.json"}; +#else +char *device_info_file[MAX_MQTT_THREAD_COUNT] = {".\\psk_device_info1.json", ".\\psk_device_info2.json", + ".\\psk_device_info3.json"}; +#endif +#else +#ifdef AUTH_MODE_CERT +char *device_info_file[MAX_MQTT_THREAD_COUNT] = {"./cert_device_info1.json", "./cert_device_info2.json", + "./cert_device_info3.json"}; +#else +char *device_info_file[MAX_MQTT_THREAD_COUNT] = {"./psk_device_info1.json", "./psk_device_info2.json", + "./psk_device_info3.json"}; +#endif +#endif + +// sample data structures +typedef struct SampleThreadData { + int thread_id; + char *device_info_file; + char *property_key; +} SampleThreadData; + +static int sg_loop_cnt = 10; + +void OnDeltaCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +{ + Log_i("Thread recv delta str: %s", pJsonValueBuffer); + pProperty->delta_arrived = true; +} + +void OnShadowUpdateCallback(void *pClient, Method method, RequestAck requestAck, const char *pJsonDocument, + void *pUserdata) +{ + Log_i("Thread recv shadow update response ack: %d", requestAck); +} + +static int _report_desire_null(void *handle, char *jsonBuffer, size_t sizeOfBuffer) +{ + /* device data updated, desire should be set null */ + int rc = IOT_Shadow_JSON_ConstructDesireAllNull(handle, jsonBuffer, sizeOfBuffer); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Shadow_Update(handle, jsonBuffer, sizeOfBuffer, OnShadowUpdateCallback, "desire_null", + QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + Log_d("shadow update(desired) success"); + } else { + Log_e("shadow update(desired) failed, err: %d", rc); + } + + } else { + Log_e("construct desire failed, err: %d", rc); + } + + return rc; +} + +static int _setup_connect_init_params(ShadowInitParams *initParams, DeviceInfo *device_info) +{ + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = device_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; + + return QCLOUD_RET_SUCCESS; +} + +static uint32_t _get_random_delay(void) +{ + srand((unsigned)HAL_GetTimeMs()); + /* range: 1000 - 5000 ms, in 10ms unit */ + return (rand() % 400 + 100) * 10; +} + +static void _shadow_client_thread_runner(void *ptr) +{ + int rc = QCLOUD_ERR_FAILURE; + void *shadow_client = NULL; + + SampleThreadData *thread_data = (SampleThreadData *)ptr; + int thread_id = thread_data->thread_id; + + DeviceInfo dev_info = {0}; + if (HAL_GetDevInfoFromFile(thread_data->device_info_file, (void *)&dev_info)) { + Log_e("invalid dev info file: %s", thread_data->device_info_file); + goto thread_exit; + } + + Log_i("Thread running. ID: %d; device: %s", thread_id, thread_data->device_info_file); + + char shadow_json_buffer[200]; + size_t shadow_json_buf_size = sizeof(shadow_json_buffer) / sizeof(shadow_json_buffer[0]); + DeviceProperty shadow_property; + int current_update_count = 0; + + // init connection + ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS; + rc = _setup_connect_init_params(&init_params, &dev_info); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + goto thread_exit; + } + + shadow_client = IOT_Shadow_Construct(&init_params); + if (shadow_client == NULL) { + Log_e("shadow client constructed failed."); + goto thread_exit; + } + + // register delta property + shadow_property.key = thread_data->property_key; + shadow_property.data = ¤t_update_count; + shadow_property.type = JINT32; + rc = IOT_Shadow_Register_Property(shadow_client, &shadow_property, OnDeltaCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Shadow_Destroy(shadow_client); + Log_e("register device shadow property failed, err: %d", rc); + goto thread_exit; + } + + // do get and sync operation before update + rc = IOT_Shadow_Get_Sync(shadow_client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("get device shadow failed, err: %d", rc); + goto thread_exit; + } + + int loop_cnt = 0; + while (IOT_Shadow_IsConnected(shadow_client) || QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT == rc || + QCLOUD_RET_MQTT_RECONNECTED == rc || QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Shadow_Yield(shadow_client, 500); + + if (QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT == rc) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (shadow_property.delta_arrived) { + _report_desire_null(shadow_client, shadow_json_buffer, shadow_json_buf_size); + + shadow_property.delta_arrived = false; + } + + IOT_Shadow_JSON_ConstructReport(shadow_client, shadow_json_buffer, shadow_json_buf_size, 1, &shadow_property); + rc = IOT_Shadow_Update(shadow_client, shadow_json_buffer, shadow_json_buf_size, OnShadowUpdateCallback, NULL, + QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + current_update_count++; + + if (loop_cnt++ >= sg_loop_cnt) + break; + + // sleep for some time + HAL_SleepMs(_get_random_delay()); + } + +thread_exit: + + if (shadow_client != NULL) { + IOT_Shadow_Destroy(shadow_client); + shadow_client = NULL; + } + + sg_thread_status[thread_id] = 1; +} + +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "l:")) != EOF) switch (c) { + case 'l': + sg_loop_cnt = atoi(utils_optarg); + break; + + default: + HAL_Printf( + "usage: %s [options]\n" + " [-l n] test loop count\n", + argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + // init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + parse_arguments(argc, argv); + + SampleThreadData thread_data[MAX_MQTT_THREAD_COUNT]; + + char *property_key[MAX_MQTT_THREAD_COUNT] = {"update_count_1", "update_count_2", "update_count_3"}; + + int i; + for (i = 0; i < MAX_MQTT_THREAD_COUNT; i++) { + sg_thread_status[i] = 0; // init thread status flag + thread_data[i].property_key = property_key[i]; + thread_data[i].device_info_file = device_info_file[i]; + thread_data[i].thread_id = i; + } + + int created_thread_cnt = 0; + /* create multi threads for multi mqtt client test */ + for (i = 0; i < MAX_MQTT_THREAD_COUNT; i++) { + sg_thread_status[i] = 0; // init thread status flag + + ThreadParams thread_params = {0}; + thread_params.thread_func = _shadow_client_thread_runner; + thread_params.user_arg = &thread_data[i]; + + int rc = HAL_ThreadCreate(&thread_params); + if (rc) { + Log_e("create mqtt thread fail: %d", rc); + } else { + created_thread_cnt++; + } + + HAL_SleepMs(300); + } + + Log_i("created %d shadow threads", created_thread_cnt); + + /* wait for all threads to finish their jobs */ + int finished_created_thread_cnt; + do { + finished_created_thread_cnt = 0; + for (i = 0; i < MAX_MQTT_THREAD_COUNT; i++) { + finished_created_thread_cnt += sg_thread_status[i]; + } + Log_i(">>>>>>>>Finished thread count : %d", finished_created_thread_cnt); + + HAL_SleepMs(1000); + } while (finished_created_thread_cnt < created_thread_cnt); + + return 0; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_coap_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_coap_sample.c similarity index 51% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_coap_sample.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_coap_sample.c index cdd24a1c..196a26f5 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/ota/ota_coap_sample.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_coap_sample.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,128 +20,119 @@ #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif - - -static DeviceInfo sg_devInfo; - - #define OTA_BUF_LEN (5000) -static bool sg_pub_ack = false; -static int sg_packet_id = 0; +static bool sg_pub_ack = false; +static int sg_packet_id = 0; -void response_message_callback(void* coap_message, void* userContext) +void response_message_callback(void *coap_message, void *userContext) { - int ret_code = IOT_COAP_GetMessageCode(coap_message); - switch (ret_code) { - case COAP_EVENT_RECEIVE_ACK: + int ret_code = IOT_COAP_GetMessageCode(coap_message); + switch (ret_code) { + case COAP_EVENT_RECEIVE_ACK: Log_i("message received ACK, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_RECEIVE_RESPCONTENT: - { - char* payload = NULL; - int payload_len = 0; - int ret = -1; - ret = IOT_COAP_GetMessagePayload(coap_message, &payload, &payload_len); - if (ret == QCLOUD_RET_SUCCESS) { - Log_i("message received response, content: %s", payload); - } - else { - Log_e("message received response, content error."); - } - } + break; + case COAP_EVENT_RECEIVE_RESPCONTENT: { + char *payload = NULL; + int payload_len = 0; + int ret = -1; + ret = IOT_COAP_GetMessagePayload(coap_message, &payload, &payload_len); + if (ret == QCLOUD_RET_SUCCESS) { + Log_i("message received response, content: %s", payload); + } else { + Log_e("message received response, content error."); + } + } - break; - case COAP_EVENT_UNAUTHORIZED: - Log_i("coap client auth token expired or invalid, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_FORBIDDEN: - Log_i("coap URI is invalid for this device, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_INTERNAL_SERVER_ERROR: - Log_i("coap server internal error, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_ACK_TIMEOUT: - Log_i("message receive ACK timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - case COAP_EVENT_SEPRESP_TIMEOUT: - Log_i("message received ACK but receive response timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); - break; - default: - break; - } + break; + case COAP_EVENT_UNAUTHORIZED: + Log_i("coap client auth token expired or invalid, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_FORBIDDEN: + Log_i("coap URI is invalid for this device, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_INTERNAL_SERVER_ERROR: + Log_i("coap server internal error, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_ACK_TIMEOUT: + Log_i("message receive ACK timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_SEPRESP_TIMEOUT: + Log_i("message received ACK but receive response timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + default: + break; + } } void event_handler(void *pcontext, CoAPEventMessage *message) { - switch (message->event_type) { - case COAP_EVENT_RECEIVE_ACK: - if(sg_packet_id == (unsigned)(uintptr_t)message->message){ + switch (message->event_type) { + case COAP_EVENT_RECEIVE_ACK: + if (sg_packet_id == (unsigned)(uintptr_t)message->message) { sg_pub_ack = true; } - Log_i("message received ACK, msgid: %d", sg_packet_id); - break; - case COAP_EVENT_RECEIVE_RESPCONTENT: - Log_i("message received response, content: %s", IOT_COAP_GetMessageId(message->message)); - break; - case COAP_EVENT_UNAUTHORIZED: - Log_i("coap client auth token expired or invalid, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_FORBIDDEN: - Log_i("coap URI is invalid for this device, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_INTERNAL_SERVER_ERROR: - Log_i("coap server internal error, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_ACK_TIMEOUT: - Log_i("message receive ACK timeout, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - case COAP_EVENT_SEPRESP_TIMEOUT: - Log_i("message received ACK but receive response timeout, msgid: %d", (unsigned)(uintptr_t)message->message); - break; - default: - Log_e("unrecogonized event type: %d", message->event_type); - break; - } + Log_i("message received ACK, msgid: %d", sg_packet_id); + break; + case COAP_EVENT_RECEIVE_RESPCONTENT: + Log_i("message received response, content: %s", IOT_COAP_GetMessageId(message->message)); + break; + case COAP_EVENT_UNAUTHORIZED: + Log_i("coap client auth token expired or invalid, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_FORBIDDEN: + Log_i("coap URI is invalid for this device, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_INTERNAL_SERVER_ERROR: + Log_i("coap server internal error, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_ACK_TIMEOUT: + Log_i("message receive ACK timeout, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_SEPRESP_TIMEOUT: + Log_i("message received ACK but receive response timeout, msgid: %d", + (unsigned)(uintptr_t)message->message); + break; + default: + Log_e("unrecogonized event type: %d", message->event_type); + break; + } } -static int _setup_connect_init_params(CoAPInitParams* initParams) +static int _setup_connect_init_params(CoAPInitParams *initParams, DeviceInfo *device_info) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; #ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); #else - initParams->device_secret = sg_devInfo.device_secret; + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); #endif +#else + initParams->device_secret = device_info->device_secret; +#endif - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; initParams->event_handle.h_fp = event_handler; + initParams->max_retry_count = 3; return QCLOUD_RET_SUCCESS; } @@ -151,11 +142,18 @@ int main(int argc, char **argv) IOT_Log_Set_Level(eLOG_DEBUG); int rc; + DeviceInfo device_info = {0}; + rc = HAL_GetDevInfo((void *)&device_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get device info failed: %d", rc); + return rc; + } + CoAPInitParams init_params = DEFAULT_COAPINIT_PARAMS; - rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } + rc = _setup_connect_init_params(&init_params, &device_info); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } void *client = IOT_COAP_Construct(&init_params); if (client != NULL) { @@ -165,7 +163,8 @@ int main(int argc, char **argv) return QCLOUD_ERR_FAILURE; } - void *h_ota = IOT_OTA_Init(sg_devInfo.product_id, sg_devInfo.device_name, client); + DeviceInfo *dev_info = IOT_COAP_GetDeviceInfo(client); + void * h_ota = IOT_OTA_Init(dev_info->product_id, dev_info->device_name, client); if (NULL == h_ota) { Log_e("initialize OTA failed"); return QCLOUD_ERR_FAILURE; @@ -177,10 +176,10 @@ int main(int argc, char **argv) } HAL_SleepMs(2000); - int ota_over = 0; - bool upgrade_fetch_success = true; + int ota_over = 0; + bool upgrade_fetch_success = true; FILE *fp; - char buf_ota[OTA_BUF_LEN]; + char buf_ota[OTA_BUF_LEN]; if (NULL == (fp = fopen("ota.bin", "wb+"))) { Log_e("open file failed"); return QCLOUD_ERR_FAILURE; @@ -193,7 +192,7 @@ int main(int argc, char **argv) IOT_COAP_Yield(client, 200); if (IOT_OTA_IsFetching(h_ota)) { - char version[128], md5sum[33]; + char version[128], md5sum[33]; uint32_t len, size_downloaded, size_file; do { len = IOT_OTA_FetchYield(h_ota, buf_ota, OTA_BUF_LEN, 1); @@ -235,11 +234,9 @@ int main(int argc, char **argv) HAL_SleepMs(2000); - } while(!ota_over); + } while (!ota_over); - - if (upgrade_fetch_success) - { + if (upgrade_fetch_success) { /* begin execute OTA files, should report upgrade begin */ // sg_packet_id = IOT_OTA_ReportUpgradeBegin(h_ota); // if (0 > sg_packet_id) { diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_mqtt_sample.c new file mode 100644 index 00000000..323f7651 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/ota/ota_mqtt_sample.c @@ -0,0 +1,558 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include + +#include "lite-utils.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#define FW_RUNNING_VERSION "1.0.0" +#define KEY_VER "version" +#define KEY_SIZE "downloaded_size" + +#define FW_VERSION_MAX_LEN 32 +#define FW_FILE_PATH_MAX_LEN 128 +#define OTA_BUF_LEN 5000 +#define FW_INFO_FILE_DATA_LEN 128 + +typedef struct OTAContextData { + void *ota_handle; + void *mqtt_client; + char fw_file_path[FW_FILE_PATH_MAX_LEN]; + char fw_info_file_path[FW_FILE_PATH_MAX_LEN]; + + // remote_version means version for the FW in the cloud and to be downloaded + char remote_version[FW_VERSION_MAX_LEN]; + uint32_t fw_file_size; + + // for resuming download + /* local_version means downloading but not running */ + char local_version[FW_VERSION_MAX_LEN]; + int downloaded_size; + + // to make sure report is acked + bool report_pub_ack; + int report_packet_id; + +} OTAContextData; + +static void _event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + OTAContextData *ota_ctx = (OTAContextData *)handle_context; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + if (ota_ctx->report_packet_id == packet_id) + ota_ctx->report_pub_ack = true; + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +static int _setup_connect_init_params(MQTTInitParams *initParams, void *ota_ctx, DeviceInfo *device_info) +{ + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = device_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _event_handler; + initParams->event_handle.context = ota_ctx; + + return QCLOUD_RET_SUCCESS; +} + +static void _wait_for_pub_ack(OTAContextData *ota_ctx, int packet_id) +{ + int wait_cnt = 10; + ota_ctx->report_pub_ack = false; + ota_ctx->report_packet_id = packet_id; + + while (!ota_ctx->report_pub_ack) { + HAL_SleepMs(500); + IOT_MQTT_Yield(ota_ctx->mqtt_client, 500); + if (wait_cnt-- == 0) { + Log_e("wait report pub ack timeout!"); + break; + } + } + ota_ctx->report_pub_ack = false; + return; +} + +/********************************************************************************** + * OTA file operations START + * these are platform-dependant functions + * POSIX FILE is used in this sample code + **********************************************************************************/ +// calculate left MD5 for resuming download from break point +static int _cal_exist_fw_md5(OTAContextData *ota_ctx) +{ + char buff[OTA_BUF_LEN]; + size_t rlen, total_read = 0; + int ret = QCLOUD_RET_SUCCESS; + + ret = IOT_OTA_ResetClientMD5(ota_ctx->ota_handle); + if (ret) { + Log_e("reset MD5 failed: %d", ret); + return QCLOUD_ERR_FAILURE; + } + + FILE *fp = fopen(ota_ctx->fw_file_path, "ab+"); + if (NULL == fp) { + Log_e("open file %s failed", ota_ctx->fw_file_path); + return QCLOUD_ERR_FAILURE; + } + + // rewind(fp); + size_t size = ota_ctx->downloaded_size; + + while ((size > 0) && (!feof(fp))) { + rlen = (size > OTA_BUF_LEN) ? OTA_BUF_LEN : size; + if (rlen != fread(buff, 1, rlen, fp)) { + Log_e("read data len not expected"); + ret = QCLOUD_ERR_FAILURE; + break; + } + IOT_OTA_UpdateClientMd5(ota_ctx->ota_handle, buff, rlen); + size -= rlen; + total_read += rlen; + } + + fclose(fp); + Log_d("total read: %d", total_read); + return ret; +} + +/* update local firmware info for resuming download from break point */ +static int _update_local_fw_info(OTAContextData *ota_ctx) +{ + FILE *fp; + int wlen; + int ret = QCLOUD_RET_SUCCESS; + char data_buf[FW_INFO_FILE_DATA_LEN]; + + memset(data_buf, 0, sizeof(data_buf)); + HAL_Snprintf(data_buf, sizeof(data_buf), "{\"%s\":\"%s\", \"%s\":%d}", KEY_VER, ota_ctx->remote_version, KEY_SIZE, + ota_ctx->downloaded_size); + + fp = fopen(ota_ctx->fw_info_file_path, "w"); + if (NULL == fp) { + Log_e("open file %s failed", ota_ctx->fw_info_file_path); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + wlen = fwrite(data_buf, 1, strlen(data_buf), fp); + if (wlen != strlen(data_buf)) { + Log_e("save version to file err"); + ret = QCLOUD_ERR_FAILURE; + } + +exit: + + if (NULL != fp) { + fclose(fp); + } + + return ret; +} + +static int _get_local_fw_info(char *file_name, char *local_version) +{ + int len; + int rlen; + char json_doc[FW_INFO_FILE_DATA_LEN] = {0}; + + FILE *fp = fopen(file_name, "r"); + if (NULL == fp) { + Log_e("open file %s failed", file_name); + return 0; + } + + fseek(fp, 0L, SEEK_END); + len = ftell(fp); + if (len > FW_INFO_FILE_DATA_LEN) { + Log_e("%s is too big, pls check", file_name); + fclose(fp); + return 0; + } + + rewind(fp); + rlen = fread(json_doc, 1, len, fp); + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, json_doc); + fclose(fp); + return 0; + } + + char *version = LITE_json_value_of(KEY_VER, json_doc); + char *size = LITE_json_value_of(KEY_SIZE, json_doc); + + if ((NULL == version) || (NULL == size)) { + if (version) + HAL_Free(version); + if (size) + HAL_Free(size); + fclose(fp); + return 0; + } + + int local_size = atoi(size); + HAL_Free(size); + + if (local_size <= 0) { + Log_w("local info offset invalid: %d", local_size); + HAL_Free(version); + local_size = 0; + } + + strncpy(local_version, version, FW_VERSION_MAX_LEN); + HAL_Free(version); + fclose(fp); + return local_size; +} + +/* get local firmware offset for resuming download from break point */ +static int _update_fw_downloaded_size(OTAContextData *ota_ctx) +{ + int local_size = _get_local_fw_info(ota_ctx->fw_info_file_path, ota_ctx->local_version); + if (local_size == 0) { + ota_ctx->downloaded_size = 0; + return 0; + } + + if ((0 != strcmp(ota_ctx->local_version, ota_ctx->remote_version)) || + (ota_ctx->downloaded_size > ota_ctx->fw_file_size)) { + ota_ctx->downloaded_size = 0; + return 0; + } + + ota_ctx->downloaded_size = local_size; + Log_i("calc MD5 for resuming download from offset: %d", ota_ctx->downloaded_size); + int ret = _cal_exist_fw_md5(ota_ctx); + if (ret) { + Log_e("regen OTA MD5 error: %d", ret); + remove(ota_ctx->fw_info_file_path); + ota_ctx->downloaded_size = 0; + return 0; + } + Log_d("local MD5 update done!"); + return local_size; +} + +static int _delete_fw_info_file(char *file_name) +{ + return remove(file_name); +} + +static int _save_fw_data_to_file(char *file_name, uint32_t offset, char *buf, int len) +{ + FILE *fp; + if (offset > 0) { + if (NULL == (fp = fopen(file_name, "ab+"))) { + Log_e("open file failed"); + return QCLOUD_ERR_FAILURE; + } + } else { + if (NULL == (fp = fopen(file_name, "wb+"))) { + Log_e("open file failed"); + return QCLOUD_ERR_FAILURE; + } + } + + fseek(fp, offset, SEEK_SET); + + if (1 != fwrite(buf, len, 1, fp)) { + Log_e("write data to file failed"); + fclose(fp); + return QCLOUD_ERR_FAILURE; + } + fflush(fp); + fclose(fp); + + return 0; +} + +static char *_get_local_fw_running_version() +{ + // asuming the version is inside the code and binary + // you can also get from a meta file + Log_i("FW running version: %s", FW_RUNNING_VERSION); + return FW_RUNNING_VERSION; +} +/********************************************************************************** + * OTA file operations END + **********************************************************************************/ + +// main OTA cycle +bool process_ota(OTAContextData *ota_ctx) +{ + bool download_finished = false; + bool upgrade_fetch_success = true; + char buf_ota[OTA_BUF_LEN]; + int rc; + void *h_ota = ota_ctx->ota_handle; + + /* Must report version first */ + if (0 > IOT_OTA_ReportVersion(h_ota, _get_local_fw_running_version())) { + Log_e("report OTA version failed"); + return false; + } + + do { + IOT_MQTT_Yield(ota_ctx->mqtt_client, 200); + + Log_i("wait for ota upgrade command..."); + + // recv the upgrade cmd + if (IOT_OTA_IsFetching(h_ota)) { + IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, &ota_ctx->fw_file_size, 4); + IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, ota_ctx->remote_version, FW_VERSION_MAX_LEN); + + DeviceInfo *device_info = IOT_MQTT_GetDeviceInfo(ota_ctx->mqtt_client); + HAL_Snprintf(ota_ctx->fw_file_path, FW_FILE_PATH_MAX_LEN, "./FW_%s_%s.bin", device_info->client_id, + ota_ctx->remote_version); + HAL_Snprintf(ota_ctx->fw_info_file_path, FW_FILE_PATH_MAX_LEN, "./FW_%s.json", device_info->client_id); + + /* check if pre-downloading finished or not */ + /* if local FW downloaded size (ota_ctx->downloaded_size) is not zero, it will do resuming download */ + _update_fw_downloaded_size(ota_ctx); + + /*set offset and start http connect*/ + rc = IOT_OTA_StartDownload(h_ota, ota_ctx->downloaded_size, ota_ctx->fw_file_size); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("OTA download start err,rc:%d", rc); + upgrade_fetch_success = false; + break; + } + + // download and save the fw + do { + int len = IOT_OTA_FetchYield(h_ota, buf_ota, OTA_BUF_LEN, 1); + if (len > 0) { + rc = _save_fw_data_to_file(ota_ctx->fw_file_path, ota_ctx->downloaded_size, buf_ota, len); + if (rc) { + Log_e("write data to file failed"); + upgrade_fetch_success = false; + break; + } + } else if (len < 0) { + Log_e("download fail rc=%d", len); + upgrade_fetch_success = false; + break; + } + + /* get OTA information and update local info */ + IOT_OTA_Ioctl(h_ota, IOT_OTAG_FETCHED_SIZE, &ota_ctx->downloaded_size, 4); + rc = _update_local_fw_info(ota_ctx); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("update local fw info err,rc:%d", rc); + } + + // quit ota process as something wrong with mqtt + rc = IOT_MQTT_Yield(ota_ctx->mqtt_client, 100); + if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("MQTT error: %d", rc); + return false; + } + + } while (!IOT_OTA_IsFetchFinish(h_ota)); + + /* Must check MD5 match or not */ + if (upgrade_fetch_success) { + // download is finished, delete the fw info file + _delete_fw_info_file(ota_ctx->fw_info_file_path); + + uint32_t firmware_valid; + IOT_OTA_Ioctl(h_ota, IOT_OTAG_CHECK_FIRMWARE, &firmware_valid, 4); + if (0 == firmware_valid) { + Log_e("The firmware is invalid"); + upgrade_fetch_success = false; + } else { + Log_i("The firmware is valid"); + upgrade_fetch_success = true; + } + } + + download_finished = true; + } + + if (!download_finished) + HAL_SleepMs(1000); + + } while (!download_finished); + + // do some post-download stuff for your need + + // report result + int packet_id; + if (upgrade_fetch_success) + packet_id = IOT_OTA_ReportUpgradeSuccess(h_ota, NULL); + else + packet_id = IOT_OTA_ReportUpgradeFail(h_ota, NULL); + _wait_for_pub_ack(ota_ctx, packet_id); + + return upgrade_fetch_success; +} + +int main(int argc, char **argv) +{ + int rc; + OTAContextData *ota_ctx = NULL; + void * mqtt_client = NULL; + void * h_ota = NULL; + + IOT_Log_Set_Level(eLOG_DEBUG); + ota_ctx = (OTAContextData *)HAL_Malloc(sizeof(OTAContextData)); + if (ota_ctx == NULL) { + Log_e("malloc failed"); + goto exit; + } + memset(ota_ctx, 0, sizeof(OTAContextData)); + + DeviceInfo device_info = {0}; + rc = HAL_GetDevInfo((void *)&device_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get device info failed: %d", rc); + goto exit; + } + + // setup MQTT init params + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params, ota_ctx, &device_info); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + // create MQTT mqtt_client and connect to server + mqtt_client = IOT_MQTT_Construct(&init_params); + if (mqtt_client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("Cloud Device Construct Failed"); + return QCLOUD_ERR_FAILURE; + } + + // init OTA handle + h_ota = IOT_OTA_Init(device_info.product_id, device_info.device_name, mqtt_client); + if (NULL == h_ota) { + Log_e("initialize OTA failed"); + goto exit; + } + + ota_ctx->ota_handle = h_ota; + ota_ctx->mqtt_client = mqtt_client; + + bool ota_success; + do { + // mqtt should be ready first + rc = IOT_MQTT_Yield(mqtt_client, 500); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + // OTA process + ota_success = process_ota(ota_ctx); + if (!ota_success) { + Log_e("OTA failed! Do it again"); + HAL_SleepMs(2000); + } + } while (!ota_success); + +exit: + + if (NULL != ota_ctx) + HAL_Free(ota_ctx); + + if (NULL != h_ota) + IOT_OTA_Destroy(h_ota); + + IOT_MQTT_Destroy(&mqtt_client); + + return 0; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample.c new file mode 100644 index 00000000..a9a54f1b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample.c @@ -0,0 +1,292 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "lite-utils.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +static DeviceInfo sg_devInfo; + +#define MAX_LENGTH_OF_UPDATE_JSON_BUFFER 200 + +#define ROOM_TEMPERATURE 32.0f +static float sg_desire_temperature = 20.0f; +static float sg_report_temperature = ROOM_TEMPERATURE; + +static float sg_energy_consumption = 0.0f; +static bool sg_airconditioner_openned = false; + +static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; + +#define MAX_RECV_LEN (512 + 1) + +// compare float value +bool _is_value_equal(float left, float right) +{ + if ((left < right + 0.01) && (left > right - 0.01)) + return true; + else + return false; +} + +// simulate room temperature change +static void _simulate_room_temperature(float *roomTemperature) +{ + float delta_change = 0; + + if (!sg_airconditioner_openned) { + if (!_is_value_equal(*roomTemperature, ROOM_TEMPERATURE)) { + delta_change = (*roomTemperature) > ROOM_TEMPERATURE ? -0.5 : 0.5; + } + } else { + sg_energy_consumption += 1; + if (!_is_value_equal(*roomTemperature, sg_desire_temperature)) { + delta_change = (*roomTemperature) > sg_desire_temperature ? -1.0 : 1.0; + } + } + + *roomTemperature += delta_change; +} + +// MQTT event callback +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_SUBCRIBE_SUCCESS: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +// callback when MQTT msg arrives +static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) + return; + + const char *topicName = message->ptopic; + size_t topicNameLen = message->topic_len; + + if (topicName == NULL || topicNameLen == 0) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", (int)topicNameLen, topicName, (int)message->payload_len, + (char *)message->payload); + + static char cloud_rcv_buf[MAX_RECV_LEN + 1]; + size_t len = (message->payload_len > MAX_RECV_LEN) ? MAX_RECV_LEN : (message->payload_len); + + if (message->payload_len > MAX_RECV_LEN) { + Log_e("paload len exceed buffer size"); + } + + memcpy(cloud_rcv_buf, message->payload, len); + cloud_rcv_buf[len] = '\0'; // jsmn_parse relies on a string + + char *value = LITE_json_value_of("action", cloud_rcv_buf); + if (value != NULL) { + if (strcmp(value, "come_home") == 0) { + sg_airconditioner_openned = true; + } else if (strcmp(value, "leave_home") == 0) { + sg_airconditioner_openned = false; + } + } + + HAL_Free(value); +} + +// Setup MQTT construct parameters +static int _setup_connect_init_params(ShadowInitParams *initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + sg_devInfo.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + sg_devInfo.dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_devInfo.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_devInfo.dev_key_file_name); +#endif + +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = event_handler; + + return QCLOUD_RET_SUCCESS; +} + +// subscrib MQTT topic +static int _register_subscribe_topics(void *client) +{ + static char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, + "control"); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = on_message_callback; + return IOT_Shadow_Subscribe(client, topic_name, &sub_params); +} + +int main(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:")) != EOF) switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + default: + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n", + argv[0]); + + return -1; + } + + int rc; + + // init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + // init connection + ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + void *client = IOT_Shadow_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("Cloud Device Construct Failed"); + return QCLOUD_ERR_FAILURE; + } + + // register subscribe topics here + rc = _register_subscribe_topics(client); + if (rc < 0) { + Log_e("Client Subscribe Topic Failed: %d", rc); + return rc; + } + + while (IOT_Shadow_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || + rc == QCLOUD_RET_MQTT_RECONNECTED) { + rc = IOT_Shadow_Yield(client, 200); + + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); + } + + if (sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_SUCCESS && + sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_TIMEOUT && + sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_NACK) { + Log_i("Wait for subscribe result. sg_subscribe_event_result = %d", sg_subscribe_event_result); + HAL_SleepMs(1000); + continue; + } + + _simulate_room_temperature(&sg_report_temperature); + Log_i("airConditioner state: %s", sg_airconditioner_openned ? "open" : "close"); + Log_i("currentTemperature: %f, energyConsumption: %f", sg_report_temperature, sg_energy_consumption); + + HAL_SleepMs(1000); + } + + rc = IOT_Shadow_Destroy(client); + + return rc; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c similarity index 56% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c index 5d3c05b8..1421840a 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/aircond_shadow_sample_v2.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,34 +13,27 @@ * */ +#include #include #include -#include #include -#include "utils_getopt.h" +#include "lite-utils.h" #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#include "lite-utils.h" - -#ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file -#endif +#include "utils_getopt.h" static DeviceInfo sg_devInfo; - #define MAX_LENGTH_OF_UPDATE_JSON_BUFFER 200 -#define ROOM_TEMPERATURE 32.0f -#define MAX_RECV_LEN (512 + 1) - +#define ROOM_TEMPERATURE 32.0f +#define MAX_RECV_LEN (512 + 1) static float sg_desire_temperature = 20.0f; static float sg_report_temperature = ROOM_TEMPERATURE; -static float sg_energy_consumption = 0.0f; -static bool sg_airconditioner_openned = false; +static float sg_energy_consumption = 0.0f; +static bool sg_airconditioner_openned = false; static DeviceProperty sg_energy_consumption_prop; static DeviceProperty sg_temperature_desire_prop; @@ -48,38 +41,36 @@ static DeviceProperty sg_temperature_desire_prop; static bool sg_message_arrived_on_delta = false; static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; -static bool sg_finish_shadow_get = false; +static bool sg_finish_shadow_get = false; -char sg_document_buffer[MAX_LENGTH_OF_UPDATE_JSON_BUFFER]; +char sg_document_buffer[MAX_LENGTH_OF_UPDATE_JSON_BUFFER]; size_t sg_document_buffersize = sizeof(sg_document_buffer) / sizeof(sg_document_buffer[0]); - static int _register_config_shadow_property(void *client); static int _register_subscribe_topics(void *client); - // compare float value bool _is_value_equal(float left, float right) { - if((leftright-0.01)) + if ((left < right + 0.01) && (left > right - 0.01)) return true; else return false; } // simulate room temperature change -static void _simulate_room_temperature(float *roomTemperature) +static void _simulate_room_temperature(float *roomTemperature) { float delta_change = 0; if (!sg_airconditioner_openned) { - if(!_is_value_equal(*roomTemperature, ROOM_TEMPERATURE)) { - delta_change = (*roomTemperature) > ROOM_TEMPERATURE ? -0.5: 0.5; + if (!_is_value_equal(*roomTemperature, ROOM_TEMPERATURE)) { + delta_change = (*roomTemperature) > ROOM_TEMPERATURE ? -0.5 : 0.5; } } else { sg_energy_consumption += 1; if (!_is_value_equal(*roomTemperature, sg_desire_temperature)) { - delta_change = (*roomTemperature) > sg_desire_temperature ? -1.0: 1.0; + delta_change = (*roomTemperature) > sg_desire_temperature ? -1.0 : 1.0; } } @@ -87,9 +78,8 @@ static void _simulate_room_temperature(float *roomTemperature) } // callback for request response arrives -static void on_request_handler(void *pClient, Method method, RequestAck status, const char *jsonDoc, void *userData) +static void on_request_handler(void *pClient, Method method, RequestAck status, const char *jsonDoc, void *userData) { - char *shadow_status = NULL; char *shadow_method = NULL; @@ -124,38 +114,35 @@ static void on_request_handler(void *pClient, Method method, RequestAck status, } // callback when MQTT msg arrives -static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) +static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) { if (message == NULL) return; - const char *topicName = message->ptopic; - uint16_t topicNameLen = message->topic_len; + const char *topicName = message->ptopic; + uint16_t topicNameLen = message->topic_len; if (topicName == NULL || topicNameLen == 0) { return; } - Log_i("Receive Message With topicName:%.*s, payload:%.*s", - (int) topicNameLen, topicName, (int) message->payload_len, (char *) message->payload); + Log_i("Receive Message With topicName:%.*s, payload:%.*s", (int)topicNameLen, topicName, (int)message->payload_len, + (char *)message->payload); - static char cloud_rcv_buf[MAX_RECV_LEN + 1]; - size_t len = (message->payload_len > MAX_RECV_LEN)?MAX_RECV_LEN:(message->payload_len); + static char cloud_rcv_buf[MAX_RECV_LEN + 1]; + size_t len = (message->payload_len > MAX_RECV_LEN) ? MAX_RECV_LEN : (message->payload_len); - if(message->payload_len > MAX_RECV_LEN){ - Log_e("paload len exceed buffer size"); - } + if (message->payload_len > MAX_RECV_LEN) { + Log_e("paload len exceed buffer size"); + } memcpy(cloud_rcv_buf, message->payload, len); - cloud_rcv_buf[len] = '\0'; // jsmn_parse relies on a string + cloud_rcv_buf[len] = '\0'; // jsmn_parse relies on a string - char* value = LITE_json_value_of("action", cloud_rcv_buf); + char *value = LITE_json_value_of("action", cloud_rcv_buf); if (value != NULL) { - if(strcmp(value, "come_home") == 0) - { + if (strcmp(value, "come_home") == 0) { sg_airconditioner_openned = true; - } - else if(strcmp(value, "leave_home") == 0) - { + } else if (strcmp(value, "leave_home") == 0) { sg_airconditioner_openned = false; } } @@ -164,79 +151,81 @@ static void on_message_callback(void *pClient, MQTTMessage *message, void *userD } // callback for delta msg -static void on_temperature_actuate_callback(void *pClient, const char *jsonResponse, uint32_t responseLen, DeviceProperty *context) +static void on_temperature_actuate_callback(void *pClient, const char *jsonResponse, uint32_t responseLen, + DeviceProperty *context) { Log_i("actuate callback jsonString=%s|dataLen=%u", jsonResponse, responseLen); if (context != NULL) { - Log_i("modify desire temperature to: %f", *(float *) context->data); + Log_i("modify desire temperature to: %f", *(float *)context->data); sg_message_arrived_on_delta = true; } } // MQTT event callback -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_SUBCRIBE_SUCCESS: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_TIMEOUT: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_SUBCRIBE_NACK: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } - // report energy consumption -static int _do_report_energy_consumption(void *client) +static int _do_report_energy_consumption(void *client) { - int rc = IOT_Shadow_JSON_ConstructReport(client, sg_document_buffer, sg_document_buffersize, 1, &sg_energy_consumption_prop); + int rc = IOT_Shadow_JSON_ConstructReport(client, sg_document_buffer, sg_document_buffersize, 1, + &sg_energy_consumption_prop); if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow construct report failed: %d", rc); + Log_e("shadow construct report failed: %d", rc); return rc; } Log_i("Update Shadow: %s", sg_document_buffer); - rc = IOT_Shadow_Update(client, sg_document_buffer, sg_document_buffersize, on_request_handler, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + rc = IOT_Shadow_Update(client, sg_document_buffer, sg_document_buffersize, on_request_handler, NULL, + QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); if (rc != QCLOUD_RET_SUCCESS) { Log_i("Update Shadow Failed: %d", rc); @@ -246,22 +235,24 @@ static int _do_report_energy_consumption(void *client) return rc; } -static int _do_report_temperature_desire(void *client) +static int _do_report_temperature_desire(void *client) { /* * report desire as null if recv delta or desire msg, otherwise server will keep desire record */ int rc; - rc = IOT_Shadow_JSON_ConstructReportAndDesireAllNull(client, sg_document_buffer, sg_document_buffersize, 1, &sg_temperature_desire_prop); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("shadow construct report failed: %d", rc); - return rc; - } + rc = IOT_Shadow_JSON_ConstructReportAndDesireAllNull(client, sg_document_buffer, sg_document_buffersize, 1, + &sg_temperature_desire_prop); - Log_i("update desire temperature: %s", sg_document_buffer); - rc = IOT_Shadow_Update(client, sg_document_buffer, sg_document_buffersize, on_request_handler, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow construct report failed: %d", rc); + return rc; + } + + Log_i("update desire temperature: %s", sg_document_buffer); + rc = IOT_Shadow_Update(client, sg_document_buffer, sg_document_buffersize, on_request_handler, NULL, + QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); if (rc != QCLOUD_RET_SUCCESS) { Log_i("Update Shadow Failed: %d", rc); @@ -274,39 +265,46 @@ static int _do_report_temperature_desire(void *client) } // Setup MQTT construct parameters -static int _setup_connect_init_params(ShadowInitParams* initParams) +static int _setup_connect_init_params(ShadowInitParams *initParams) { - int ret; + int ret; - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + sg_devInfo.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + sg_devInfo.dev_key_file_name); #else - initParams->device_secret = sg_devInfo.device_secret; + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_devInfo.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_devInfo.dev_key_file_name); #endif +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif - initParams->auto_connect_enable = 1; - initParams->event_handle.h_fp = event_handler; + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } @@ -314,12 +312,12 @@ static int _setup_connect_init_params(ShadowInitParams* initParams) // setup shadow properties static void _setup_shadow_data() { - //s_temperatureReportProp: device ---> shadow <---> app - sg_energy_consumption_prop.key = "energyConsumption"; + // s_temperatureReportProp: device ---> shadow <---> app + sg_energy_consumption_prop.key = "energyConsumption"; sg_energy_consumption_prop.data = &sg_energy_consumption; sg_energy_consumption_prop.type = JFLOAT; - //s_temperatureDesireProp: app ---> shadow ---> device - sg_temperature_desire_prop.key = "temperatureDesire"; + // s_temperatureDesireProp: app ---> shadow ---> device + sg_temperature_desire_prop.key = "temperatureDesire"; sg_temperature_desire_prop.data = &sg_desire_temperature; sg_temperature_desire_prop.type = JFLOAT; } @@ -335,15 +333,15 @@ static int _register_subscribe_topics(void *client) { static char topic_name[128] = {0}; - int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, "control"); - if (size < 0 || size > sizeof(topic_name) - 1) - { + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, + "control"); + if (size < 0 || size > sizeof(topic_name) - 1) { Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); return QCLOUD_ERR_FAILURE; } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.qos = QOS1; + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = QOS1; sub_params.on_message_handler = on_message_callback; return IOT_Shadow_Subscribe(client, topic_name, &sub_params); } @@ -351,33 +349,32 @@ static int _register_subscribe_topics(void *client) int main(int argc, char **argv) { int c; - while ((c = utils_getopt(argc, argv, "c:")) != EOF) - switch (c) - { + while ((c = utils_getopt(argc, argv, "c:")) != EOF) switch (c) { case 'c': if (HAL_SetDevInfoFile(utils_optarg)) return -1; break; default: - HAL_Printf("usage: %s [options]\n" - " [-c ] \n" - , argv[0]); - - return -1; + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n", + argv[0]); + + return -1; } int rc; - //init log level + // init log level IOT_Log_Set_Level(eLOG_DEBUG); - //init connection + // init connection ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS; - rc = _setup_connect_init_params(&init_params); + rc = _setup_connect_init_params(&init_params); if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + Log_e("init params err,rc=%d", rc); + return rc; + } void *client = IOT_Shadow_Construct(&init_params); if (client != NULL) { @@ -387,10 +384,10 @@ int main(int argc, char **argv) return QCLOUD_ERR_FAILURE; } - //init shadow data + // init shadow data _setup_shadow_data(); - //register config shadow propertys here + // register config shadow propertys here rc = _register_config_shadow_property(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Cloud Device Register Delta Success"); @@ -399,38 +396,35 @@ int main(int argc, char **argv) return rc; } - //pull shadow document and update local shadow version + // pull shadow document and update local shadow version IOT_Shadow_Get(client, on_request_handler, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - while(sg_finish_shadow_get == false) - { + while (sg_finish_shadow_get == false) { Log_i("Wait for Shadow Get Result"); IOT_Shadow_Yield(client, 200); HAL_SleepMs(1000); } - //register subscribe topics here + // register subscribe topics here rc = _register_subscribe_topics(client); if (rc < 0) { Log_e("Client Subscribe Topic Failed: %d", rc); return rc; } - while (IOT_Shadow_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || rc == QCLOUD_RET_MQTT_RECONNECTED) { - + while (IOT_Shadow_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || + rc == QCLOUD_RET_MQTT_RECONNECTED) { rc = IOT_Shadow_Yield(client, 200); if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { HAL_SleepMs(1000); continue; + } else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } if (sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_SUCCESS && sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_TIMEOUT && - sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_NACK) - { + sg_subscribe_event_result != MQTT_EVENT_SUBCRIBE_NACK) { Log_i("Wait for subscribe result, sg_subscribe_event_result = %d", sg_subscribe_event_result); HAL_SleepMs(1000); continue; @@ -440,9 +434,9 @@ int main(int argc, char **argv) Log_i("airConditioner state: %s", sg_airconditioner_openned ? "open" : "close"); Log_i("currentTemperature: %f, energyConsumption: %f", sg_report_temperature, sg_energy_consumption); - if (sg_message_arrived_on_delta) + if (sg_message_arrived_on_delta) _do_report_temperature_desire(client); - + if (sg_message_arrived_on_delta == false) _do_report_energy_consumption(client); diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_coap_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_coap_sample.c new file mode 100644 index 00000000..5fe78d18 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_coap_sample.c @@ -0,0 +1,194 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +#define MAX_SIZE_OF_TOPIC_CONTENT 100 + +#define PROGRAM_NAME "door_coap_sample" + +void printUsage() +{ + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n" + " [-t ]\n" + " [-a ]\n", + PROGRAM_NAME); +} + +void event_handler(void *pcontext, CoAPEventMessage *message) +{ + switch (message->event_type) { + case COAP_EVENT_RECEIVE_ACK: + Log_i("message received ACK, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_RECEIVE_RESPCONTENT: /* not supported currently */ + break; + case COAP_EVENT_UNAUTHORIZED: + Log_i("coap client auth token expired or invalid, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_FORBIDDEN: + Log_i("coap URI is invalid for this device, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_INTERNAL_SERVER_ERROR: + Log_i("coap server internal error, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_ACK_TIMEOUT: + Log_i("message receive ACK timeout, msgid: %d", (unsigned)(uintptr_t)message->message); + break; + case COAP_EVENT_SEPRESP_TIMEOUT: /* not supported currently */ + break; + default: + Log_e("unrecogonized event type: %d", message->event_type); + break; + } +} + +static int _setup_connect_init_params(CoAPInitParams *initParams, DeviceInfo *device_info) +{ + initParams->product_id = device_info->product_id; + initParams->device_name = device_info->device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + device_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + device_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = device_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->event_handle.h_fp = event_handler; + initParams->max_retry_count = 3; + + return QCLOUD_RET_SUCCESS; +} + +int main(int argc, char **argv) +{ + int c; + char action[16] = {0}; + char target_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = {0}; + + while ((c = utils_getopt(argc, argv, "c:t:a:")) != EOF) switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 't': + strncpy(target_device_name, utils_optarg, MAX_SIZE_OF_DEVICE_NAME); + break; + + case 'a': + strncpy(action, utils_optarg, sizeof(action) - 1); + break; + + default: + printUsage(); + + return -1; + } + + int rc = QCLOUD_RET_SUCCESS; + IOT_Log_Set_Level(eLOG_DEBUG); + + DeviceInfo device_info = {0}; + rc = HAL_GetDevInfo((void *)&device_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get device info failed: %d", rc); + return rc; + } + + CoAPInitParams init_params = DEFAULT_COAPINIT_PARAMS; + rc = _setup_connect_init_params(&init_params, &device_info); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + void *coap_client = IOT_COAP_Construct(&init_params); + if (coap_client == NULL) { + Log_e("COAP Client construct failed."); + return QCLOUD_ERR_FAILURE; + } else { + Log_e("%p", coap_client); + } + + if (strcmp(action, "come_home") == 0 || strcmp(action, "leave_home") == 0) { + char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + SendMsgParams send_params = DEFAULT_SENDMSG_PARAMS; + + int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"%s\", \"targetDevice\": \"%s\"}", + action, target_device_name); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + send_params.pay_load = topic_content; + send_params.pay_load_len = strlen(topic_content); + + char topicName[128] = ""; + sprintf(topicName, "%s/%s/event", device_info.product_id, device_info.device_name); + Log_i("topic name is %s", topicName); + + rc = IOT_COAP_SendMessage(coap_client, topicName, &send_params); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } else { + Log_d("client topic has been sent, msg_id: %d", rc); + } + + rc = IOT_COAP_Yield(coap_client, 200); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("exit with error: %d", rc); + } + } else { + printUsage(); + return -2; + } + + IOT_COAP_Destroy(&coap_client); + + return QCLOUD_RET_SUCCESS; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_mqtt_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_mqtt_sample.c new file mode 100644 index 00000000..4bdaa56b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/scenarized/door_mqtt_sample.c @@ -0,0 +1,237 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_getopt.h" + +#define MAX_SIZE_OF_TOPIC_CONTENT 100 + +static DeviceInfo sg_devInfo; + +static bool sg_has_rev_ack = false; + +#define PROGRAM_NAME "door_mqtt_sample" +void printUsage() +{ + HAL_Printf( + "usage: %s [options]\n" + " [-c ] \n" + " [-t ]\n" + " [-a ]\n", + PROGRAM_NAME); +} + +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + sg_has_rev_ack = true; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams *initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + sg_devInfo.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + sg_devInfo.dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_devInfo.dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + sg_devInfo.dev_key_file_name); +#endif + +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = event_handler; + + return QCLOUD_RET_SUCCESS; +} + +// publish MQTT msg +static int _publish_msg(void *client, char *action, char *targetDeviceName) +{ + if (NULL == action || NULL == targetDeviceName) + return -1; + + char topic_name[128] = {0}; + sprintf(topic_name, "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, "event"); + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = QOS1; + + char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + if (strcmp(action, "come_home") == 0 || strcmp(action, "leave_home") == 0) { + int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"%s\", \"targetDevice\": \"%s\"}", + action, targetDeviceName); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + pub_params.payload = topic_content; + pub_params.payload_len = strlen(topic_content); + } else { + printUsage(); + return -2; + } + + int rc = IOT_MQTT_Publish(client, topic_name, &pub_params); + if (rc < 0) { + Log_e("Client publish Topic:%s Failed :%d with content: %s", topic_name, rc, (char *)pub_params.payload); + return rc; + } + return 0; +} + +int main(int argc, char **argv) +{ + int c; + char action[16] = {0}; + char target_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = {0}; + + while ((c = utils_getopt(argc, argv, "c:t:a:")) != EOF) switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 't': + strncpy(target_device_name, utils_optarg, MAX_SIZE_OF_DEVICE_NAME); + break; + + case 'a': + strncpy(action, utils_optarg, sizeof(action) - 1); + break; + + default: + printUsage(); + + return -1; + } + + // init log level + IOT_Log_Set_Level(eLOG_DEBUG); + + int rc; + + // init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("Cloud Device Construct Failed"); + return QCLOUD_ERR_FAILURE; + } + + // publish msg + rc = _publish_msg(client, action, target_device_name); + if (rc < 0) { + Log_e("Demo publish fail rc=%d", rc); + } + + while (IOT_MQTT_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT || + rc == QCLOUD_RET_MQTT_RECONNECTED) { + if (false != sg_has_rev_ack) + break; + Log_i("Wait for publish ack"); + rc = IOT_MQTT_Yield(client, 200); + HAL_SleepMs(1000); + } + + rc = IOT_MQTT_Destroy(&client); + + return rc; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/shadow/shadow_sample.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/shadow/shadow_sample.c new file mode 100644 index 00000000..c1b2c186 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/samples/shadow/shadow_sample.c @@ -0,0 +1,186 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include + +#include "qcloud_iot_export.h" + +void OnDeltaCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +{ + Log_i(">>>>> Delta str: %s", pJsonValueBuffer); + pProperty->delta_arrived = true; +} + +void OnShadowUpdateCallback(void *pClient, Method method, RequestAck requestAck, const char *pJsonDocument, + void *pUserdata) +{ + Log_i("recv shadow update response, response ack: %d", requestAck); +} + +static int _report_desire_null(void *handle, char *jsonBuffer, size_t sizeOfBuffer) +{ + /* device data updated, desire should be set null */ + int rc = IOT_Shadow_JSON_ConstructDesireAllNull(handle, jsonBuffer, sizeOfBuffer); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Shadow_Update(handle, jsonBuffer, sizeOfBuffer, OnShadowUpdateCallback, "desire_null", + QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + Log_d("shadow update(desired) success"); + } else { + Log_e("shadow update(desired) failed, err: %d", rc); + } + + } else { + Log_e("construct desire failed, err: %d", rc); + } + + return rc; +} + +static int _setup_connect_init_params(ShadowInitParams *initParams, DeviceInfo *dev_info) +{ + initParams->device_name = dev_info->device_name; + initParams->product_id = dev_info->product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[16] = "certs"; + char current_path[128]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + dev_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s\\%s\\%s", current_path, certs_dir, + dev_info->dev_key_file_name); +#else + HAL_Snprintf(initParams->cert_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + dev_info->dev_cert_file_name); + HAL_Snprintf(initParams->key_file, FILE_PATH_MAX_LEN, "%s/%s/%s", current_path, certs_dir, + dev_info->dev_key_file_name); +#endif + +#else + initParams->device_secret = dev_info->device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; + + return QCLOUD_RET_SUCCESS; +} + +int demo_device_shadow() +{ + int rc = QCLOUD_ERR_FAILURE; + + void *shadow_client = NULL; + + char shadow_json_buffer[200]; + size_t shadow_json_buf_size = sizeof(shadow_json_buffer) / sizeof(shadow_json_buffer[0]); + + DeviceProperty shadow_property; + int current_update_count = 0; + + DeviceInfo device_info = {0}; + rc = HAL_GetDevInfo((void *)&device_info); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get device info failed: %d", rc); + return rc; + } + + // init connection + ShadowInitParams init_params = DEFAULT_SHAWDOW_INIT_PARAMS; + rc = _setup_connect_init_params(&init_params, &device_info); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + shadow_client = IOT_Shadow_Construct(&init_params); + if (shadow_client == NULL) { + Log_e("shadow client constructed failed."); + return QCLOUD_ERR_FAILURE; + } + + // register delta property + shadow_property.key = "updateCount"; + shadow_property.data = ¤t_update_count; + shadow_property.type = JINT32; + rc = IOT_Shadow_Register_Property(shadow_client, &shadow_property, OnDeltaCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Shadow_Destroy(shadow_client); + Log_e("register device shadow property failed, err: %d", rc); + return rc; + } + + // do get and sync operation before update + rc = IOT_Shadow_Get_Sync(shadow_client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("get device shadow failed, err: %d", rc); + return rc; + } + + while (IOT_Shadow_IsConnected(shadow_client) || QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT == rc || + QCLOUD_RET_MQTT_RECONNECTED == rc || QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Shadow_Yield(shadow_client, 500); + + if (QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT == rc) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (shadow_property.delta_arrived) { + _report_desire_null(shadow_client, shadow_json_buffer, shadow_json_buf_size); + + shadow_property.delta_arrived = false; + } + + IOT_Shadow_JSON_ConstructReport(shadow_client, shadow_json_buffer, shadow_json_buf_size, 1, &shadow_property); + rc = IOT_Shadow_Update(shadow_client, shadow_json_buffer, shadow_json_buf_size, OnShadowUpdateCallback, NULL, + QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + current_update_count++; + + // sleep for some time + HAL_SleepMs(3000); + } + + Log_e("loop exit with error: %d", rc); + + rc = IOT_Shadow_Destroy(shadow_client); + shadow_client = NULL; + + return rc; +} + +int main() +{ + IOT_Log_Set_Level(eLOG_DEBUG); + + demo_device_shadow(); + + return 0; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/CMakeLists.txt b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/CMakeLists.txt similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/CMakeLists.txt rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/CMakeLists.txt diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_client.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_client.h similarity index 62% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_client.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_client.h index f0ce1314..6bad1f88 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_client.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_client.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,7 +13,6 @@ * */ - #ifndef __AT_CLIENT_H__ #define __AT_CLIENT_H__ @@ -21,40 +20,38 @@ extern "C" { #endif +#include "config.h" +#include "stddef.h" #include "utils_ringbuff.h" +#define AT_FRAME_VERSION "1.0.0" -#define AT_FRAME_VERSION "1.0.0" +#define AT_CMD_NAME_LEN 16 +#define AT_END_MARK_LEN 4 -#define AT_CMD_NAME_LEN 16 -#define AT_END_MARK_LEN 4 +#define CLINET_BUFF_LEN (1024) +#define RING_BUFF_LEN CLINET_BUFF_LEN // uart ring buffer len +#define GET_CHAR_TIMEOUT_MS (5000) +#define CMD_RESPONSE_INTERVAL_MS (100) -#define CLINET_BUFF_LEN (1024) -#define RING_BUFF_LEN CLINET_BUFF_LEN //uart ring buffer len -#define GET_CHAR_TIMEOUT_MS (5000) -#define CMD_RESPONSE_INTERVAL_MS (100) +typedef void (*ParserFunc)(void *userContex); -typedef void *(*ParserFunc)(void *userContex); - -typedef enum -{ +typedef enum { AT_STATUS_UNINITIALIZED = 0, - AT_STATUS_INITIALIZED = 0x55, - AT_STATUS_BUSY = 0xaa, -}at_status; + AT_STATUS_INITIALIZED = 0x55, + AT_STATUS_BUSY = 0xaa, +} at_status; -enum at_resp_status -{ - AT_RESP_OK = 0, /* AT response end is OK */ - AT_RESP_ERROR = -1, /* AT response end is ERROR */ - AT_RESP_TIMEOUT = -2, /* AT response is timeout */ - AT_RESP_BUFF_FULL= -3, /* AT response buffer is full */ +enum at_resp_status { + AT_RESP_OK = 0, /* AT response end is OK */ + AT_RESP_ERROR = -1, /* AT response end is ERROR */ + AT_RESP_TIMEOUT = -2, /* AT response is timeout */ + AT_RESP_BUFF_FULL = -3, /* AT response buffer is full */ }; typedef enum at_resp_status at_resp_status_t; -typedef struct _at_response_ -{ +typedef struct _at_response_ { /* response buffer */ char *buf; /* the maximum response buffer size */ @@ -67,46 +64,43 @@ typedef struct _at_response_ int line_counts; /* the maximum response time */ uint32_t timeout; -}at_response; +} at_response; -typedef at_response * at_response_t; +typedef at_response *at_response_t; /* URC(Unsolicited Result Code) object, such as: 'RING', 'READY' request by AT server */ -typedef struct _at_urc_ -{ +typedef struct _at_urc_ { const char *cmd_prefix; const char *cmd_suffix; void (*func)(const char *data, size_t size); -}at_urc; +} at_urc; typedef at_urc *at_urc_t; -typedef struct _at_client_ -{ +typedef struct _at_client_ { at_status status; - char end_sign; - - ring_buff_t pRingBuff; + char end_sign; - char *recv_buffer; + ring_buff_t pRingBuff; + + char * recv_buffer; uint32_t recv_bufsz; uint32_t cur_recv_len; - void *lock; //pre cmd take the lock wait for resp , another cmd need wait for unlock - - at_response_t resp; + void * lock; // pre cmd take the lock wait for resp , another cmd need wait for unlock + + at_response_t resp; at_resp_status_t resp_status; const at_urc *urc_table; - uint16_t urc_table_size; - + uint16_t urc_table_size; + #ifdef AT_OS_USED - volatile void *thread_t; - void *resp_sem; // resp received, send sem to notic ack wait - ParserFunc parser; // RX parser + void * resp_sem; // resp received, send sem to notic ack wait + ParserFunc parser; // RX parser #else - //bool resp_notice; + // bool resp_notice; #endif -}at_client; +} at_client; typedef at_client *at_client_t; @@ -123,11 +117,11 @@ at_client_t at_client_get(void); int at_client_wait_connect(uint32_t timeout); /*wrapper for os and nonos delay*/ -void at_delayms(uint32_t delayms); -void at_setFlag(uint32_t flag); -void at_clearFlag(uint32_t flag); +void at_delayms(uint32_t delayms); +void at_setFlag(uint32_t flag); +void at_clearFlag(uint32_t flag); uint32_t at_getFlag(void); -bool at_waitFlag(uint32_t flag, uint32_t timeout); +bool at_waitFlag(uint32_t flag, uint32_t timeout); /* ========================== multiple AT client function ============================ */ /* set AT client a line end sign */ @@ -143,18 +137,18 @@ int at_client_obj_recv(char *buf, int size, int timeout); /* AT client send commands to AT server and waiter response */ int at_obj_exec_cmd(at_response_t resp, const char *cmd_expr, ...); -#define at_exec_cmd(resp, ...) at_obj_exec_cmd(resp, __VA_ARGS__) -#define at_client_recv(buf, size, timeout) at_client_obj_recv(buf, size, timeout) +#define at_exec_cmd(resp, ...) at_obj_exec_cmd(resp, __VA_ARGS__) +#define at_client_recv(buf, size, timeout) at_client_obj_recv(buf, size, timeout) /* AT response object create and delete */ at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t timeout); -void at_delete_resp(at_response_t resp); +void at_delete_resp(at_response_t resp); /* AT response line buffer get and parse response buffer arguments */ const char *at_resp_get_line(at_response_t resp, uint32_t resp_line); const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword); -int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char *resp_expr, ...); -int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...); +int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char *resp_expr, ...); +int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...); /* ========================== single AT client function ============================ */ void at_client_yeild(at_urc *expect_urc, uint32_t timeout); diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_socket_inf.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_socket_inf.h new file mode 100644 index 00000000..bd4aa987 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_socket_inf.h @@ -0,0 +1,87 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _AT_SOCKET_INF_H_ +#define _AT_SOCKET_INF_H_ + +#include +#include + +#include "utils_list.h" + +#define UNUSED_SOCKET (-1) +#define MAX_AT_SOCKET_NUM (5) +#define AT_SOCKET_SEND_TIMEOUT_MS (1000) +#define AT_SOCKET_RECV_TIMEOUT_MS (1000) +#define IPV4_STR_MAX_LEN (16) + +typedef enum { eNET_TCP = 6, eNET_UDP = 17, eNET_DEFAULT = 0xff } eNetProto; + +typedef enum { eSOCKET_ALLOCED = 0, eSOCKET_CONNECTED, eSOCKET_CLOSED } eSocketState; + +/* AT receive package list structure */ +typedef struct at_recv_pkt { + List list; + size_t bfsz_totle; + size_t bfsz_index; + char * buff; +} at_recv_pkt; + +typedef enum { + AT_SOCKET_EVT_RECV = 0, + AT_SOCKET_EVT_CLOSED, +} at_socket_evt_t; + +typedef void (*at_evt_cb_t)(int fd, at_socket_evt_t event, char *buff, size_t bfsz); + +/*at device driver ops, use at_device_op_register register to at socket*/ +typedef struct { + int (*init)(void); + int (*get_local_mac)(char *macbuff, size_t bufflen); + int (*get_local_ip)(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen); + int (*parse_domain)(const char *host_name, char *host_ip, size_t host_ip_len); + int (*connect)(const char *ip, uint16_t port, eNetProto proto); + int (*send)(int fd, const void *buf, size_t len); + int (*recv_timeout)(int fd, void *buf, size_t len, uint32_t timeout); + int (*close)(int fd); + void (*set_event_cb)(at_socket_evt_t event, at_evt_cb_t cb); + char *deviceName; +} at_device_op_t; + +/*at socket context*/ +typedef struct { + int fd; /** socket fd */ + List * recvpkt_list; + char remote_ip[IPV4_STR_MAX_LEN]; + uint16_t remote_port; + uint32_t send_timeout_ms; + uint32_t recv_timeout_ms; + void * recv_lock; + at_device_op_t *dev_op; + eNetProto net_type; + eSocketState state; +} at_socket_ctx_t; + +// at socket api +int at_device_op_register(at_device_op_t *device_op); +int at_socket_init(void); +int at_socket_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len); +int at_socket_get_local_mac(char *macbuff, size_t bufflen); +int at_socket_get_local_ip(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen); +int at_socket_connect(const char *host, uint16_t port, eNetProto eProto); +int at_socket_close(int fd); +int at_socket_send(int fd, const void *buf, size_t len); +int at_socket_recv(int fd, void *buf, size_t len); +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_uart_hal.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_uart_hal.h similarity index 67% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_uart_hal.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_uart_hal.h index 1b25a1e9..9a1360f9 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/at_uart_hal.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_uart_hal.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,7 +13,6 @@ * */ - #ifndef __AT_UART_HAL_H__ #define __AT_UART_HAL_H__ @@ -21,13 +20,13 @@ * UART data width */ typedef enum { - BAUDRATE_2400 = 2400, - BAUDRATE_4800 = 4800, - BAUDRATE_9600 = 9600, - BAUDRATE_19200 = 19200, - BAUDRATE_115200 = 115200, - BAUDRATE_921600 = 921600, - BAUDRATE_DEFAULT = 115200 + BAUDRATE_2400 = 2400, + BAUDRATE_4800 = 4800, + BAUDRATE_9600 = 9600, + BAUDRATE_19200 = 19200, + BAUDRATE_115200 = 115200, + BAUDRATE_921600 = 921600, + BAUDRATE_DEFAULT = 115200 } hal_uart_baudr_t; /* @@ -44,10 +43,7 @@ typedef enum { /* * UART stop bits */ -typedef enum { - STOP_BITS_1, - STOP_BITS_2 -} hal_uart_stop_bits_t; +typedef enum { STOP_BITS_1, STOP_BITS_2 } hal_uart_stop_bits_t; /* * UART flow control @@ -62,26 +58,18 @@ typedef enum { /* * UART parity */ -typedef enum { - NO_PARITY, - ODD_PARITY, - EVEN_PARITY -} hal_uart_parity_t; +typedef enum { NO_PARITY, ODD_PARITY, EVEN_PARITY } hal_uart_parity_t; /* * UART mode */ -typedef enum { - MODE_TX, - MODE_RX, - MODE_TX_RX -} hal_uart_mode_t; +typedef enum { MODE_TX, MODE_RX, MODE_TX_RX } hal_uart_mode_t; /* * UART state */ typedef enum { - eUNUSED = 0, + eUNUSED = 0, eOPENED = 1, eCLOSED = 2, } hal_uart_state_t; @@ -95,17 +83,17 @@ typedef struct { hal_uart_parity_t parity; hal_uart_stop_bits_t stop_bits; hal_uart_flow_control_t flow_control; - hal_uart_mode_t mode; + hal_uart_mode_t mode; } uart_config_t; typedef struct { #ifdef __linux__ - int fd; /* uart fd */ + int fd; /* uart fd */ #else - void *uart_handle; /* uart handle,like stm32 UART_HandleTypeDef */ + void *uart_handle; /* uart handle,like stm32 UART_HandleTypeDef */ #endif - hal_uart_state_t state; /* uart state */ - uart_config_t config; /* uart config */ + hal_uart_state_t state; /* uart state */ + uart_config_t config; /* uart config */ } uart_dev_t; #ifdef __cplusplus @@ -113,4 +101,3 @@ typedef struct { #endif #endif /* __AT_H__ */ - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_utils.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_utils.h new file mode 100644 index 00000000..cd68b196 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/at_utils.h @@ -0,0 +1,46 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _AT_UTILS_H_ +#define _AT_UTILS_H_ + +#include +#include +#include + +#define WIDTH_SIZE 32 + +#ifndef __INT_MAX__ +#define __INT_MAX__ 2147483647 +#endif + +#ifndef INT_MAX +#define INT_MAX (__INT_MAX__) +#endif + +#define AT_CMD_COMMA_MARK ',' +#define AT_CMD_DQUOTES_MARK '"' + +#define __is_print(ch) ((unsigned int)((ch) - ' ') < 127u - ' ') + +int at_vprintfln(const char *format, va_list args); +void at_print_raw_cmd(const char *name, const char *cmd, int size); +const char *at_get_last_cmd(int *cmd_size); +int at_req_parse_args(const char *req_args, const char *req_expr, ...); +int at_sscanf(const char *buf, const char *fmt, va_list args); +void at_strip(char *str, const char patten); +void chr_strip(char *str, const char patten); + +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client.h new file mode 100644 index 00000000..b7e4235f --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client.h @@ -0,0 +1,471 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef IOT_COAP_CLIENT_H_ +#define IOT_COAP_CLIENT_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "coap_client_net.h" +#include "network_interface.h" +#include "qcloud_iot_common.h" +#include "qcloud_iot_export.h" +#include "utils_list.h" +#include "utils_timer.h" + +/* COAP protocol version */ +#define COAP_MSG_VER (0x01) + +/* COAP init token */ +#define COAP_MSG_INIT_TOKEN (0x01020304) + +/* Minimal command timeout of CoAP ACK/RESP */ +#define MIN_COMMAND_TIMEOUT (500) + +/* Maximal command timeout of CoAP ACK/RESP */ +#define MAX_COMMAND_TIMEOUT (5000) + +/* Max size of conn Id */ +#define COAP_MAX_CONN_ID_LEN (6) + +/* Max size of Message id */ +#define COAP_MSG_MAX_MSG_ID ((1 << 16) - 1) + +/* Max size of Topic length */ +#define URI_PATH_MAX_LEN (128) + +/* CoAP auth success */ +#define COAP_TRUE (1) + +/* CoAP auth fail */ +#define COAP_FALSE (0) + +/* unique CoAP auth URI */ +#define COAP_AUTH_URI ("txauth9w0BAQsFA") + +/* Max size of token */ +#define COAP_MSG_MAX_TOKEN_LEN (8) + +/* COAP Max code class */ +#define COAP_MSG_MAX_CODE_CLASS (7) + +/* COAP Max code detail */ +#define COAP_MSG_MAX_CODE_DETAIL (31) + +/* Get field of Option num */ +#define COAP_MSG_OPTION_NUM(option) ((option)->option_num) + +/* Get field of Next Option */ +#define COAP_MSG_OP_NEXT(option) ((option)->next) + +/* If COAP msg is empty */ +#define COAP_MSG_IS_EMPTY(message) (((message)->code_class == 0) && ((message)->code_detail == 0)) + +/* If COAP msg is empty ACK */ +#define COAP_MSG_IS_EMPTY_ACK(message) (((message)->code_class == 2) && ((message)->code_detail == 3)) + +/* If COAP msg is RESP */ +#define COAP_MSG_IS_EMPTY_RSP(message) (((message)->code_class == 2) && ((message)->code_detail == 5)) + +/** + * @brief COAP msg type + */ +typedef enum { + COAP_MSG_REQ = 0, + COAP_MSG_SUCCESS = 2, + COAP_MSG_CLIENT_ERR = 4, + COAP_MSG_SERVER_ERR = 5, + COAP_MSG_SDKINTERNAL_ERR = 6, +} CoAPMessageClass; + +/** + * @brief COAP msg type + */ +typedef enum { COAP_MSG_GET = 1, COAP_MSG_POST = 2, COAP_MSG_PUT = 3, COAP_MSG_DELETE = 4 } CoAPRequestMethod; + +typedef enum { + /* CoAP Success Response code detail */ + COAP_MSG_CODE_201_CREATED = 01, /* Mapping to CoAP codeClass.codeDetail 2.01 */ + COAP_MSG_CODE_202_DELETED = 02, /* Mapping to CoAP codeClass.codeDetail 2.02 */ + COAP_MSG_CODE_203_VALID = 03, /* Mapping to CoAP codeClass.codeDetail 2.03 */ + COAP_MSG_CODE_204_CHANGED = 04, /* Mapping to CoAP codeClass.codeDetail 2.04 */ + COAP_MSG_CODE_205_CONTENT = 05, /* Mapping to CoAP codeClass.codeDetail 2.05 */ + COAP_MSG_CODE_231_CONTINUE = 31, /* Mapping to CoAP codeClass.codeDetail 2.31 */ + + /* CoAP Client Error Response code detail */ + COAP_MSG_CODE_400_BAD_REQUEST = 00, /* Mapping to CoAP codeClass.codeDetail 4.00 */ + COAP_MSG_CODE_401_UNAUTHORIZED = 01, /* Mapping to CoAP codeClass.codeDetail 4.01 */ + COAP_MSG_CODE_402_BAD_OPTION = 02, /* Mapping to CoAP codeClass.codeDetail 4.02 */ + COAP_MSG_CODE_403_FORBIDDEN = 03, /* Mapping to CoAP codeClass.codeDetail 4.03 */ + COAP_MSG_CODE_404_NOT_FOUND = 04, /* Mapping to CoAP codeClass.codeDetail 4.04 */ + COAP_MSG_CODE_405_METHOD_NOT_ALLOWED = 05, /* Mapping to CoAP codeClass.codeDetail 4.05 */ + COAP_MSG_CODE_406_NOT_ACCEPTABLE = 06, /* Mapping to CoAP codeClass.codeDetail 4.06 */ + COAP_MSG_CODE_408_REQUEST_ENTITY_INCOMPLETE = 8, /* Mapping to CoAP codeClass.codeDetail 4.08 */ + COAP_MSG_CODE_412_PRECONDITION_FAILED = 12, /* Mapping to CoAP codeClass.codeDetail 4.12 */ + COAP_MSG_CODE_413_REQUEST_ENTITY_TOO_LARGE = 13, /* Mapping to CoAP codeClass.codeDetail 4.13 */ + COAP_MSG_CODE_415_UNSUPPORTED_CONTENT_FORMAT = 15, /* Mapping to CoAP codeClass.codeDetail 4.15 */ + + /* CoAP Server Error Response code detail */ + COAP_MSG_CODE_500_INTERNAL_SERVER_ERROR = 00, /* Mapping to CoAP codeClass.codeDetail 5.00 */ + COAP_MSG_CODE_501_NOT_IMPLEMENTED = 01, /* Mapping to CoAP codeClass.codeDetail 5.01 */ + COAP_MSG_CODE_502_BAD_GATEWAY = 02, /* Mapping to CoAP codeClass.codeDetail 5.02 */ + COAP_MSG_CODE_503_SERVICE_UNAVAILABLE = 03, /* Mapping to CoAP codeClass.codeDetail 5.03 */ + COAP_MSG_CODE_504_GATEWAY_TIMEOUT = 04, /* Mapping to CoAP codeClass.codeDetail 5.04 */ + COAP_MSG_CODE_505_PROXYING_NOT_SUPPORTED = 05, /* Mapping to CoAP codeClass.codeDetail 5.05 */ + COAP_MSG_CODE_600_TIMEOUT = 00, /* Mapping to self define CoAP codeClass.codeDetail 6.00 */ +} CoAPRespCodeDetail; + +/** + * @brief Option number enumeration + */ +typedef enum { + COAP_MSG_IF_MATCH = 1, // If-Match option number + COAP_MSG_URI_HOST = 3, // URI-Host option number + COAP_MSG_ETAG = 4, // Entity-Tag option number + COAP_MSG_IF_NONE_MATCH = 5, // If-None-Match option number + COAP_MSG_URI_PORT = 7, // URI-Port option number + COAP_MSG_LOCATION_PATH = 8, // Location-Path option number + COAP_MSG_URI_PATH = 11, // URI-Path option number + COAP_MSG_CONTENT_FORMAT = 12, // Content-Format option number + COAP_MSG_MAX_AGE = 14, // Max-Age option number + COAP_MSG_URI_QUERY = 15, // URI-Query option number + COAP_MSG_ACCEPT = 17, // Accept option number + COAP_MSG_LOCATION_QUERY = 20, // Location-Query option number + COAP_MSG_BLOCK2 = 23, // Block2 option number + COAP_MSG_BLOCK1 = 27, // Block1 option number + COAP_MSG_SIZE2 = 28, // Size2 option number + COAP_MSG_PROXY_URI = 35, // Proxy-URI option number + COAP_MSG_PROXY_SCHEME = 39, // Proxy-Scheme option number + COAP_MSG_SIZE1 = 60, // Size1 option number + COAP_MSG_AUTH_TOKEN = 61, // auth token option number + COAP_MSG_NEED_RESP = 62, // CoAP need content response +} CoAPMsgOptionNum; + +/* CoAP QCloud IoT Client structure */ +typedef struct Client { + char is_authed; // CoAP Client auth or not + char conn_id[COAP_MAX_CONN_ID_LEN]; // conn id for a CoAP connection + + unsigned int message_token; // msg token + + char *auth_token; // auth token + int auth_token_len; + + uint16_t next_msg_id; // COAP msg id + + size_t send_buf_size; // size of write buffer + size_t read_buf_size; // size of read buffer + + unsigned char send_buf[COAP_SENDMSG_MAX_BUFLEN]; + unsigned char recv_buf[COAP_RECVMSG_MAX_BUFLEN]; + + void *lock_send_buf; // mutex/lock for write buffer + void *lock_list_wait_ack; // mutex/lock for wait ack list + + Network network_stack; // MQTT network stack + + uint32_t command_timeout_ms; // CoAP command timeout, unit:ms + + List *message_list; // msg list + + unsigned char max_retry_count; // Max retry count + + CoAPEventHandler event_handle; // event callback + + DeviceInfo device_info; + + char host_addr[HOST_STR_LENGTH]; + +#ifdef AUTH_MODE_CERT + char cert_file_path[FILE_PATH_MAX_LEN]; // full path of device cert file + char key_file_path[FILE_PATH_MAX_LEN]; // full path of device key file +#else + unsigned char psk_decode[DECODE_PSK_LENGTH]; +#endif + +} CoAPClient; + +/** + * @brief CoAP Option + */ +typedef struct coap_msg_op { + unsigned short option_num; // Option number + unsigned val_len; // Option length + char * val; // Pointer to a buffer containing the option value + struct coap_msg_op *next; // Pointer to the next option structure in the list +} CoAPMsgOption; + +/** + * @brief CoAP Option list + */ +typedef struct { + CoAPMsgOption *first; // Pointer to the first option structure in the list + CoAPMsgOption *last; // Pointer to the last option structure in the list +} CoAPMsgOptionList; + +/** + * @brief CoAP node state + */ +typedef enum { + COAP_NODE_STATE_NORMANL = 0, + COAP_NODE_STATE_INVALID, +} CoAPNodeState; + +typedef struct { + CoAPNodeState node_state; + void * user_context; + unsigned short msg_id; + char acked; + unsigned char token_len; + unsigned char token[COAP_MSG_MAX_TOKEN_LEN]; + unsigned char retrans_count; + Timer start_time; + unsigned char *message; + unsigned int msglen; + OnRespCallback handler; +} CoAPMsgSendInfo; + +/** + * @brief COAP msg type + */ +typedef enum { + COAP_MSG_CON = 0x0, /**< msg need to wait for ACK */ + COAP_MSG_NON = 0x1, /**< msg no need to wait for ACK */ + COAP_MSG_ACK = 0x2, /**< msg ACK */ + COAP_MSG_RST = 0x3 /**< msg Reset */ +} CoAPMsgType; + +/** + * @brief CoAP message structure + */ +typedef struct { + unsigned version; // CoAP protocol version + CoAPMsgType type; // msg type + + unsigned code_class; // Code class + unsigned code_detail; // Code detail + + unsigned short msg_id; // msg id + + char * pay_load; // msg payload + size_t pay_load_len; // length of payload + + char token[COAP_MSG_MAX_TOKEN_LEN]; // msg token + unsigned token_len; // length of token + + CoAPMsgOptionList op_list; // Option list + + OnRespCallback handler; // CoAP Response msg callback + void * user_context; // user context +} CoAPMessage; + +#define DEFAULT_COAP_MESSAGE \ + { \ + COAP_MSG_VER, COAP_MSG_CON, COAP_MSG_REQ, COAP_MSG_POST, 0, NULL, 0, {0}, 0, {0}, NULL, NULL \ + } + +/** + * @brief Init CoAPClient + * + * @param pClient reference to CoAP client + * @param pParams CoAP init parameters + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int qcloud_iot_coap_init(CoAPClient *pClient, CoAPInitParams *pParams); + +/** + * @brief Generate next CoAPMessage msg Id + * + * @param pClient reference to CoAP client + * @return msg Id + */ +uint16_t get_next_coap_msg_id(CoAPClient *pClient); + +/** + * @brief Generate next CoAPMessage msg token + * + * @param pClient reference to CoAP client + * @param tokenData msg token + * @return token length + */ +unsigned int get_coap_message_token(CoAPClient *client, char *tokenData); + +/** + * @brief set message type + * + * @param message CoAP msg + * @param + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_type_set(CoAPMessage *message, unsigned type); + +/** + * @brief set message code + * + * @param message CoAP msg + * @param code_class CoAPMessageClass + * @param code_detail + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_code_set(CoAPMessage *message, unsigned code_class, unsigned code_detail); + +/** + * @brief set message Id + * + * @param message CoAP msg + * @param msg_id + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_id_set(CoAPMessage *message, unsigned msg_id); + +/** + * @brief set msg token + * + * @param message CoAP msg + * @param buf token string + * @param len token length + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_token_set(CoAPMessage *message, char *buf, size_t len); + +/** + * @brief set msg payload + * + * @param message CoAP msg + * @param buf msg payload buffer + * @param len length of payload + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_payload_set(CoAPMessage *message, char *buf, size_t len); + +/** + * @brief add msg option + * + * @param message CoAP msg + * @param num option number + * @param len option length + * @param val option string + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_option_add(CoAPMessage *message, unsigned num, unsigned len, const char *val); + +/** + * @brief set msg callback + * + * @param message CoAP msg + * @param callback + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_callback_set(CoAPMessage *message, OnRespCallback callback); + +/** + * @brief set user context + * + * @param message CoAP msg + * @param userContext + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_context_set(CoAPMessage *message, void *userContext); + +/** + * @brief create CoAPMsgOption from option number/len/val + * + * @param num CoAP option number + * @param len CoAP option string len + * @param val CoAP option string value + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +CoAPMsgOption *qcloud_iot_coap_option_init(unsigned num, unsigned len, const char *val); + +/** + * @brief destroy CoAPMessage + * + * @param[in,out] message + */ +void coap_message_destroy(CoAPMessage *message); + +/** + * @brief Read and handle CoAP msg + * + * @param pClient CoAPClient + * @param timeout_ms timeout value in millisecond + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_message_cycle(CoAPClient *client, uint32_t timeout_ms); + +/** + * @brief Send CoAP msg + * + * @param client CoAPClient + * @param message msg to send + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +ssize_t coap_message_send(CoAPClient *client, CoAPMessage *message); + +/** + * @brief Read CoAP msg + * + * @param client CoAPClient + * @param timeout_ms timeout value in millisecond + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +ssize_t coap_message_recv(CoAPClient *client, uint32_t timeout_ms); + +/** + * @brief do CoAPClient auth + * + * @param client CoAPClient + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int coap_client_auth(CoAPClient *client); + +/** + * @brief Parse a message + * + * @param[in,out] message Pointer to a message structure + * @param[in] buf Pointer to a buffer containing the message + * @param[in] len Length of the buffer + * + * @returns Operation status + * @retval 0 Success + * @retval <0 Error + */ +ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len); + +/** + * @brief Format a message + * + * @param[in] message Pointer to a message structure + * @param[out] buf Pointer to a buffer to contain the formatted message + * @param[in] len Length of the buffer + * + * @returns Length of the formatted message or error code + * @retval >0 Length of the formatted message + * @retval <0 Error + */ +ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len); + +void coap_msg_dump(CoAPMessage *msg); + +#ifdef __cplusplus +} +#endif + +#endif /* IOT_COAP_CLIENT_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client_net.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client_net.h similarity index 90% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client_net.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client_net.h index b6e143c7..047afa94 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/coap_client_net.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/coap_client_net.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -23,11 +23,9 @@ extern "C" { #include #include "network_interface.h" - - + int qcloud_iot_coap_network_init(Network *pNetwork); - #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/gateway_common.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/gateway_common.h new file mode 100644 index 00000000..1b20d693 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/gateway_common.h @@ -0,0 +1,97 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef IOT_GATEWAY_COMMON_H_ +#define IOT_GATEWAY_COMMON_H_ + +#include "qcloud_iot_export.h" + +#define GATEWAY_PAYLOAD_BUFFER_LEN 1024 +#define GATEWAY_RECEIVE_BUFFER_LEN 1024 +#define GATEWAY_LOOP_MAX_COUNT 100 + +/* The format of operation of gateway topic */ +#define GATEWAY_TOPIC_OPERATION_FMT "$gateway/operation/%s/%s" + +/* The format of operation result of gateway topic */ +#define GATEWAY_TOPIC_OPERATION_RESULT_FMT "$gateway/operation/result/%s/%s" + +/* The format of gateway client id */ +#define GATEWAY_CLIENT_ID_FMT "%s/%s" + +/* The format of operation result of gateway topic */ +#define GATEWAY_PAYLOAD_STATUS_FMT \ + "{\"type\":\"%s\",\"payload\":{\"devices\":[{\"product_id\":\"%s\",\"device_name\":\"%s\"}]}}" + +/* Subdevice seesion status */ +typedef enum _SubdevSessionStatus { + /* Initial */ + SUBDEV_SEESION_STATUS_INIT, + + /* Online */ + SUBDEV_SEESION_STATUS_ONLINE, + + /* Offline */ + SUBDEV_SEESION_STATUS_OFFLINE, + + /* Maximum number of seesion status type */ + SUBDEV_SEESION_STATUS_MAX +} SubdevSessionStatus; + +/* The structure of subdevice session */ +typedef struct _SubdevSession { + char product_id[MAX_SIZE_OF_PRODUCT_ID + 1]; + char device_name[MAX_SIZE_OF_DEVICE_NAME + 1]; + SubdevSessionStatus session_status; + struct _SubdevSession *next; +} SubdevSession; + +/* The structure of common reply data */ +typedef struct _ReplyData { + int32_t result; + char client_id[MAX_SIZE_OF_CLIENT_ID + 1]; +} ReplyData; + +/* The structure of gateway data */ +typedef struct _GatewayData { + int32_t sync_status; + ReplyData online; + ReplyData offline; +} GatewayData; + +/* The structure of gateway context */ +typedef struct _Gateway { + void * mqtt; + SubdevSession * session_list; + GatewayData gateway_data; + MQTTEventHandler event_handle; + int is_construct; + char recv_buf[GATEWAY_RECEIVE_BUFFER_LEN]; +} Gateway; + +SubdevSession *subdev_add_session(Gateway *gateway, char *product_id, char *device_name); + +SubdevSession *subdev_find_session(Gateway *gateway, char *product_id, char *device_name); + +int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name); + +int gateway_subscribe_unsubscribe_topic(Gateway *gateway, char *topic_filter, SubscribeParams *params, + int is_subscribe); + +int gateway_subscribe_unsubscribe_default(Gateway *gateway, GatewayParam *param); + +int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, int32_t *result); + +#endif /* IOT_GATEWAY_COMMON_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/json_parser.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/json_parser.h similarity index 52% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/json_parser.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/json_parser.h index c7987bf3..a88a767e 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/json_parser.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/json_parser.h @@ -1,23 +1,17 @@ /* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and * limitations under the License. * */ -/** - * Edit by shockcao@tencent.com 2018/3/15 - */ #ifndef __JSON_PARSER_H__ #define __JSON_PARSER_H__ @@ -27,63 +21,47 @@ /** The descriptions of the json value node type **/ -enum JSONTYPE { - JSNONE = -1, - JSSTRING = 0, - JSOBJECT, - JSARRAY, - JSNUMBER, - JSBOOLEAN, - JSNULL, - JSTYPEMAX -}; +enum JSONTYPE { JSNONE = -1, JSSTRING = 0, JSOBJECT, JSARRAY, JSNUMBER, JSBOOLEAN, JSNULL, JSTYPEMAX }; /** The error codes produced by the JSON parsers **/ -enum JSON_PARSE_CODE { - JSON_PARSE_ERR, - JSON_PARSE_OK, - JSON_PARSE_FINISH -}; +enum JSON_PARSE_CODE { JSON_PARSE_ERR, JSON_PARSE_OK, JSON_PARSE_FINISH }; /** The return codes produced by the JSON parsers **/ -enum JSON_PARSE_RESULT { - JSON_RESULT_ERR = -1, - JSON_RESULT_OK -}; +enum JSON_PARSE_RESULT { JSON_RESULT_ERR = -1, JSON_RESULT_OK }; typedef int (*json_parse_cb)(char *p_cName, int iNameLen, char *p_cValue, int iValueLen, int iValueType, void *p_Result); /** -* @brief Parse the JSON string, and iterate through all keys and values, -* then handle the keys and values by callback function. -* -* @param[in] p_cJsonStr @n The JSON string -* @param[in] iStrLen @n The JSON string length -* @param[in] pfnCB @n Callback function -* @param[out] p_CBData @n User data -* @return JSON_RESULT_OK success, JSON_RESULT_ERR failed -* @see None. -* @note None. -**/ + * @brief Parse the JSON string, and iterate through all keys and values, + * then handle the keys and values by callback function. + * + * @param[in] p_cJsonStr @n The JSON string + * @param[in] iStrLen @n The JSON string length + * @param[in] pfnCB @n Callback function + * @param[out] p_CBData @n User data + * @return JSON_RESULT_OK success, JSON_RESULT_ERR failed + * @see None. + * @note None. + **/ int json_parse_name_value(char *p_cJsonStr, int iStrLen, json_parse_cb pfnCB, void *p_CBData); /** -* @brief Get the value by a specified key from a json string -* -* @param[in] p_cJsonStr @n the JSON string -* @param[in] iStrLen @n the JSON string length -* @param[in] p_cName @n the specified key string -* @param[out] p_iValueLen @n the value length -* @param[out] p_iValueType @n the value type -* @return A pointer to the value -* @see None. -* @note None. -**/ + * @brief Get the value by a specified key from a json string + * + * @param[in] p_cJsonStr @n the JSON string + * @param[in] iStrLen @n the JSON string length + * @param[in] p_cName @n the specified key string + * @param[out] p_iValueLen @n the value length + * @param[out] p_iValueType @n the value type + * @return A pointer to the value + * @see None. + * @note None. + **/ char *json_get_value_by_name(char *p_cJsonStr, int iStrLen, char *p_cName, int *p_iValueLen, int *p_iValueType); /** @@ -112,8 +90,8 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, char * * @note None. */ #define json_object_for_each_kv(str, pos, key, klen, val, vlen, vtype) \ - for (pos = json_get_object(JSOBJECT, str); \ - pos!=0 && *pos!=0 && (pos=json_get_next_object(JSOBJECT, pos, &key, &klen, &val, &vlen, &vtype))!=0; ) + for (pos = json_get_object(JSOBJECT, str); \ + pos != 0 && *pos != 0 && (pos = json_get_next_object(JSOBJECT, pos, &key, &klen, &val, &vlen, &vtype)) != 0;) /** * @brief retrieve each entry from the json array @@ -127,9 +105,8 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, char * * @note None. */ #define json_array_for_each_entry(str, pos, entry, len, type) \ - for (pos = json_get_object(JSARRAY, str); \ - pos!=0 && *pos!=0 && (pos=json_get_next_object(JSARRAY, ++pos, 0, 0, &entry, &len, &type))!=0; ) - + for (pos = json_get_object(JSARRAY, str); \ + pos != 0 && *pos != 0 && (pos = json_get_next_object(JSARRAY, ++pos, 0, 0, &entry, &len, &type)) != 0;) /** * @brief backup the last character to register parameters, @@ -141,9 +118,10 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, char * * @see None. * @note None. */ -#define backup_json_str_last_char(json_str, str_len, register) { \ - register = *((char *)json_str + str_len); \ - *((char *)json_str + str_len) = '\0'; \ +#define backup_json_str_last_char(json_str, str_len, register) \ + { \ + register = *((char *)json_str + str_len); \ + *((char *)json_str + str_len) = '\0'; \ } /** @@ -155,8 +133,9 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, char * * @see None. * @note None. */ -#define restore_json_str_last_char(json_str, str_len, register) { \ - *((char *)json_str + str_len) = register; \ +#define restore_json_str_last_char(json_str, str_len, register) \ + { \ + *((char *)json_str + str_len) = register; \ } -#endif /* __JSON_PARSER_H__ */ +#endif /* __JSON_PARSER_H__ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/log_upload.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/log_upload.h similarity index 86% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/log_upload.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/log_upload.h index 5d38fc17..af08a660 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/log_upload.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/log_upload.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,24 +19,23 @@ #ifdef __cplusplus extern "C" { #endif - -#include "qcloud_iot_export_log.h" +#include "qcloud_iot_export_log.h" /** * @brief init the log upload functions * * @param init_params - * @return QCLOUD_RET_SUCCESS when success + * @return QCLOUD_RET_SUCCESS when success */ int init_log_uploader(LogUploadInitParams *init_params); -/** +/** * @brief free log buffer and finish the log upload functions */ void fini_log_uploader(void); -/** +/** * @brief check if log uploader is init or not */ bool is_log_uploader_init(void); @@ -53,14 +52,15 @@ int append_to_upload_buffer(const char *log_content, size_t log_size); /** * @brief clear current upload buffer * - * @return + * @return */ void clear_upload_buffer(void); /** * @brief do one upload to server * - * @param force_upload if true, it will do upload right away, otherwise it will check log_level, buffer left and upload interval + * @param force_upload if true, it will do upload right away, otherwise it will check log_level, buffer left and upload + * interval * @return QCLOUD_RET_SUCCESS when success or no log to upload or timer is not expired */ int do_log_upload(bool force_upload); @@ -86,20 +86,18 @@ void set_log_upload_in_comm_err(bool value); * @param log_level * @return QCLOUD_RET_SUCCESS when success */ -int qcloud_get_log_level(void* client, int *log_level); +int qcloud_get_log_level(void *client, int *log_level); /** * @brief subscribe to upload log_level topic * * @param client - * @return QCLOUD_RET_SUCCESS when success + * @return QCLOUD_RET_SUCCESS when success */ int qcloud_log_topic_subscribe(void *client); - #ifdef __cplusplus } #endif -#endif //QCLOUD_IOT_LOG_UPLOAD_H_ - +#endif // QCLOUD_IOT_LOG_UPLOAD_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/mqtt_client.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h similarity index 53% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/mqtt_client.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h index 41aa7263..2fec20dd 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/mqtt_client.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/mqtt_client.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,128 +20,126 @@ extern "C" { #endif -#include #include +#include #include +#include "mqtt_client_net.h" +#include "qcloud_iot_common.h" #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#include "utils_param_check.h" - -#include "mqtt_client_net.h" - -#include "utils_timer.h" #include "utils_list.h" +#include "utils_param_check.h" +#include "utils_timer.h" /* packet id, random from [1 - 65536] */ -#define MAX_PACKET_ID (65535) +#define MAX_PACKET_ID (65535) /* Max size of conn Id */ -#define MAX_CONN_ID_LEN (6) +#define MAX_CONN_ID_LEN (6) /* Max number of topic subscribed */ -#define MAX_MESSAGE_HANDLERS (10) +#define MAX_MESSAGE_HANDLERS (10) /* Max number in repub list */ -#define MAX_REPUB_NUM (20) +#define MAX_REPUB_NUM (20) /* Minimal wait interval when reconnect */ -#define MIN_RECONNECT_WAIT_INTERVAL (1000) +#define MIN_RECONNECT_WAIT_INTERVAL (1000) /* Minimal MQTT timeout value */ -#define MIN_COMMAND_TIMEOUT (500) +#define MIN_COMMAND_TIMEOUT (500) /* Maxmal MQTT timeout value */ -#define MAX_COMMAND_TIMEOUT (20000) +#define MAX_COMMAND_TIMEOUT (20000) /* Max size of a topic name */ -#define MAX_SIZE_OF_CLOUD_TOPIC ((MAX_SIZE_OF_DEVICE_NAME) + (MAX_SIZE_OF_PRODUCT_ID) + 64 + 6) +#define MAX_SIZE_OF_CLOUD_TOPIC ((MAX_SIZE_OF_DEVICE_NAME) + (MAX_SIZE_OF_PRODUCT_ID) + 64 + 6) /* minimal TLS handshaking timeout value (unit: ms) */ -#define QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT (5 * 1000) +#define QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT (5 * 1000) +#define MQTT_RMDUP_MSG_ENABLED /** * @brief MQTT Message Type */ typedef enum msgTypes { - RESERVED = 0, // Reserved - CONNECT = 1, // Client request to connect to Server - CONNACK = 2, // Connect Acknowledgment - PUBLISH = 3, // Publish message - PUBACK = 4, // Publish Acknowledgment - PUBREC = 5, // Publish Received - PUBREL = 6, // Publish Release - PUBCOMP = 7, // Publish Complete - SUBSCRIBE = 8, // Client Subscribe request - SUBACK = 9, // Subscribe Acknowledgment - UNSUBSCRIBE = 10, // Client Unsubscribe request - UNSUBACK = 11, // Unsubscribe Acknowledgment - PINGREQ = 12, // PING Request - PINGRESP = 13, // PING Response - DISCONNECT = 14 // Client is Disconnecting + RESERVED = 0, // Reserved + CONNECT = 1, // Client request to connect to Server + CONNACK = 2, // Connect Acknowledgment + PUBLISH = 3, // Publish message + PUBACK = 4, // Publish Acknowledgment + PUBREC = 5, // Publish Received + PUBREL = 6, // Publish Release + PUBCOMP = 7, // Publish Complete + SUBSCRIBE = 8, // Client Subscribe request + SUBACK = 9, // Subscribe Acknowledgment + UNSUBSCRIBE = 10, // Client Unsubscribe request + UNSUBACK = 11, // Unsubscribe Acknowledgment + PINGREQ = 12, // PING Request + PINGRESP = 13, // PING Response + DISCONNECT = 14 // Client is Disconnecting } MessageTypes; -typedef enum { - NOTCONNECTED = 0, - CONNECTED = 1 -} ConnStatus; +typedef enum { NOTCONNECTED = 0, CONNECTED = 1 } ConnStatus; - -/** +/** * MQTT byte 1: fixed header * bits |7654: Message Type | 3:DUP flag | 21:QoS level | 0:RETAIN | */ -#define MQTT_HEADER_TYPE_SHIFT 0x04 -#define MQTT_HEADER_TYPE_MASK 0xF0 -#define MQTT_HEADER_DUP_SHIFT 0x03 -#define MQTT_HEADER_DUP_MASK 0x08 -#define MQTT_HEADER_QOS_SHIFT 0x01 -#define MQTT_HEADER_QOS_MASK 0x06 -#define MQTT_HEADER_RETAIN_MASK 0x01 - +#define MQTT_HEADER_TYPE_SHIFT 0x04 +#define MQTT_HEADER_TYPE_MASK 0xF0 +#define MQTT_HEADER_DUP_SHIFT 0x03 +#define MQTT_HEADER_DUP_MASK 0x08 +#define MQTT_HEADER_QOS_SHIFT 0x01 +#define MQTT_HEADER_QOS_MASK 0x06 +#define MQTT_HEADER_RETAIN_MASK 0x01 /** * @brief MQTT will options sturcture * */ typedef struct { - char struct_id[4]; // The eyecatcher for this structure. must be MQTW - uint8_t struct_version; // struct version = 0 - char *topic_name; - char *message; - uint8_t retained; - QoS qos; + char struct_id[4]; // The eyecatcher for this structure. must be MQTW + uint8_t struct_version; // struct version = 0 + char * topic_name; + char * message; + uint8_t retained; + QoS qos; } WillOptions; /** * default MQTT will options */ -#define DEFAULT_WILL_OPTIONS { {'M', 'Q', 'T', 'W'}, 0, NULL, NULL, 0, QOS0 } +#define DEFAULT_WILL_OPTIONS \ + { \ + {'M', 'Q', 'T', 'W'}, 0, NULL, NULL, 0, QOS0 \ + } /** * @brief define MQTT connect parameters structure * */ typedef struct { - char *client_id; // unique client id - char *username; // user name - char *password; // passwrod + char *client_id; // unique client id + char *username; // user name + char *password; // passwrod - char conn_id[MAX_CONN_ID_LEN]; + char conn_id[MAX_CONN_ID_LEN]; - char struct_id[4]; // The eyecatcher for this structure. must be MQTC. - uint8_t struct_version; // struct version = 0 - uint8_t mqtt_version; // MQTT protocol version: 4 = 3.1.1 + char struct_id[4]; // The eyecatcher for this structure. must be MQTC. + uint8_t struct_version; // struct version = 0 + uint8_t mqtt_version; // MQTT protocol version: 4 = 3.1.1 - uint16_t keep_alive_interval; // keep alive interval, unit: second - uint8_t clean_session; // flag of clean session, refer to MQTT spec 3.1.2.4 + uint16_t keep_alive_interval; // keep alive interval, unit: second + uint8_t clean_session; // flag of clean session, refer to MQTT spec 3.1.2.4 - uint8_t auto_connect_enable; // enable auto connection or not + uint8_t auto_connect_enable; // enable auto connection or not #ifdef AUTH_WITH_NOTLS - char *device_secret; // PSK - int device_secret_len; // length of PSK + char *device_secret; // PSK + int device_secret_len; // length of PSK #endif } MQTTConnectParams; @@ -150,70 +148,108 @@ typedef struct { * default value of MQTT connect parameters structure */ #ifdef AUTH_WITH_NOTLS -#define DEFAULT_MQTTCONNECT_PARAMS { NULL, NULL, NULL, {0}, {'M', 'Q', 'T', 'C'}, 0, 4, 240, 1, 1, NULL, 0} +#define DEFAULT_MQTTCONNECT_PARAMS \ + { \ + NULL, NULL, NULL, {0}, {'M', 'Q', 'T', 'C'}, 0, 4, 240, 1, 1, NULL, 0 \ + } #else -#define DEFAULT_MQTTCONNECT_PARAMS { NULL, NULL, NULL, {0}, {'M', 'Q', 'T', 'C'}, 0, 4, 240, 1, 1} +#define DEFAULT_MQTTCONNECT_PARAMS \ + { \ + NULL, NULL, NULL, {0}, {'M', 'Q', 'T', 'C'}, 0, 4, 240, 1, 1 \ + } #endif /** * @brief data structure for topic subscription handle */ typedef struct SubTopicHandle { - const char *topic_filter; // topic name, wildcard filter is supported - OnMessageHandler message_handler; // callback when msg of this subscription arrives - OnSubEventHandler sub_event_handler; // callback when event of this subscription happens - void *handler_user_data; // user context for callback - QoS qos; // QoS + const char * topic_filter; // topic name, wildcard filter is supported + OnMessageHandler message_handler; // callback when msg of this subscription arrives + OnSubEventHandler sub_event_handler; // callback when event of this subscription happens + void * handler_user_data; // user context for callback + QoS qos; // QoS } SubTopicHandle; +/** + * @brief data structure for system time service + */ +typedef struct _sys_mqtt_state { + bool topic_sub_ok; + bool result_recv_ok; + long time; +} SysMQTTState; + /** * @brief MQTT QCloud IoT Client structure */ typedef struct Client { - uint8_t is_connected; - uint8_t was_manually_disconnected; - uint8_t is_ping_outstanding; // 1 = ping request is sent while ping response not arrived yet + uint8_t is_connected; + uint8_t was_manually_disconnected; + uint8_t is_ping_outstanding; // 1 = ping request is sent while ping response not arrived yet - uint16_t next_packet_id; // MQTT random packet id - uint32_t command_timeout_ms; // MQTT command timeout, unit:ms + uint16_t next_packet_id; // MQTT random packet id + uint32_t command_timeout_ms; // MQTT command timeout, unit:ms - uint32_t current_reconnect_wait_interval; // unit:ms - uint32_t counter_network_disconnected; // number of disconnection + uint32_t current_reconnect_wait_interval; // unit:ms + uint32_t counter_network_disconnected; // number of disconnection - size_t write_buf_size; // size of MQTT write buffer - size_t read_buf_size; // size of MQTT read buffer - unsigned char write_buf[QCLOUD_IOT_MQTT_TX_BUF_LEN]; // MQTT write buffer - unsigned char read_buf[QCLOUD_IOT_MQTT_RX_BUF_LEN]; // MQTT read buffer + size_t write_buf_size; // size of MQTT write buffer + size_t read_buf_size; // size of MQTT read buffer + unsigned char write_buf[QCLOUD_IOT_MQTT_TX_BUF_LEN]; // MQTT write buffer + unsigned char read_buf[QCLOUD_IOT_MQTT_RX_BUF_LEN]; // MQTT read buffer - void *lock_generic; // mutex/lock for this client struture - void *lock_write_buf; // mutex/lock for write buffer + void *lock_generic; // mutex/lock for this client struture + void *lock_write_buf; // mutex/lock for write buffer - void *lock_list_pub; // mutex/lock for puback waiting list - void *lock_list_sub; // mutex/lock for suback waiting list + void *lock_list_pub; // mutex/lock for puback waiting list + void *lock_list_sub; // mutex/lock for suback waiting list - List *list_pub_wait_ack; // puback waiting list - List *list_sub_wait_ack; // suback waiting list + List *list_pub_wait_ack; // puback waiting list + List *list_sub_wait_ack; // suback waiting list - MQTTEventHandler event_handle; // callback for MQTT event + MQTTEventHandler event_handle; // callback for MQTT event - MQTTConnectParams options; // handle to connection parameters + MQTTConnectParams options; // handle to connection parameters - Network network_stack; // MQTT network stack + Network network_stack; // MQTT network stack - Timer ping_timer; // MQTT ping timer - Timer reconnect_delay_timer; // MQTT reconnect delay timer + Timer ping_timer; // MQTT ping timer + Timer reconnect_delay_timer; // MQTT reconnect delay timer - SubTopicHandle sub_handles[MAX_MESSAGE_HANDLERS]; // subscription handle array + SubTopicHandle sub_handles[MAX_MESSAGE_HANDLERS]; // subscription handle array + + DeviceInfo device_info; + + char host_addr[HOST_STR_LENGTH]; + +#ifdef AUTH_MODE_CERT + char cert_file_path[FILE_PATH_MAX_LEN]; // full path of device cert file + char key_file_path[FILE_PATH_MAX_LEN]; // full path of device key file +#else + unsigned char psk_decode[DECODE_PSK_LENGTH]; +#endif + +#ifdef MQTT_RMDUP_MSG_ENABLED +#define MQTT_MAX_REPEAT_BUF_LEN 10 + uint16_t repeat_packet_id_buf[MQTT_MAX_REPEAT_BUF_LEN]; + unsigned int current_packet_id_cnt; +#endif + +#ifdef SYSTEM_COMM + SysMQTTState sys_state; +#endif + +#ifdef MULTITHREAD_ENABLED + bool thread_running; + int thread_exit_code; +#endif } Qcloud_IoT_Client; /** * @brief MQTT protocol version */ -typedef enum { - MQTT_3_1_1 = 4 -} MQTT_VERSION; - +typedef enum { MQTT_3_1_1 = 4 } MQTT_VERSION; typedef enum MQTT_NODE_STATE { MQTT_NODE_STATE_NORMANL = 0, @@ -222,22 +258,22 @@ typedef enum MQTT_NODE_STATE { /* topic publish info */ typedef struct REPUBLISH_INFO { - Timer pub_start_time; /* timer for puback waiting */ - MQTTNodeState node_state; /* node state in wait list */ - uint16_t msg_id; /* packet id */ - uint32_t len; /* msg length */ - unsigned char *buf; /* msg buffer */ + Timer pub_start_time; /* timer for puback waiting */ + MQTTNodeState node_state; /* node state in wait list */ + uint16_t msg_id; /* packet id */ + uint32_t len; /* msg length */ + unsigned char *buf; /* msg buffer */ } QcloudIotPubInfo; /* topic subscribe/unsubscribe info */ typedef struct SUBSCRIBE_INFO { - enum msgTypes type; /* type: sub or unsub */ - uint16_t msg_id; /* packet id */ - Timer sub_start_time; /* timer for suback waiting */ - MQTTNodeState node_state; /* node state in wait list */ - SubTopicHandle handler; /* handle of topic subscribed(unsubcribed) */ - uint16_t len; /* msg length */ - unsigned char *buf; /* msg buffer */ + enum msgTypes type; /* type: sub or unsub */ + uint16_t msg_id; /* packet id */ + Timer sub_start_time; /* timer for suback waiting */ + MQTTNodeState node_state; /* node state in wait list */ + SubTopicHandle handler; /* handle of topic subscribed(unsubcribed) */ + uint16_t len; /* msg length */ + unsigned char *buf; /* msg buffer */ } QcloudIotSubInfo; /** @@ -290,7 +326,7 @@ int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient); /** * @brief Publish MQTT message * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @param topicName MQTT topic name * @param pParams publish parameters * @@ -301,7 +337,7 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish /** * @brief Subscribe MQTT topic * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @param topicFilter MQTT topic filter * @param pParams subscribe parameters * @@ -312,32 +348,46 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub /** * @brief Re-subscribe MQTT topics * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * - * @return QCLOUD_RET_SUCCESS for success, or err code for failure + * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient); /** * @brief Unsubscribe MQTT topic * - * @param pClient handle to MQTT client + * @param pClient handle to MQTT client * @param topicFilter MQTT topic filter * - * @return packet id (>=0) when success, or err code (<0) for failure + * @return packet id (>=0) when success, or err code (<0) for failure */ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter); +/** + * @brief check if MQTT topic has been subscribed or not + * + * @param pClient handle to MQTT client + * @param topicFilter MQTT topic filter + * + * @return true when successfully subscribed, or false if not yet + */ +bool qcloud_iot_mqtt_is_sub_ready(Qcloud_IoT_Client *pClient, char *topicFilter); + /** * @brief Check connection and keep alive state, read/handle MQTT message in synchronized way * * @param pClient handle to MQTT client * @param timeout_ms timeout value (unit: ms) for this operation * - * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for failure + * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for + * failure */ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms); +// workaround wrapper for qcloud_iot_mqtt_yield for multi-thread mode +int qcloud_iot_mqtt_yield_mt(Qcloud_IoT_Client *mqtt_client, uint32_t timeout_ms); + /** * @brief Check if auto reconnect is enabled or not * @@ -410,11 +460,11 @@ int mqtt_init_packet_header(unsigned char *header, MessageTypes message_type, Qo int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos); /** - * @brief Send the packet in buffer + * @brief Send the packet in buffer * - * @param pClient - * @param length - * @param timer + * @param pClient + * @param length + * @param timer * @return */ int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer); @@ -434,8 +484,8 @@ int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, /** * @brief Set MQTT connection state * - * @param pClient MQTT Client - * @param connected 0: disconnected 1: connected + * @param pClient MQTT Client + * @param connected 0: disconnected 1: connected * @return */ void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected); @@ -443,8 +493,8 @@ void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected); /** * @brief Get MQTT connection state * - * @param pClient MQTT Client - * @return 0: disconnected 1: connected + * @param pClient MQTT Client + * @return 0: disconnected 1: connected */ uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient); @@ -464,20 +514,21 @@ int qcloud_iot_mqtt_pub_info_proc(Qcloud_IoT_Client *pClient); */ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient); -int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, MessageTypes type, - SubTopicHandle *handler, ListNode **node); +int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, MessageTypes type, SubTopicHandle *handler, + ListNode **node); int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes packet_type, uint8_t dup, - uint16_t packet_id, - uint32_t *serialized_len); + uint16_t packet_id, uint32_t *serialized_len); -int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, uint32_t *serialized_len); +int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, + uint32_t *serialized_len); int deserialize_publish_packet(unsigned char *dup, QoS *qos, uint8_t *retained, uint16_t *packet_id, char **topicName, - uint16_t *topicNameLen, unsigned char **payload, size_t *payload_len, unsigned char *buf, size_t buf_len); + uint16_t *topicNameLen, unsigned char **payload, size_t *payload_len, unsigned char *buf, + size_t buf_len); -int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t *count, - QoS *grantedQoSs, unsigned char *buf, size_t buf_len); +int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t *count, QoS *grantedQoSs, + unsigned char *buf, size_t buf_len); int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len); @@ -485,7 +536,7 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ #ifdef MQTT_RMDUP_MSG_ENABLED -void reset_repeat_packet_id_buffer(void); +void reset_repeat_packet_id_buffer(Qcloud_IoT_Client *pClient); #endif @@ -509,4 +560,4 @@ void mqtt_write_utf8_string(unsigned char **pptr, const char *string); } #endif -#endif //IOT_MQTT_CLIENT_H_ +#endif // IOT_MQTT_CLIENT_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/mqtt_client_net.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/mqtt_client_net.h similarity index 88% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/mqtt_client_net.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/mqtt_client_net.h index d5fcd97e..b9fb226b 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/mqtt_client_net.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/mqtt_client_net.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -35,4 +35,4 @@ int qcloud_iot_mqtt_network_init(Network *pNetwork); } #endif -#endif //IOT_MQTT_CLIENT_NET_H_ +#endif // IOT_MQTT_CLIENT_NET_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/network_interface.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/network_interface.h new file mode 100644 index 00000000..e6fa614b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/network_interface.h @@ -0,0 +1,127 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _NETWORK_INTERFACE_H_ +#define _NETWORK_INTERFACE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "qcloud_iot_import.h" + +/* + * Type of network interface + */ + +typedef enum { NETWORK_TCP = 0, NETWORK_UDP = 1, NETWORK_TLS = 2, NETWORK_DTLS = 3 } NETWORK_TYPE; + +/** + * @brief Define structure for network stack + */ +typedef struct Network Network; + +/** + * @brief Define structure for network stack + * + * Network init/connect/read/write/disconnect/state + */ +struct Network { + int (*init)(Network *); + + int (*connect)(Network *); + + int (*read)(Network *, unsigned char *, size_t, uint32_t, size_t *); + + int (*write)(Network *, unsigned char *, size_t, uint32_t, size_t *); + + void (*disconnect)(Network *); + + int (*is_connected)(Network *); + + // connetion handle: + // for non-AT: 0 = not connected, non-zero = connected + // for AT: 0 = valid connection, MAX_UNSINGED_INT = invalid + uintptr_t handle; + +#ifndef AUTH_WITH_NOTLS + SSLConnectParams ssl_connect_params; +#endif + + const char * host; // server address + int port; // server port + NETWORK_TYPE type; +}; + +/* + * Init network stack + */ +int network_init(Network *pNetwork); + +/* return the handle */ +int is_network_connected(Network *pNetwork); + +/* network stack API */ +#ifdef AT_TCP_ENABLED + +#define AT_NO_CONNECTED_FD 0xffffffff + +int network_at_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); +int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, + size_t *written_len); +void network_at_tcp_disconnect(Network *pNetwork); +int network_at_tcp_connect(Network *pNetwork); +int network_at_tcp_init(Network *pNetwork); + +#else +int network_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); +int network_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); +void network_tcp_disconnect(Network *pNetwork); +int network_tcp_connect(Network *pNetwork); +int network_tcp_init(Network *pNetwork); +#endif + +#ifndef AUTH_WITH_NOTLS +int network_tls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); +int network_tls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); +void network_tls_disconnect(Network *pNetwork); +int network_tls_connect(Network *pNetwork); +int network_tls_init(Network *pNetwork); +#endif + +#ifdef COAP_COMM_ENABLED +#ifdef AUTH_WITH_NOTLS +int network_udp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); +int network_udp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len); +void network_udp_disconnect(Network *pNetwork); +int network_udp_connect(Network *pNetwork); +int network_udp_init(Network *pNetwork); +#else +int network_dtls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len); +int network_dtls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, + size_t *written_len); +void network_dtls_disconnect(Network *pNetwork); +int network_dtls_connect(Network *pNetwork); +int network_dtls_init(Network *pNetwork); +#endif +#endif + +#ifdef __cplusplus +} +#endif +#endif /* _NETWORK_INTERFACE_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_client.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_client.h similarity index 69% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_client.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_client.h index 4834d2f9..0cd57b0e 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_client.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_client.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -23,26 +23,24 @@ extern "C" { #include /* Specify the maximum characters of version */ -#define OTA_MAX_TOPIC_LEN (64) +#define OTA_MAX_TOPIC_LEN (64) -#define TYPE_FIELD "type" -#define MD5_FIELD "md5sum" -#define VERSION_FIELD "version" -#define URL_FIELD "url" -#define FILESIZE_FIELD "file_size" -#define RESULT_FIELD "result_code" +#define TYPE_FIELD "type" +#define MD5_FIELD "md5sum" +#define VERSION_FIELD "version" +#define URL_FIELD "url" +#define FILESIZE_FIELD "file_size" +#define RESULT_FIELD "result_code" -#define REPORT_VERSION_RSP "report_version_rsp" -#define UPDATE_FIRMWARE "update_firmware" +#define REPORT_VERSION_RSP "report_version_rsp" +#define UPDATE_FIRMWARE "update_firmware" -enum { - MQTT_CHANNEL, - COAP_CHANNEL -}; +enum { MQTT_CHANNEL, COAP_CHANNEL }; typedef void (*OnOTAMessageCallback)(void *pcontext, const char *msg, uint32_t msgLen); -void *qcloud_osc_init(const char *productId, const char *deviceName, void *channel, OnOTAMessageCallback callback, void *context); +void *qcloud_osc_init(const char *productId, const char *deviceName, void *channel, OnOTAMessageCallback callback, + void *context); int qcloud_osc_deinit(void *handle); diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_fetch.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_fetch.h similarity index 92% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_fetch.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_fetch.h index 35703636..ca1a222d 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_fetch.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_fetch.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -22,7 +22,6 @@ extern "C" { #include - void *ofc_Init(const char *url, uint32_t offset, uint32_t size); int32_t qcloud_ofc_connect(void *handle); diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_lib.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_lib.h similarity index 90% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_lib.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_lib.h index 2227f70b..8f340ce8 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/ota_lib.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/ota_lib.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,8 +20,8 @@ extern "C" { #endif -#include #include +#include #include "qcloud_iot_export_ota.h" @@ -48,9 +48,7 @@ int qcloud_otalib_get_report_version_result(const char *json); * @param fileSize parsed file size * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int qcloud_otalib_get_params(const char *json, char **type, char **url, char **version, char *md5, - uint32_t *fileSize); - +int qcloud_otalib_get_params(const char *json, char **type, char **url, char **version, char *md5, uint32_t *fileSize); /** * @brief Generate firmware info from id and version @@ -63,7 +61,6 @@ int qcloud_otalib_get_params(const char *json, char **type, char **url, char **v */ int qcloud_otalib_gen_info_msg(char *buf, size_t bufLen, uint32_t id, const char *version); - /** * @brief Generate firmware report * @@ -75,7 +72,8 @@ int qcloud_otalib_gen_info_msg(char *buf, size_t bufLen, uint32_t id, const char * @param reportType report type * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const char *version, int progress, IOT_OTAReportType reportType); +int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const char *version, int progress, + IOT_OTAReportType reportType); #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h similarity index 90% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h index 10d9fa35..974bc76c 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_ca.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -28,6 +28,4 @@ const char *iot_https_ca_get(void); } #endif - - #endif /* IOT_CA_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h new file mode 100644 index 00000000..5619b612 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_common.h @@ -0,0 +1,47 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef QCLOUD_IOT_COMMON_H_ +#define QCLOUD_IOT_COMMON_H_ + +/* IoT C-SDK APPID */ +#define QCLOUD_IOT_DEVICE_SDK_APPID "21010406" + +/* MQTT server domain */ +#define QCLOUD_IOT_MQTT_DIRECT_DOMAIN "iotcloud.tencentdevices.com" +#define MQTT_SERVER_PORT_TLS 8883 +#define MQTT_SERVER_PORT_NOTLS 1883 + +/* CoAP server domain */ +#define QCLOUD_IOT_COAP_DEIRECT_DOMAIN "iotcloud.tencentdevices.com" +#define COAP_SERVER_PORT 5684 + +/* server domain for dynamic registering device */ +#define DYN_REG_SERVER_URL "gateway.tencentdevices.com" +#define DYN_REG_SERVER_PORT 80 +#define DYN_REG_SERVER_PORT_TLS 443 + +/* URL for doing log upload */ +#define LOG_UPLOAD_SERVER_URL "http://devicelog.iot.cloud.tencent.com/cgi-bin/report-log" +#define LOG_UPLOAD_SERVER_DOMAIN "devicelog.iot.cloud.tencent.com" +#define LOG_UPLOAD_SERVER_PORT 80 + +/* Max size of a host name */ +#define HOST_STR_LENGTH 64 + +/* Max size of base64 encoded PSK = 64, after decode: 64/4*3 = 48*/ +#define DECODE_PSK_LENGTH 48 + +#endif /* QCLOUD_IOT_COMMON_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h similarity index 78% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h index 97b73859..6b17eef0 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/qcloud_iot_device.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -23,11 +23,7 @@ extern "C" { #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -int iot_device_info_init(void); - -int iot_device_info_set(const char *product_id, const char *device_name); - -DeviceInfo* iot_device_info_get(void); +int iot_device_info_set(DeviceInfo *device_info, const char *product_id, const char *device_name); #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client.h similarity index 63% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client.h index 59453495..0a4e0fc4 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -22,37 +22,36 @@ extern "C" { #include +#include "mqtt_client.h" +#include "qcloud_iot_device.h" #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#include "utils_param_check.h" -#include "qcloud_iot_device.h" -#include "mqtt_client.h" #include "shadow_client_json.h" +#include "utils_param_check.h" /* Max number of requests in appending state */ -#define MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME (10) +#define MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME (10) /* Max size of clientToken */ -#define MAX_SIZE_OF_CLIENT_TOKEN (MAX_SIZE_OF_CLIENT_ID + 10) +#define MAX_SIZE_OF_CLIENT_TOKEN (MAX_SIZE_OF_CLIENT_ID + 10) /* Max size of JSON string which only contain clientToken field */ -#define MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN (MAX_SIZE_OF_CLIENT_TOKEN + 20) +#define MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN (MAX_SIZE_OF_CLIENT_TOKEN + 20) /* Size of buffer to receive JSON document from server */ -#define CLOUD_IOT_JSON_RX_BUF_LEN (QCLOUD_IOT_MQTT_RX_BUF_LEN + 1) +#define CLOUD_IOT_JSON_RX_BUF_LEN (QCLOUD_IOT_MQTT_RX_BUF_LEN + 1) /** * @brief define type of request parameters */ typedef struct _RequestParam { + Method method; // method type: GET, UPDATE, DELETE - Method method; // method type: GET, UPDATE, DELETE + uint32_t timeout_sec; // request timeout in second - uint32_t timeout_sec; // request timeout in second + OnRequestCallback request_callback; // request callback - OnRequestCallback request_callback; // request callback - - void *user_context; // user context for callback + void *user_context; // user context for callback } RequestParams; @@ -62,27 +61,27 @@ typedef struct _RequestParam { * @brief for property and it's callback */ typedef struct { + void *property; - void *property; - - OnPropRegCallback callback; + OnPropRegCallback callback; } PropertyHandler; typedef struct _ShadowInnerData { uint32_t token_num; - int32_t sync_status; - List *request_list; - List *property_handle_list; - char *result_topic; + int32_t sync_status; + List * request_list; + List * property_handle_list; + char * result_topic; } ShadowInnerData; typedef struct _Shadow { - void *mqtt; - void *mutex; - eShadowType shadow_type; + void * mqtt; + void * mutex; + eShadowType shadow_type; MQTTEventHandler event_handle; - ShadowInnerData inner_data; + ShadowInnerData inner_data; + char shadow_recv_buf[CLOUD_IOT_JSON_RX_BUF_LEN]; } Qcloud_IoT_Shadow; int qcloud_iot_shadow_init(Qcloud_IoT_Shadow *pShadow); @@ -91,7 +90,7 @@ void qcloud_iot_shadow_reset(void *pClient); /** * @brief handle the expired requests in list - * + * * @param pShadow shadow client */ void handle_expired_request(Qcloud_IoT_Shadow *pShadow); @@ -100,10 +99,10 @@ void handle_expired_request(Qcloud_IoT_Shadow *pShadow); * @brief Entry of all shadow JSON request * * @param pShadow shadow client - * @param pParams request param - * @param pJsonDoc JSON buffer - * @param sizeOfBuffer size of buffer - * @return QCLOUD_RET_SUCCESS for success, or err code for failure + * @param pParams request param + * @param pJsonDoc JSON buffer + * @param sizeOfBuffer size of buffer + * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ int do_shadow_request(Qcloud_IoT_Shadow *pShadow, RequestParams *pParams, char *pJsonDoc, size_t sizeOfBuffer); @@ -111,7 +110,7 @@ int do_shadow_request(Qcloud_IoT_Shadow *pShadow, RequestParams *pParams, char * * @brief subscribe shadow topic $shadow/operation/result * * @param pShadow shadow client - * @return QCLOUD_RET_SUCCESS for success, or err code for failure + * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ int subscribe_operation_result_to_cloud(Qcloud_IoT_Shadow *pShadow); diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client_common.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client_common.h similarity index 87% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client_common.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client_common.h index a2ae4a3e..a7f5f997 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client_common.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client_common.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -30,7 +30,8 @@ extern "C" { * @param callback callback when property changes * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int shadow_common_register_property_on_delta(Qcloud_IoT_Shadow *pShadow, DeviceProperty *pProperty, OnPropRegCallback callback); +int shadow_common_register_property_on_delta(Qcloud_IoT_Shadow *pShadow, DeviceProperty *pProperty, + OnPropRegCallback callback); /** * @brief remove a device property @@ -50,9 +51,8 @@ int shadow_common_remove_property(Qcloud_IoT_Shadow *pshadow, DeviceProperty *pP */ int shadow_common_check_property_existence(Qcloud_IoT_Shadow *pshadow, DeviceProperty *pProperty); - #ifdef __cplusplus } #endif -#endif //IOT_SHADOW_CLIENT_COMMON_H_ +#endif // IOT_SHADOW_CLIENT_COMMON_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client_json.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client_json.h similarity index 81% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client_json.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client_json.h index 6b6c7cf6..cd8d5eec 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/shadow_client_json.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/shadow_client_json.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,35 +20,34 @@ extern "C" { #endif -#include -#include #include +#include #include +#include #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#define VERSION_FIELD "version" -#define TYPE_FIELD "type" -#define CLIENT_TOKEN_FIELD "clientToken" -#define RESULT_FIELD "result" +#define VERSION_FIELD "version" +#define TYPE_FIELD "type" +#define CLIENT_TOKEN_FIELD "clientToken" +#define RESULT_FIELD "result" -#define OPERATION_DELTA "delta" -#define OPERATION_GET "get" -#define OPERATION_UPDATE "update" +#define OPERATION_DELTA "delta" +#define OPERATION_GET "get" +#define OPERATION_UPDATE "update" -#define PAYLOAD_STATE "payload.state" -#define PAYLOAD_VERSION "payload.version" -#define PAYLOAD_STATE_DELTA "payload.state.delta" - -#define REPLY_CODE "code" -#define REPLY_STATUS "status" +#define PAYLOAD_STATE "payload.state" +#define PAYLOAD_VERSION "payload.version" +#define PAYLOAD_STATE_DELTA "payload.state.delta" +#define REPLY_CODE "code" +#define REPLY_STATUS "status" /** * add a JSON node to JSON string * - * @param jsonBuffer JSON string buffer + * @param jsonBuffer JSON string buffer * @param sizeOfBuffer size of buffer * @param pKey key of JSON node * @param pData value of JSON node @@ -60,7 +59,7 @@ int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void /** * add a event JSON node to JSON string * - * @param jsonBuffer JSON string buffer + * @param jsonBuffer JSON string buffer * @param sizeOfBuffer size of buffer * @param pKey key of JSON node * @param pData value of JSON node @@ -69,24 +68,25 @@ int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void */ int event_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type); - /** * @brief generate a ClientToken * * @param pStrBuffer string buffer * @param sizeOfBuffer size of buffer * @param tokenNumber shadow token number, increment every time + * @param product_id device product ID * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber); +int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber, char *product_id); /** * @brief generate an empty JSON with only clientToken * * @param tokenNumber shadow token number, increment every time * @param pJsonBuffer JSON string buffer + * @param product_id device product ID */ -void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer); +void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer, char *product_id); /** * @brief parse field of clientToken from JSON string @@ -101,7 +101,7 @@ bool parse_client_token(char *pJsonDoc, char **pClientToken); * @brief parse field of status from JSON string * * @param pJsonDoc source JSON string - * @param pStatus pointer to field of status + * @param pStatus pointer to field of status * @return true for success */ bool parse_status_return(char *pJsonDoc, char **pStatus); @@ -110,7 +110,7 @@ bool parse_status_return(char *pJsonDoc, char **pStatus); * @brief parse field of code from JSON string * * @param pJsonDoc source JSON string - * @param pCode pointer to field of Code + * @param pCode pointer to field of Code * @return true for success */ bool parse_code_return(char *pJsonDoc, int32_t *pCode); @@ -138,7 +138,7 @@ bool parse_shadow_state(char *pJsonDoc, char **pState); * @brief parse field of type from JSON string * * @param pJsonDoc source JSON string - * @param pType pointer to field of tyde + * @param pType pointer to field of tyde * @return true for success */ bool parse_shadow_operation_type(char *pJsonDoc, char **pType); @@ -156,7 +156,7 @@ bool parse_shadow_operation_result_code(char *pJsonDoc, int16_t *pResultCode); * @brief parse field of delta from JSON string * * @param pJsonDoc source JSON string - * @param pDelta pointer to field of delta + * @param pDelta pointer to field of delta * @return true for success */ bool parse_shadow_operation_delta(char *pJsonDoc, char **pDelta); @@ -170,7 +170,6 @@ bool parse_shadow_operation_delta(char *pJsonDoc, char **pDelta); */ bool parse_shadow_operation_get(char *pJsonDoc, char **pDelta); - /** * @brief update value in JSON if key is matched, not for OBJECT type * @@ -184,4 +183,4 @@ bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty); } #endif -#endif //IOT_SHADOW_CLIENT_JSON_H_ +#endif // IOT_SHADOW_CLIENT_JSON_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_aes.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_aes.h similarity index 70% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_aes.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_aes.h index 412de175..b84e896c 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_aes.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_aes.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -31,33 +31,36 @@ extern "C" { #define UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED -0x0072 /**< The requested feature is not supported by the platform */ /* Internal macros meant to be called only from within the library. */ -#define UTILS_INTERNAL_VALIDATE_RET( cond, ret ) do { } while( 0 ) -#define UTILS_INTERNAL_VALIDATE( cond ) do { } while( 0 ) +#define UTILS_INTERNAL_VALIDATE_RET(cond, ret) \ + do { \ + } while (0) +#define UTILS_INTERNAL_VALIDATE(cond) \ + do { \ + } while (0) //==============================================// /* padlock.c and aesni.c rely on these values! */ -#define UTILS_AES_ENCRYPT 1 /**< AES encryption. */ -#define UTILS_AES_DECRYPT 0 /**< AES decryption. */ - -#define UTILS_AES_BLOCK_LEN 16 -#define AES_KEY_BITS_128 128 -#define AES_KEY_BITS_192 192 -#define AES_KEY_BITS_256 256 +#define UTILS_AES_ENCRYPT 1 /**< AES encryption. */ +#define UTILS_AES_DECRYPT 0 /**< AES decryption. */ +#define UTILS_AES_BLOCK_LEN 16 +#define AES_KEY_BITS_128 128 +#define AES_KEY_BITS_192 192 +#define AES_KEY_BITS_256 256 /* Error codes in range 0x0020-0x0022 */ -#define UTILS_ERR_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ -#define UTILS_ERR_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ +#define UTILS_ERR_AES_INVALID_KEY_LENGTH -0x0020 /**< Invalid key length. */ +#define UTILS_ERR_AES_INVALID_INPUT_LENGTH -0x0022 /**< Invalid data input length. */ /* Error codes in range 0x0021-0x0025 */ -#define UTILS_ERR_AES_BAD_INPUT_DATA -0x0021 /**< Invalid input data. */ +#define UTILS_ERR_AES_BAD_INPUT_DATA -0x0021 /**< Invalid input data. */ /* UTILS_ERR_AES_FEATURE_UNAVAILABLE is deprecated and should not be used. */ -#define UTILS_ERR_AES_FEATURE_UNAVAILABLE -0x0023 /**< Feature not available. For example, an unsupported AES key size. */ +#define UTILS_ERR_AES_FEATURE_UNAVAILABLE \ + -0x0023 /**< Feature not available. For example, an unsupported AES key size. */ /* UTILS_ERR_AES_HW_ACCEL_FAILED is deprecated and should not be used. */ -#define UTILS_ERR_AES_HW_ACCEL_FAILED -0x0025 /**< AES hardware accelerator failed. */ - +#define UTILS_ERR_AES_HW_ACCEL_FAILED -0x0025 /**< AES hardware accelerator failed. */ #if !defined(UTILS_AES_ALT) // Regular implementation @@ -66,22 +69,20 @@ extern "C" { /** * \brief The AES context-type definition. */ -typedef struct utils_aes_context -{ - int nr; /*!< The number of rounds. */ - uint32_t *rk; /*!< AES round keys. */ - uint32_t buf[68]; /*!< Unaligned data buffer. This buffer can - hold 32 extra Bytes, which can be used for - one of the following purposes: -
  • Alignment if VIA padlock is - used.
  • -
  • Simplifying key expansion in the 256-bit - case by generating an extra round key. -
*/ -} -utils_aes_context; +typedef struct utils_aes_context { + int nr; /*!< The number of rounds. */ + uint32_t *rk; /*!< AES round keys. */ + uint32_t buf[68]; /*!< Unaligned data buffer. This buffer can + hold 32 extra Bytes, which can be used for + one of the following purposes: +
  • Alignment if VIA padlock is + used.
  • +
  • Simplifying key expansion in the 256-bit + case by generating an extra round key. +
*/ +} utils_aes_context; -#else /* UTILS_AES_ALT */ +#else /* UTILS_AES_ALT */ #include "aes_alt.h" #endif /* UTILS_AES_ALT */ @@ -93,7 +94,7 @@ utils_aes_context; * * \param ctx The AES context to initialize. This must not be \c NULL. */ -void utils_aes_init( utils_aes_context *ctx ); +void utils_aes_init(utils_aes_context *ctx); /** * \brief This function releases and clears the specified AES context. @@ -102,8 +103,7 @@ void utils_aes_init( utils_aes_context *ctx ); * If this is \c NULL, this function does nothing. * Otherwise, the context must have been at least initialized. */ -void utils_aes_free( utils_aes_context *ctx ); - +void utils_aes_free(utils_aes_context *ctx); /** * \brief This function sets the encryption key. @@ -120,8 +120,7 @@ void utils_aes_free( utils_aes_context *ctx ); * \return \c 0 on success. * \return #UTILS_ERR_AES_INVALID_KEY_LENGTH on failure. */ -int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ); +int utils_aes_setkey_enc(utils_aes_context *ctx, const unsigned char *key, unsigned int keybits); /** * \brief This function sets the decryption key. @@ -138,9 +137,7 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, * \return \c 0 on success. * \return #UTILS_ERR_AES_INVALID_KEY_LENGTH on failure. */ -int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ); - +int utils_aes_setkey_dec(utils_aes_context *ctx, const unsigned char *key, unsigned int keybits); /** * \brief This function performs an AES single-block encryption or @@ -165,10 +162,7 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, * \return \c 0 on success. */ -int utils_aes_crypt_ecb( utils_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ); +int utils_aes_crypt_ecb(utils_aes_context *ctx, int mode, const unsigned char input[16], unsigned char output[16]); #if defined(UTILS_CIPHER_MODE_CBC) /** @@ -212,15 +206,10 @@ int utils_aes_crypt_ecb( utils_aes_context *ctx, * \return #UTILS_ERR_AES_INVALID_INPUT_LENGTH * on failure. */ -int utils_aes_crypt_cbc( utils_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ); +int utils_aes_crypt_cbc(utils_aes_context *ctx, int mode, size_t length, unsigned char iv[16], + const unsigned char *input, unsigned char *output); #endif /* UTILS_CIPHER_MODE_CBC */ - /** * \brief Internal AES block encryption function. This is only * exposed to allow overriding it using @@ -232,9 +221,7 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, * * \return \c 0 on success. */ -int utils_internal_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); +int utils_internal_aes_encrypt(utils_aes_context *ctx, const unsigned char input[16], unsigned char output[16]); /** * \brief Internal AES block decryption function. This is only @@ -247,13 +234,11 @@ int utils_internal_aes_encrypt( utils_aes_context *ctx, * * \return \c 0 on success. */ -int utils_internal_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); +int utils_internal_aes_decrypt(utils_aes_context *ctx, const unsigned char input[16], unsigned char output[16]); #if !defined(UTILS_DEPRECATED_REMOVED) #if defined(UTILS_DEPRECATED_WARNING) -#define UTILS_DEPRECATED __attribute__((deprecated)) +#define UTILS_DEPRECATED __attribute__((deprecated)) #else #define UTILS_DEPRECATED #endif @@ -267,9 +252,8 @@ int utils_internal_aes_decrypt( utils_aes_context *ctx, * \param input Plaintext block. * \param output Output (ciphertext) block. */ -UTILS_DEPRECATED void utils_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); +UTILS_DEPRECATED void utils_aes_encrypt(utils_aes_context *ctx, const unsigned char input[16], + unsigned char output[16]); /** * \brief Deprecated internal AES block decryption function @@ -281,14 +265,12 @@ UTILS_DEPRECATED void utils_aes_encrypt( utils_aes_context *ctx, * \param input Ciphertext block. * \param output Output (plaintext) block. */ -UTILS_DEPRECATED void utils_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ); +UTILS_DEPRECATED void utils_aes_decrypt(utils_aes_context *ctx, const unsigned char input[16], + unsigned char output[16]); #undef UTILS_DEPRECATED #endif /* !UTILS_DEPRECATED_REMOVED */ - #if defined(UTILS_SELF_TEST) /** * \brief Checkup routine. @@ -296,20 +278,14 @@ UTILS_DEPRECATED void utils_aes_decrypt( utils_aes_context *ctx, * \return \c 0 on success. * \return \c 1 on failure. */ -int utils_aes_self_test( int verbose ); +int utils_aes_self_test(int verbose); #endif /* UTILS_SELF_TEST */ int aes_sample(int verbose); - -int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, - uint8_t *pOutData, uint32_t outBuffLen, - uint8_t mode, uint8_t *pKey, - uint16_t keybits, uint8_t *iv); - - - +int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, uint8_t *pOutData, uint32_t outBuffLen, uint8_t mode, + uint8_t *pKey, uint16_t keybits, uint8_t *iv); #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_base64.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_base64.h similarity index 68% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_base64.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_base64.h index c54fb938..45ef6a1e 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_base64.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_base64.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,17 +19,15 @@ #ifdef __cplusplus extern "C" { #endif - + #include - -#include "qcloud_iot_export_log.h" + #include "qcloud_iot_export_error.h" +#include "qcloud_iot_export_log.h" -int qcloud_iot_utils_base64encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ); +int qcloud_iot_utils_base64encode(unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen); -int qcloud_iot_utils_base64decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ); +int qcloud_iot_utils_base64decode(unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen); #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_hmac.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_hmac.h similarity index 91% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_hmac.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_hmac.h index 9bf1de9e..32ab9f8b 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_hmac.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_hmac.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -23,4 +23,3 @@ void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, void utils_hmac_sha1(const char *msg, int msg_len, char *digest, const char *key, int key_len); #endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_httpc.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_httpc.h similarity index 58% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_httpc.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_httpc.h index 94154eee..1e27c7a8 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_httpc.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_httpc.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -24,36 +24,30 @@ extern "C" { #include "network_interface.h" -#define HTTP_PORT 80 -#define HTTPS_PORT 443 +#define HTTP_PORT 80 +#define HTTPS_PORT 443 -typedef enum { - HTTP_GET, - HTTP_POST, - HTTP_PUT, - HTTP_DELETE, - HTTP_HEAD -} HttpMethod; +typedef enum { HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_DELETE, HTTP_HEAD } HttpMethod; typedef struct { - int remote_port; - int response_code; - char *header; - char *auth_user; - char *auth_password; - Network network_stack; + int remote_port; + int response_code; + char * header; + char * auth_user; + char * auth_password; + Network network_stack; } HTTPClient; typedef struct { - bool is_more; // if more data to check - bool is_chunked; // if response in chunked data - int retrieve_len; // length of retrieve - int response_content_len; // length of resposne content - int post_buf_len; // post data length - int response_buf_len; // length of response data buffer - char *post_content_type; // type of post content - char *post_buf; // post data buffer - char *response_buf; // response data buffer + bool is_more; // if more data to check + bool is_chunked; // if response in chunked data + int retrieve_len; // length of retrieve + int response_content_len; // length of resposne content + int post_buf_len; // post data length + int response_buf_len; // length of response data buffer + char *post_content_type; // type of post content + char *post_buf; // post data buffer + char *response_buf; // response data buffer } HTTPClientData; /** @@ -64,18 +58,18 @@ typedef struct { * @param port server port * @param ca_crt_dir ca path * @param method type of request - * @param client_data http data + * @param client_data http data * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -int qcloud_http_client_common(HTTPClient *client, const char *url, int port, const char *ca_crt, HttpMethod method, HTTPClientData *client_data); +int qcloud_http_client_common(HTTPClient *client, const char *url, int port, const char *ca_crt, HttpMethod method, + HTTPClientData *client_data); int qcloud_http_recv_data(HTTPClient *client, uint32_t timeout_ms, HTTPClientData *client_data); - + int qcloud_http_client_connect(HTTPClient *client, const char *url, int port, const char *ca_crt); void qcloud_http_client_close(HTTPClient *client); - #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_list.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_list.h similarity index 87% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_list.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_list.h index 8f636b0b..b70211fd 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_list.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_list.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -22,14 +22,10 @@ extern "C" { #include - /* * ListNode iterator direction */ -typedef enum { - LIST_HEAD, - LIST_TAIL -} ListDirection; +typedef enum { LIST_HEAD, LIST_TAIL } ListDirection; /* * define list node @@ -37,15 +33,15 @@ typedef enum { typedef struct ListNode { struct ListNode *prev; struct ListNode *next; - void *val; + void * val; } ListNode; /* * Double Linked List */ typedef struct { - ListNode *head; - ListNode *tail; + ListNode * head; + ListNode * tail; unsigned int len; void (*free)(void *val); int (*match)(void *a, void *b); @@ -55,11 +51,10 @@ typedef struct { * list iterator */ typedef struct { - ListNode *next; + ListNode * next; ListDirection direction; } ListIterator; - /* create node */ ListNode *list_node_new(void *val); @@ -94,4 +89,4 @@ void list_iterator_destroy(ListIterator *self); #ifdef __cplusplus } #endif -#endif //QCLOUD_IOT_UTILS_LIST_H_ +#endif // QCLOUD_IOT_UTILS_LIST_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_md5.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h similarity index 82% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_md5.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h index bfd9c608..924704d1 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_md5.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_md5.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,21 +13,18 @@ * */ - - #ifndef QCLOUD_IOT_UTILS_MD5_H_ #define QCLOUD_IOT_UTILS_MD5_H_ #include "qcloud_iot_import.h" typedef struct { - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[4]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[4]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ } iot_md5_context; - - /** +/** * @brief init MD5 context * * @param ctx MD5 context @@ -47,8 +44,7 @@ void utils_md5_free(iot_md5_context *ctx); * @param dst destination MD5 context * @param src source MD5 context */ -void utils_md5_clone(iot_md5_context *dst, - const iot_md5_context *src); +void utils_md5_clone(iot_md5_context *dst, const iot_md5_context *src); /** * @brief start MD5 calculation @@ -81,14 +77,11 @@ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]); * @brief Output = MD5( input buffer ) * * @param input data input - * @param ilen data length + * @param ilen data lenght * @param output MD5 result */ void utils_md5(const unsigned char *input, size_t ilen, unsigned char output[16]); - int8_t utils_hb2hex(uint8_t hb); - #endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_param_check.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_param_check.h new file mode 100644 index 00000000..8c679ef6 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_param_check.h @@ -0,0 +1,85 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef _UTILS_PARAM_CHECK_H_ +#define _UTILS_PARAM_CHECK_H_ + +#if defined(__cplusplus) +extern "C" { +#endif + +#include "qcloud_iot_export_log.h" + +#define NUMBERIC_SANITY_CHECK(num, err) \ + do { \ + if (0 == (num)) { \ + Log_e("Invalid argument, numeric 0"); \ + return (err); \ + } \ + } while (0) + +#define NUMBERIC_SANITY_CHECK_RTN(num) \ + do { \ + if (0 == (num)) { \ + Log_e("Invalid argument, numeric 0"); \ + return; \ + } \ + } while (0) + +#define POINTER_SANITY_CHECK(ptr, err) \ + do { \ + if (NULL == (ptr)) { \ + Log_e("Invalid argument, %s = %p", #ptr, ptr); \ + return (err); \ + } \ + } while (0) + +#define POINTER_SANITY_CHECK_RTN(ptr) \ + do { \ + if (NULL == (ptr)) { \ + Log_e("Invalid argument, %s = %p", #ptr, ptr); \ + return; \ + } \ + } while (0) + +#define STRING_PTR_SANITY_CHECK(ptr, err) \ + do { \ + if (NULL == (ptr)) { \ + Log_e("Invalid argument, %s = %p", #ptr, (ptr)); \ + return (err); \ + } \ + if (0 == strlen((ptr))) { \ + Log_e("Invalid argument, %s = '%s'", #ptr, (ptr)); \ + return (err); \ + } \ + } while (0) + +#define STRING_PTR_SANITY_CHECK_RTN(ptr) \ + do { \ + if (NULL == (ptr)) { \ + Log_e("Invalid argument, %s = %p", #ptr, (ptr)); \ + return; \ + } \ + if (0 == strlen((ptr))) { \ + Log_e("Invalid argument, %s = '%s'", #ptr, (ptr)); \ + return; \ + } \ + } while (0) + +#if defined(__cplusplus) +} +#endif + +#endif /* _UTILS_PARAM_CHECK_H_ */ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_ringbuff.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_ringbuff.h similarity index 54% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_ringbuff.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_ringbuff.h index 4d8719f4..42480cd9 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_ringbuff.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_ringbuff.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -12,39 +12,31 @@ * limitations under the License. * */ - + #ifndef __AT_RING_BUFF_H__ #define __AT_RING_BUFF_H__ #include "stdbool.h" #include "stdint.h" +#define RINGBUFF_OK 0 /* No error, everything OK. */ +#define RINGBUFF_ERR -1 /* Out of memory error. */ +#define RINGBUFF_EMPTY -3 /* Timeout. */ +#define RINGBUFF_FULL -4 /* Routing problem. */ +#define RINGBUFF_TOO_SHORT -5 - -#define RINGBUFF_OK 0 /* No error, everything OK. */ -#define RINGBUFF_ERR -1 /* Out of memory error. */ -#define RINGBUFF_EMPTY -3 /* Timeout. */ -#define RINGBUFF_FULL -4 /* Routing problem. */ -#define RINGBUFF_TOO_SHORT -5 - - - - -typedef struct _ring_buff_ -{ - uint32_t size; - uint32_t readpoint; - uint32_t writepoint; - char* buffer; - bool full; +typedef struct _ring_buff_ { + uint32_t size; + uint32_t readpoint; + uint32_t writepoint; + char* buffer; + bool full; } sRingbuff; -typedef sRingbuff* ring_buff_t; +typedef sRingbuff* ring_buff_t; -int ring_buff_init(sRingbuff* ring_buff, char* buff, uint32_t size ); +int ring_buff_init(sRingbuff* ring_buff, char* buff, uint32_t size); int ring_buff_flush(sRingbuff* ring_buff); -int ring_buff_push_data(sRingbuff* ring_buff, uint8_t *pData, int len); -int ring_buff_pop_data(sRingbuff* ring_buff, uint8_t *pData, int len); -#endif // __ringbuff_h__ - - +int ring_buff_push_data(sRingbuff* ring_buff, uint8_t* pData, int len); +int ring_buff_pop_data(sRingbuff* ring_buff, uint8_t* pData, int len); +#endif // __ringbuff_h__ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_sha1.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_sha1.h similarity index 85% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_sha1.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_sha1.h index 8aa12007..167c41d0 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_sha1.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_sha1.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -18,14 +18,13 @@ #include "qcloud_iot_import.h" - /** * \brief SHA-1 context structure */ typedef struct { - uint32_t total[2]; /*!< number of bytes processed */ - uint32_t state[5]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ } iot_sha1_context; /** @@ -48,8 +47,7 @@ void utils_sha1_free(iot_sha1_context *ctx); * \param dst The destination context * \param src The context to be cloned */ -void utils_sha1_clone(iot_sha1_context *dst, - const iot_sha1_context *src); +void utils_sha1_clone(iot_sha1_context *dst, const iot_sha1_context *src); /** * \brief SHA-1 context setup diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_timer.h b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_timer.h similarity index 94% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_timer.h rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_timer.h index 8cd33311..eec2e447 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/internal_inc/utils_timer.h +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/internal_inc/utils_timer.h @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,7 +19,7 @@ #ifdef __cplusplus extern "C" { #endif - + // Add the platform specific timer includes to define the Timer struct #include "qcloud_iot_import.h" @@ -71,10 +71,9 @@ int left_ms(Timer *timer); * @param timer - pointer to the timer to be initialized */ void InitTimer(Timer *timer); - + #ifdef __cplusplus } #endif -#endif //QCLOUD_IOT_UTILS_TIMER_H_ - +#endif // QCLOUD_IOT_UTILS_TIMER_H_ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_client.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_client.c new file mode 100644 index 00000000..99da7f2f --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_client.c @@ -0,0 +1,872 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "at_client.h" + +#include +#include +#include +#include + +#include "at_utils.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" +#include "utils_timer.h" + +#define AT_RESP_END_OK "OK" +#define AT_RESP_END_ERROR "ERROR" +#define AT_RESP_END_FAIL "FAIL" +#define AT_END_CR_LF "\r\n" + +sRingbuff g_ring_buff; +static at_client sg_at_client = {0}; +static uint32_t sg_flags = 0; + +/*this function can be called only by at_uart_isr, just push the data to the at_client ringbuffer.*/ +void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len) +{ + (void)ring_buff_push_data(&g_ring_buff, pdata, len); +} + +/** + * Create response object. + * + * @param buf_size the maximum response buffer size + * @param line_num the number of setting response lines + * = 0: the response data will auto return when received 'OK' or 'ERROR' + * != 0: the response data will return when received setting lines number data + * @param timeout the maximum response time + * + * @return != NULL: response object + * = NULL: no memory + */ +at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t timeout) +{ + at_response_t resp = NULL; + + resp = (at_response_t)HAL_Malloc(sizeof(at_response)); + if (resp == NULL) { + Log_e("AT create response object failed! No memory for response object!"); + return NULL; + } + + resp->buf = (char *)HAL_Malloc(buf_size); + if (resp->buf == NULL) { + Log_e("AT create response object failed! No memory for response buffer!"); + HAL_Free(resp); + return NULL; + } + + resp->buf_size = buf_size; + resp->line_num = line_num; + resp->line_counts = 0; + resp->timeout = timeout; + + return resp; +} + +/** + * Delete and free response object. + * + * @param resp response object + */ +void at_delete_resp(at_response_t resp) +{ + if (resp && resp->buf) { + HAL_Free(resp->buf); + } + + if (resp) { + HAL_Free(resp); + resp = NULL; + } +} + +void at_delayms(uint32_t delayms) +{ +#ifdef AT_OS_USED + HAL_SleepMs(delayms); +#else + HAL_DelayMs(delayms); +#endif +} + +void at_setFlag(uint32_t flag) +{ + sg_flags |= flag & 0xffffffff; +} + +void at_clearFlag(uint32_t flag) +{ + sg_flags &= (~flag) & 0xffffffff; +} + +uint32_t at_getFlag(void) +{ + return sg_flags; +} + +bool at_waitFlag(uint32_t flag, uint32_t timeout) +{ + Timer timer; + bool Ret = false; + + countdown_ms(&timer, timeout); + do { + if (flag == (at_getFlag() & flag)) { + Ret = true; + break; + } + at_delayms(1); + } while (!expired(&timer)); + + return Ret; +} + +/** + * Get one line AT response buffer by line number. + * + * @param resp response object + * @param resp_line line number, start from '1' + * + * @return != NULL: response line buffer + * = NULL: input response line error + */ +const char *at_resp_get_line(at_response_t resp, uint32_t resp_line) +{ + char *resp_buf = resp->buf; + char *resp_line_buf = NULL; + int line_num = 1; + + POINTER_SANITY_CHECK(resp, NULL); + + if (resp_line > resp->line_counts || resp_line == 0) { + Log_e("AT response get line failed! Input response line(%d) error!", resp_line); + return NULL; + } + + for (line_num = 1; line_num <= resp->line_counts; line_num++) { + if (resp_line == line_num) { + resp_line_buf = resp_buf; + + return resp_line_buf; + } + + resp_buf += strlen(resp_buf) + 1; + } + + return NULL; +} + +/** + * Get one line AT response buffer by keyword + * + * @param resp response object + * @param keyword query keyword + * + * @return != NULL: response line buffer + * = NULL: no matching data + */ +const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword) +{ + char *resp_buf = resp->buf; + char *resp_line_buf = NULL; + int line_num = 1; + + POINTER_SANITY_CHECK(resp, NULL); + POINTER_SANITY_CHECK(keyword, NULL); + + for (line_num = 1; line_num <= resp->line_counts; line_num++) { + if (strstr(resp_buf, keyword)) { + resp_line_buf = resp_buf; + + return resp_line_buf; + } + + resp_buf += strlen(resp_buf) + 1; + } + + return NULL; +} + +/** + * Get and parse AT response buffer arguments by line number. + * + * @param resp response object + * @param resp_line line number, start from '1' + * @param resp_expr response buffer expression + * + * @return -1 : input response line number error or get line buffer error + * 0 : parsed without match + * >0 : the number of arguments successfully parsed + */ +int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char *resp_expr, ...) +{ + va_list args; + int resp_args_num = 0; + const char *resp_line_buf = NULL; + + POINTER_SANITY_CHECK(resp, -1); + POINTER_SANITY_CHECK(resp_expr, -1); + if ((resp_line_buf = at_resp_get_line(resp, resp_line)) == NULL) { + return -1; + } + + va_start(args, resp_expr); + + resp_args_num = vsscanf(resp_line_buf, resp_expr, args); + + va_end(args); + + return resp_args_num; +} + +/** + * Get and parse AT response buffer arguments by keyword. + * + * @param resp response object + * @param keyword query keyword + * @param resp_expr response buffer expression + * + * @return -1 : input keyword error or get line buffer error + * 0 : parsed without match + * >0 : the number of arguments successfully parsed + */ +int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...) +{ + va_list args; + int resp_args_num = 0; + const char *resp_line_buf = NULL; + + POINTER_SANITY_CHECK(resp, -1); + POINTER_SANITY_CHECK(resp_expr, -1); + if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == NULL) { + return -1; + } + + va_start(args, resp_expr); + + resp_args_num = vsscanf(resp_line_buf, resp_expr, args); + + va_end(args); + + return resp_args_num; +} + +/** + * Send commands to AT server and wait response. + * + * @param client current AT client object + * @param resp AT response object, using NULL when you don't care response + * @param cmd_expr AT commands expression + * + * @return 0 : success + * -1 : response status error + * -2 : wait timeout + */ +int at_obj_exec_cmd(at_response_t resp, const char *cmd_expr, ...) +{ + POINTER_SANITY_CHECK(cmd_expr, QCLOUD_ERR_INVAL); + + va_list args; + int cmd_size = 0; + int result = QCLOUD_RET_SUCCESS; + const char *cmd = NULL; + at_client_t client = at_client_get(); + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return QCLOUD_ERR_FAILURE; + } + + HAL_MutexLock(client->lock); + resp->line_counts = 0; + client->resp_status = AT_RESP_OK; + client->resp = resp; + + va_start(args, cmd_expr); + at_vprintfln(cmd_expr, args); + va_end(args); + + if (resp != NULL) { +#ifndef AT_OS_USED + client->resp_status = AT_RESP_TIMEOUT; + at_client_yeild(NULL, resp->timeout); + if (client->resp_status != AT_RESP_OK) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } +#else + if (HAL_SemaphoreWait(client->resp_sem, resp->timeout) < 0) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } + + if (client->resp_status != AT_RESP_OK) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } +#endif + } + +__exit: + client->resp = NULL; + HAL_MutexUnlock(client->lock); + + return result; +} + +/** + * Send data to AT server, send data don't have end sign(eg: \r\n). + * + * @param client current AT client object + * @param buf send data buffer + * @param size send fixed data size + * @param timeout timeout for send + * + * @return >0: send data size + * =0: send failed + */ +int at_client_send(at_client_t client, const char *buf, int size, uint32_t timeout) +{ + POINTER_SANITY_CHECK(buf, 0); + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return 0; + } + +#ifdef AT_DEBUG + at_print_raw_cmd("send", buf, size); +#endif + + return HAL_AT_Uart_Send((void *)buf, size); +} + +static int at_client_getchar(at_client_t client, char *pch, uint32_t timeout) +{ + int ret = QCLOUD_RET_SUCCESS; + Timer timer; + + countdown_ms(&timer, timeout); + do { +#ifndef AT_UART_RECV_IRQ + if (0 == HAL_AT_Uart_Recv((void *)pch, 1, NULL, timeout)) { + continue; + } +#else + if (0 == + ring_buff_pop_data(client->pRingBuff, (uint8_t *)pch, 1)) { // push data to ringbuff @ AT_UART_IRQHandler + continue; + } +#endif + else { + break; + } + } while (!expired(&timer)); + + if (expired(&timer)) { + ret = QCLOUD_ERR_FAILURE; + } + + return ret; +} + +/** + * AT client receive fixed-length data. + * + * @param client current AT client object + * @param buf receive data buffer + * @param size receive fixed data size + * @param timeout receive data timeout (ms) + * + * @note this function can only be used in execution function of URC data + * + * @return >0: receive data size + * =0: receive failed + */ +int at_client_obj_recv(char *buf, int size, int timeout) +{ + int read_idx = 0; + int result = QCLOUD_RET_SUCCESS; + char ch; + + POINTER_SANITY_CHECK(buf, 0); + at_client_t client = at_client_get(); + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return 0; + } + + while (1) { + if (read_idx < size) { + result = at_client_getchar(client, &ch, timeout); + if (result != QCLOUD_RET_SUCCESS) { + Log_e("AT Client receive failed, uart device get data error(%d)", result); + return 0; + } + + buf[read_idx++] = ch; + } else { + break; + } + } + +#ifdef AT_DEBUG + at_print_raw_cmd("urc_recv", buf, size); +#endif + + return read_idx; +} + +/** + * AT client set end sign. + * + * @param client current AT client object + * @param ch the end sign, can not be used when it is '\0' + */ +void at_set_end_sign(char ch) +{ + at_client_t client = at_client_get(); + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return; + } + + client->end_sign = ch; +} + +/** + * set URC(Unsolicited Result Code) table + * + * @param client current AT client object + * @param table URC table + * @param size table size + */ +void at_set_urc_table(at_client_t client, const at_urc_t urc_table, uint32_t table_sz) +{ + int idx; + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return; + } + + for (idx = 0; idx < table_sz; idx++) { + POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_prefix); + POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_suffix); + } + + client->urc_table = urc_table; + client->urc_table_size = table_sz; +} + +at_client_t at_client_get(void) +{ + return &sg_at_client; +} + +static const at_urc *get_urc_obj(at_client_t client) +{ + int i, prefix_len, suffix_len; + int buf_sz; + char *buffer = NULL; + + if (client->urc_table == NULL) { + return NULL; + } + + buffer = client->recv_buffer; + buf_sz = client->cur_recv_len; + + for (i = 0; i < client->urc_table_size; i++) { + prefix_len = strlen(client->urc_table[i].cmd_prefix); + suffix_len = strlen(client->urc_table[i].cmd_suffix); + if (buf_sz < prefix_len + suffix_len) { + continue; + } + if ((prefix_len ? !strncmp(buffer, client->urc_table[i].cmd_prefix, prefix_len) : 1) && + (suffix_len ? !strncmp(buffer + buf_sz - suffix_len, client->urc_table[i].cmd_suffix, suffix_len) : 1)) { + // Log_d("matched:%s", client->urc_table[i].cmd_prefix); + return &client->urc_table[i]; + } + } + + return NULL; +} + +static int at_recv_readline(at_client_t client) +{ + int read_len = 0; + char ch = 0, last_ch = 0; + bool is_full = false; + int ret; + + memset(client->recv_buffer, 0x00, client->recv_bufsz); + client->cur_recv_len = 0; + + while (1) { + ret = at_client_getchar(client, &ch, GET_CHAR_TIMEOUT_MS); + + if (QCLOUD_RET_SUCCESS != ret) { + return -1; + } + + if (read_len < client->recv_bufsz) { + client->recv_buffer[read_len++] = ch; + client->cur_recv_len = read_len; + } else { + is_full = true; + } + + /* is newline or URC data */ + if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign) || + get_urc_obj(client)) { + if (is_full) { + Log_e("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); + memset(client->recv_buffer, 0x00, client->recv_bufsz); + client->cur_recv_len = 0; + ring_buff_flush(client->pRingBuff); + return -1; + } + break; + } + last_ch = ch; + } + +#ifdef AT_DEBUG + at_print_raw_cmd("recvline", client->recv_buffer, read_len); +#endif + + return read_len; +} + +#ifdef AT_OS_USED +static void client_parser(void *userContex) +{ + int resp_buf_len = 0; + const at_urc *urc; + int line_counts = 0; + at_client_t client = at_client_get(); + + Log_d("client_parser start..."); + + while (1) { + if (at_recv_readline(client) > 0) { +#ifdef AT_DEBUG + const char *cmd = NULL; + int cmdsize = 0; + cmd = at_get_last_cmd(&cmdsize); + Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); +#endif + if ((urc = get_urc_obj(client)) != NULL) { + /* current receive is request, try to execute related operations */ + if (urc->func != NULL) { + urc->func(client->recv_buffer, client->cur_recv_len); + } + + } else if (client->resp != NULL) { + if (client->end_sign != 0) { // handle endsign + if (client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) { + continue; + } else { + goto exit; + } + } + + /* current receive is response */ + client->recv_buffer[client->cur_recv_len - 1] = '\0'; + if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) { + /* copy response lines, separated by '\0' */ + memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); + resp_buf_len += client->cur_recv_len; + + line_counts++; + } else { + client->resp_status = AT_RESP_BUFF_FULL; + Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", + client->resp->buf_size); + } + /* check response result */ + if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 && + client->resp->line_num == 0) { + /* get the end data by response result, return response state END_OK. */ + client->resp_status = AT_RESP_OK; + } else if (strstr(client->recv_buffer, AT_RESP_END_ERROR) || + (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) { + client->resp_status = AT_RESP_ERROR; + } else if (line_counts == client->resp->line_num && client->resp->line_num) { + /* get the end data by response line, return response state END_OK.*/ + client->resp_status = AT_RESP_OK; + } else { + continue; + } + exit: + client->resp->line_counts = line_counts; + client->resp = NULL; + resp_buf_len = 0; + line_counts = 0; + HAL_SemaphorePost(client->resp_sem); + } else { + // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); + } + } else { + // Log_d("read no new line"); + } + } +} +#else +void at_client_yeild(at_urc *expect_urc, uint32_t timeout) +{ + int resp_buf_len = 0; + const at_urc *urc; + int line_counts = 0; + int prefix_len; + int suffix_len; + Timer timer; + at_client_t client = at_client_get(); + + Log_d("Entry..."); + countdown_ms(&timer, timeout); + do { + if (at_recv_readline(client) > 0) { +#ifdef AT_DEBUG + const char *cmd = NULL; + int cmdsize = 0; + cmd = at_get_last_cmd(&cmdsize); + Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); +#endif + if ((urc = get_urc_obj(client)) != NULL) { + /* current receive is request, try to execute related operations */ + if (urc->func != NULL) { + urc->func(client->recv_buffer, client->cur_recv_len); + } + + /*expect urc matched then break*/ + if (expect_urc != NULL) { + prefix_len = strlen(expect_urc->cmd_prefix); + suffix_len = strlen(expect_urc->cmd_suffix); + if ((prefix_len ? !strncmp(urc->cmd_prefix, expect_urc->cmd_prefix, prefix_len) : 1) && + (suffix_len ? !strncmp(urc->cmd_suffix, expect_urc->cmd_suffix, suffix_len) : 1)) { + client->resp_status = AT_RESP_OK; + break; + } + } + } else if (client->resp != NULL) { + if (client->end_sign != 0) { // handle endsign + if (client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) { + continue; + } else { + client->resp_status = AT_RESP_OK; + client->resp->line_counts = line_counts; + client->resp = NULL; + // client->resp_notice = true; + resp_buf_len = 0; + line_counts = 0; + break; + } + } + + /* current receive is response */ + client->recv_buffer[client->cur_recv_len - 1] = '\0'; + if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) { + /* copy response lines, separated by '\0' */ + memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); + resp_buf_len += client->cur_recv_len; + + line_counts++; + } else { + client->resp_status = AT_RESP_BUFF_FULL; + Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", + client->resp->buf_size); + } + /* check response result */ + if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 && + client->resp->line_num == 0) { + /* get the end data by response result, return response state END_OK. */ + client->resp_status = AT_RESP_OK; + } else if (strstr(client->recv_buffer, AT_RESP_END_ERROR) || + (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) { + client->resp_status = AT_RESP_ERROR; + } else if (line_counts == client->resp->line_num && client->resp->line_num) { + /* get the end data by response line, return response state END_OK.*/ + client->resp_status = AT_RESP_OK; + } else { + if (!expired(&timer)) { + continue; + } else { + break; + } + } + + client->resp->line_counts = line_counts; + client->resp = NULL; + // client->resp_notice = true; + resp_buf_len = 0; + line_counts = 0; + break; + } else { + // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); + } + } else { + // Log_d("read no new line"); + } + } while (!expired(&timer)); +} +#endif + +/* initialize the client parameters */ +int at_client_para_init(at_client_t client) +{ + char *ringBuff = NULL; + char *recvBuff = NULL; + + client->lock = HAL_MutexCreate(); + if (NULL == client->lock) { + Log_e("create lock err"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef AT_OS_USED + client->resp_sem = HAL_SemaphoreCreate(); + if (NULL == client->resp_sem) { + Log_e("create sem err"); + goto err_exit; + } + + client->parser = client_parser; +#endif + + ringBuff = HAL_Malloc(RING_BUFF_LEN); + if (NULL == ringBuff) { + Log_e("malloc ringbuff err"); + goto err_exit; + } + ring_buff_init(&g_ring_buff, ringBuff, RING_BUFF_LEN); + + recvBuff = HAL_Malloc(CLINET_BUFF_LEN); + if (NULL == recvBuff) { + Log_e("malloc recvbuff err"); + goto err_exit; + } + client->recv_buffer = recvBuff; + client->pRingBuff = &g_ring_buff; + client->recv_bufsz = CLINET_BUFF_LEN; + client->cur_recv_len = 0; + client->resp = NULL; + client->urc_table = NULL; + client->urc_table_size = 0; + client->end_sign = 0; + + return QCLOUD_RET_SUCCESS; + +err_exit: + if (client->lock) { + HAL_MutexDestroy(client->lock); + client->lock = NULL; + } + + if (client->resp_sem) { + HAL_SemaphoreDestroy(client->resp_sem); + client->resp_sem = NULL; + } + + HAL_Free(ringBuff); + HAL_Free(recvBuff); + + return QCLOUD_ERR_FAILURE; +} + +/** + * AT client initialize. + * + * @param pClient pinter of at client which to be inited + * @return @see eTidResault + */ +int at_client_init(at_client_t *pClient) +{ + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + at_client_t client; + int result; + + client = at_client_get(); + + if (NULL == client) { + Log_e("no at client get"); + result = QCLOUD_ERR_FAILURE; + goto exit; + } + + if (AT_STATUS_INITIALIZED == client->status) { + Log_e("at client has been initialized"); + result = QCLOUD_ERR_FAILURE; + goto exit; + } + + result = at_client_para_init(client); + if (result == QCLOUD_RET_SUCCESS) { + Log_d("AT client(V%s) initialize success.", AT_FRAME_VERSION); + client->status = AT_STATUS_INITIALIZED; + *pClient = client; + +#if defined(AT_OS_USED) && defined(MULTITHREAD_ENABLED) + // create thread for at parser + if (NULL != client->parser) { +#define AT_PARSER_THREAD_STACK 6144 +#define AT_PARSER_THREAD_PRIORITY 0 + ThreadParams thread_params = {0}; + thread_params.thread_func = client->parser; + thread_params.thread_name = "at_client_parser"; + thread_params.user_arg = client; + thread_params.stack_size = AT_PARSER_THREAD_STACK; + thread_params.priority = AT_PARSER_THREAD_PRIORITY; + + result = HAL_ThreadCreate(&thread_params); + if (QCLOUD_RET_SUCCESS == result) { + Log_d("create at_parser thread success!"); + } else { + Log_e("create at_parser thread fail!"); + } + +#undef AT_PARSER_THREAD_STACK +#undef AT_PARSER_THREAD_PRIORITY + } +#endif + + } else { + *pClient = NULL; + client->status = AT_STATUS_UNINITIALIZED; + Log_e("AT client(V%s) initialize failed(%d).", AT_FRAME_VERSION, result); + } + +exit: + + return result; +} + +int at_client_deinit(at_client_t pClient) +{ + // TO DO: + return QCLOUD_RET_SUCCESS; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c new file mode 100644 index 00000000..8994876e --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_socket_inf.c @@ -0,0 +1,413 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "at_socket_inf.h" + +#include +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/** The global array of available at */ +static at_socket_ctx_t at_socket_ctxs[MAX_AT_SOCKET_NUM]; + +/**at socket operation mutex */ +static void *sg_at_socket_mutex; + +/**at device driver ops*/ +static at_device_op_t *sg_at_device_ops = NULL; + +#define MAX_RECV_PKT_PER_CHAIN (10) + +static at_device_op_t *_at_device_op_get(void) +{ + return sg_at_device_ops; +} + +static int _at_socket_ctx_free(at_socket_ctx_t *pCtx) +{ + POINTER_SANITY_CHECK(pCtx, QCLOUD_ERR_INVAL); + + pCtx->fd = UNUSED_SOCKET; + pCtx->net_type = eNET_DEFAULT; + + if (pCtx->recvpkt_list) { + list_destroy(pCtx->recvpkt_list); + pCtx->recvpkt_list = NULL; + } + + if (pCtx->recv_lock) { + HAL_MutexDestroy(pCtx->recv_lock); + pCtx->recv_lock = NULL; + } + + return QCLOUD_RET_SUCCESS; +} + +static at_socket_ctx_t *_at_socket_ctx_alloc(void) +{ + int i; + + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + if (at_socket_ctxs[i].state == eSOCKET_CLOSED) { + at_socket_ctxs[i].net_type = eNET_DEFAULT; + at_socket_ctxs[i].send_timeout_ms = AT_SOCKET_SEND_TIMEOUT_MS; + at_socket_ctxs[i].recv_timeout_ms = AT_SOCKET_RECV_TIMEOUT_MS; + at_socket_ctxs[i].dev_op = _at_device_op_get(); + + at_socket_ctxs[i].recv_lock = HAL_MutexCreate(); + if (NULL == at_socket_ctxs[i].recv_lock) { + Log_e("create recv lock fail"); + goto exit; + } + at_socket_ctxs[i].recvpkt_list = list_new(); + if (NULL != at_socket_ctxs[i].recvpkt_list) { + at_socket_ctxs[i].recvpkt_list->free = HAL_Free; + } else { + Log_e("no memory to allocate recvpkt_list"); + goto exit; + } + + at_socket_ctxs[i].state = eSOCKET_ALLOCED; + return &at_socket_ctxs[i]; + } + } + +exit: + + if (i < MAX_AT_SOCKET_NUM) { + _at_socket_ctx_free(&at_socket_ctxs[i]); + } + + return NULL; +} + +static at_socket_ctx_t *_at_socket_find(int fd) +{ + int i; + + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + if (at_socket_ctxs[i].fd == fd) { + return &at_socket_ctxs[i]; + } + } + + return NULL; +} + +/* get a block to the AT socket receive list*/ +static int _at_recvpkt_put(List *rlist, const char *ptr, size_t length) +{ + at_recv_pkt *pkt = NULL; + + if (rlist->len > MAX_RECV_PKT_PER_CHAIN) { + Log_e("Too many recv packets wait for read"); + HAL_Free(pkt); + return QCLOUD_ERR_FAILURE; + } + + pkt = (at_recv_pkt *)HAL_Malloc(sizeof(struct at_recv_pkt)); + if (pkt == NULL) { + Log_e("No memory for receive packet table!"); + return QCLOUD_ERR_FAILURE; + } + + pkt->bfsz_totle = length; + pkt->bfsz_index = 0; + pkt->buff = (char *)ptr; + + ListNode *node = list_node_new(pkt); + if (NULL == node) { + Log_e("run list_node_new is error!"); + HAL_Free(pkt); + return QCLOUD_ERR_FAILURE; + } + + list_rpush(rlist, node); + + return length; +} + +/* get a block from AT socket receive list */ +static int _at_recvpkt_get(List *pkt_list, char *buff, size_t len) +{ + ListIterator *iter; + ListNode * node = NULL; + at_recv_pkt * pkt; + size_t readlen = 0, page_len = 0; + POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); + + if (pkt_list->len) { + iter = list_iterator_new(pkt_list, LIST_HEAD); + if (NULL == iter) { + Log_e("new listiterator fail"); + return QCLOUD_ERR_TCP_READ_FAIL; + } + + /*traverse recv pktlist*/ + do { + node = list_iterator_next(iter); + if (!node) { + break; + } + + /*get recv packet*/ + pkt = (at_recv_pkt *)(node->val); + if (!pkt) { + Log_e("pkt is invalid!"); + list_remove(pkt_list, node); + continue; + } + + page_len = pkt->bfsz_totle - pkt->bfsz_index; + if (page_len >= (len - readlen)) { + memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, (len - readlen)); + pkt->bfsz_index += len - readlen; + readlen = len; + break; + } else { + memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, page_len); + readlen += page_len; + + /*delete pkt after read*/ + HAL_Free(pkt->buff); + list_remove(pkt_list, node); + } + } while (1); + + list_iterator_destroy(iter); + } + + return readlen; +} + +static void _at_socket_recv_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) +{ + POINTER_SANITY_CHECK_RTN(buff); + at_socket_ctx_t *pAtSocket; + + if (event == AT_SOCKET_EVT_RECV) { + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); + if (_at_recvpkt_put(pAtSocket->recvpkt_list, buff, bfsz) < 0) { + Log_e("put recv package to list fail"); + HAL_Free(buff); + } + HAL_MutexUnlock(sg_at_socket_mutex); + } +} + +static void _at_socket_closed_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) +{ + // fancyxu + at_socket_ctx_t *pAtSocket; + pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); + + if (event == AT_SOCKET_EVT_CLOSED) { + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket->state = eSOCKET_CLOSED; + _at_socket_ctx_free(pAtSocket); + HAL_MutexUnlock(sg_at_socket_mutex); + } +} + +int at_device_op_register(at_device_op_t *device_op) +{ + int rc; + + if (NULL == sg_at_device_ops) { + sg_at_device_ops = device_op; + rc = QCLOUD_RET_SUCCESS; + } else { + Log_e("pre device op already register"); + rc = QCLOUD_ERR_FAILURE; + } + + return rc; +} + +int at_socket_init(void) +{ + int i; + int rc = QCLOUD_RET_SUCCESS; + + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + at_socket_ctxs[i].fd = UNUSED_SOCKET; + at_socket_ctxs[i].state = eSOCKET_CLOSED; + at_socket_ctxs[i].dev_op = NULL; + at_socket_ctxs[i].recvpkt_list = NULL; + } + + sg_at_socket_mutex = HAL_MutexCreate(); + if (sg_at_socket_mutex == NULL) { + Log_e("create sg_at_socket_mutex fail \n"); + rc = QCLOUD_ERR_FAILURE; + } + + if (NULL != sg_at_device_ops) { + if (QCLOUD_RET_SUCCESS == sg_at_device_ops->init()) { + Log_d("at device %s init success", + (NULL == sg_at_device_ops->deviceName) ? "noname" : sg_at_device_ops->deviceName); + sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_RECV, _at_socket_recv_cb); + sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_CLOSED, _at_socket_closed_cb); + } else { + Log_e("at device %s init fail", + (NULL == sg_at_device_ops->deviceName) ? "noname" : sg_at_device_ops->deviceName); + } + } + + return rc; +} + +int at_socket_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) +{ + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->parse_domain, QCLOUD_ERR_INVAL); + + return at_op->parse_domain(host_name, host_ip, host_ip_len); +} + +int at_socket_get_local_mac(char *macbuff, size_t bufflen) +{ + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->get_local_mac, QCLOUD_ERR_INVAL); + + return at_op->get_local_mac(macbuff, bufflen); +} + +int at_socket_get_local_ip(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen) +{ + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->get_local_ip, QCLOUD_ERR_INVAL); + + return at_op->get_local_ip(ip, iplen, gw, gwlen, mask, masklen); +} + +int at_socket_connect(const char *host, uint16_t port, eNetProto eProto) +{ + at_socket_ctx_t *pAtSocket; + int fd; + + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket = _at_socket_ctx_alloc(); + HAL_MutexUnlock(sg_at_socket_mutex); + + if ((NULL == pAtSocket) || (NULL == pAtSocket->dev_op) || (NULL == pAtSocket->dev_op->connect)) { + Log_e("alloc socket fail"); + return QCLOUD_ERR_FAILURE; + } + + fd = pAtSocket->dev_op->connect(host, port, eProto); + if (fd < 0) { + Log_e("dev_op connect fail,pls check at device driver!"); + _at_socket_ctx_free(pAtSocket); + } else { + pAtSocket->fd = fd + MAX_AT_SOCKET_NUM; + pAtSocket->state = eSOCKET_CONNECTED; + } + + return pAtSocket->fd; +} + +int at_socket_close(int fd) +{ + at_socket_ctx_t *pAtSocket; + + pAtSocket = _at_socket_find(fd); + if (NULL == pAtSocket) { // server close the connection + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } + + int rc; + if ((eSOCKET_CONNECTED == pAtSocket->state) && (NULL != pAtSocket->dev_op) && (NULL != pAtSocket->dev_op->close)) { + rc = pAtSocket->dev_op->close(pAtSocket->fd - MAX_AT_SOCKET_NUM); + } else { + rc = QCLOUD_ERR_FAILURE; + } + return rc; +} + +int at_socket_send(int fd, const void *buf, size_t len) +{ + at_socket_ctx_t *pAtSocket; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->send, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } else { + return pAtSocket->dev_op->send(fd - MAX_AT_SOCKET_NUM, buf, len); + } +} + +int at_socket_recv(int fd, void *buf, size_t len) +{ + at_socket_ctx_t *pAtSocket; + size_t recv_len; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_READ_FAIL; + } else { + HAL_MutexLock(pAtSocket->recv_lock); + + // call at device recv driver for os and nonos + if (pAtSocket->recvpkt_list->len == 0) { + if (pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, pAtSocket->recv_timeout_ms) != + QCLOUD_RET_SUCCESS) { + Log_e("at device recv err"); // do not return yet + } + } + + /* receive packet list last transmission of remaining data */ + recv_len = _at_recvpkt_get(pAtSocket->recvpkt_list, (char *)buf, len); + HAL_MutexUnlock(pAtSocket->recv_lock); + } + + return recv_len; +} + +int at_socket_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) +{ + at_socket_ctx_t *pAtSocket; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } else { + return pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, timeout); + } +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c new file mode 100644 index 00000000..9b0d5217 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/at_utils.c @@ -0,0 +1,345 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "at_utils.h" + +#include +#include + +#include "at_client.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +static char send_buf[CLINET_BUFF_LEN]; +static int last_cmd_len = 0; + +/** + * dump hex format data to console device + * + * @param name name for hex object, it will show on log header + * @param buf hex buffer + * @param size buffer size + */ +void at_print_raw_cmd(const char *name, const char *buf, int size) +{ + int i, j; + + for (i = 0; i < size; i += WIDTH_SIZE) { + HAL_Printf("%s: %04X-%04X: ", name, i, i + WIDTH_SIZE); + for (j = 0; j < WIDTH_SIZE; j++) { + if (i + j < size) { + HAL_Printf("%02X ", buf[i + j]); + } else { + HAL_Printf(" "); + } + if ((j + 1) % 8 == 0) { + HAL_Printf(" "); + } + } + HAL_Printf(" "); + for (j = 0; j < WIDTH_SIZE; j++) { + if (i + j < size) { + HAL_Printf("%c", __is_print(buf[i + j]) ? buf[i + j] : '.'); + } + } + HAL_Printf("\n\r"); + } +} + +const char *at_get_last_cmd(int *cmd_size) +{ + *cmd_size = last_cmd_len; + return send_buf; +} + +int at_vprintf(const char *format, va_list args) +{ + last_cmd_len = vsnprintf(send_buf, sizeof(send_buf), format, args); + +#ifdef AT_DEBUG + at_print_raw_cmd("send", send_buf, last_cmd_len); +#endif + + return HAL_AT_Uart_Send((uint8_t *)send_buf, last_cmd_len); +} + +int at_vprintfln(const char *format, va_list args) +{ + int len; + + len = at_vprintf(format, args); + + HAL_AT_Uart_Send("\r\n", 2); + + return len + 2; +} + +/** + * at_sscanf - Unformat a buffer into a list of arguments, rewrite sscanf + * @buf: input buffer + * @fmt: format of buffer + * @args: arguments + */ +int at_sscanf(const char *buf, const char *fmt, va_list args) +{ + const char *str = buf; + char * next; + int num = 0; + int qualifier; + int base; + int field_width = -1; + int is_sign = 0; + + while (*fmt && *str) { + /* skip any white space in format */ + /* white space in format matchs any amount of + * white space, including none, in the input. + */ + if (isspace(*fmt)) { + while (isspace(*fmt)) ++fmt; + while (isspace(*str)) ++str; + } + + /* anything that is not a conversion must match exactly */ + if (*fmt != '%' && *fmt) { + if (*fmt++ != *str++) + break; + continue; + } + + if (!*fmt) + break; + ++fmt; + + /* skip this conversion. + * advance both strings to next white space + */ + if (*fmt == '*') { + while (!isspace(*fmt) && *fmt) fmt++; + while (!isspace(*str) && *str) str++; + continue; + } + + /* get field width */ + if (isdigit(*fmt)) + field_width = atoi(fmt); + + /* get conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') { + qualifier = *fmt; + fmt++; + } + base = 10; + is_sign = 0; + + if (!*fmt || !*str) + break; + + switch (*fmt++) { + case 'c': { + char *s = (char *)va_arg(args, char *); + if (field_width == -1) + field_width = 1; + do { + *s++ = *str++; + } while (field_width-- > 0 && *str); + num++; + } + continue; + case 's': { + char *s = (char *)va_arg(args, char *); + if (field_width == -1) + field_width = INT_MAX; + /* first, skip leading white space in buffer */ + while (isspace(*str)) str++; + + /* now copy until next white space */ + while (*str && ((*str) != ',')) { + if (isspace(*str)) { + str++; + } else { + *s++ = *str++; + } + } + *s = '\0'; + num++; + } + continue; + /* S for special handling for MQTTPUB JSON content */ + case 'S': { + char *s = (char *)va_arg(args, char *); + if (field_width == -1) + field_width = INT_MAX; + /* first, skip leading white space in buffer */ + while (isspace(*str)) str++; + + /* now copy until next white space */ + while (*str) { + if (isspace(*str)) { + str++; + } else { + *s++ = *str++; + } + } + *s = '\0'; + num++; + } + continue; + case 'n': + /* return number of characters read so far */ + { + int *i = (int *)va_arg(args, int *); + *i = str - buf; + } + continue; + case 'o': + base = 8; + break; + case 'x': + case 'X': + base = 16; + break; + case 'd': + case 'i': + is_sign = 1; + case 'u': + break; + case '%': + /* looking for '%' in str */ + if (*str++ != '%') + return num; + continue; + default: + /* invalid format; stop here */ + return num; + } + + /* have some sort of integer conversion. + * first, skip white space in buffer. + */ + while (isspace(*str)) str++; + + if (!*str || !isdigit(*str)) + break; + + switch (qualifier) { + case 'h': + if (is_sign) { + short *s = (short *)va_arg(args, short *); + *s = (short)strtol(str, &next, base); + } else { + unsigned short *s = (unsigned short *)va_arg(args, unsigned short *); + *s = (unsigned short)strtoul(str, &next, base); + } + break; + case 'l': + if (is_sign) { + long *l = (long *)va_arg(args, long *); + *l = strtol(str, &next, base); + } else { + unsigned long *l = (unsigned long *)va_arg(args, unsigned long *); + *l = strtoul(str, &next, base); + } + break; + case 'L': + if (is_sign) { + long long *l = (long long *)va_arg(args, long long *); + *l = strtoll(str, &next, base); + } else { + unsigned long long *l = (unsigned long long *)va_arg(args, unsigned long long *); + *l = strtoull(str, &next, base); + } + break; + case 'Z': { + unsigned long *s = (unsigned long *)va_arg(args, unsigned long *); + *s = (unsigned long)strtoul(str, &next, base); + } break; + default: + if (is_sign) { + int *i = (int *)va_arg(args, int *); + *i = (int)strtol(str, &next, base); + } else { + unsigned int *i = (unsigned int *)va_arg(args, unsigned int *); + *i = (unsigned int)strtoul(str, &next, base); + } + break; + } + num++; + + if (!next) + break; + str = next; + } + return num; +} + +/** + * AT server request arguments parse arguments + * + * @param req_args request arguments + * @param req_expr request expression + * + * @return -1 : parse arguments failed + * 0 : parse without match + * >0 : The number of arguments successfully parsed + */ +int at_req_parse_args(const char *req_args, const char *req_expr, ...) +{ + va_list args; + int req_args_num = 0; + + POINTER_SANITY_CHECK(req_args, 0); + POINTER_SANITY_CHECK(req_expr, 0); + + va_start(args, req_expr); + + // req_args_num = vsscanf(req_args, req_expr, args); + req_args_num = at_sscanf(req_args, req_expr, args); + + va_end(args); + + return req_args_num; +} + +void at_strip(char *str, const char patten) +{ + char *start, *end; + + start = str; + end = str + strlen(str) - 1; + + if (*str == patten) { + start++; + } + + if (*end == patten) { + *end-- = '\0'; + } + + strcpy(str, start); +} + +void chr_strip(char *str, const char patten) +{ + char *end = str + strlen(str); + + while (*str != '\0') { + if (*str == patten) { + memmove(str, str + 1, end - str); + } + str++; + } +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c new file mode 100644 index 00000000..ae2974f2 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/at_socket/network_at_tcp.c @@ -0,0 +1,153 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#ifdef AT_TCP_ENABLED + +#include +#include +#include + +#include "at_socket_inf.h" +#include "network_interface.h" +#include "utils_param_check.h" +#include "utils_timer.h" + +int network_at_tcp_init(Network *pNetwork) +{ + int rc; + + /*at device init entry: at_client init, device driver register to at_socket*/ + rc = at_device_init(); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("at device init fail,rc:%d", rc); + return rc; + } + + /*do after at device init*/ + rc = at_socket_init(); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("at socket init fail,rc:%d", rc); + } + + return rc; +} + +int network_at_tcp_connect(Network *pNetwork) +{ + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + + int fd = at_socket_connect(pNetwork->host, pNetwork->port, eNET_TCP); + + if (fd < 0) { + Log_e("fail to connect with TCP server: %s:%u", pNetwork->host, pNetwork->port); + pNetwork->handle = AT_NO_CONNECTED_FD; + return -1; + } else { + Log_d("connected with TCP server: %s:%u", pNetwork->host, pNetwork->port); + pNetwork->handle = fd; + return 0; + } +} + +int network_at_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) +{ + int ret, err_code; + uint32_t len_recv; + Timer timer; + + InitTimer(&timer); + countdown_ms(&timer, timeout_ms); + + len_recv = 0; + err_code = 0; + + do { + if (expired(&timer)) { + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + break; + } + + ret = at_socket_recv(pNetwork->handle, data + len_recv, datalen - len_recv); + + if (ret > 0) { + len_recv += ret; + } else if (ret == 0) { + err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; + } else { // ret < 0 + Log_e("recv fail\n"); + err_code = QCLOUD_ERR_TCP_READ_FAIL; + break; + } + + } while ((len_recv < datalen)); + + if (err_code == QCLOUD_ERR_TCP_READ_TIMEOUT && len_recv == 0) { + err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; + } + + *read_len = len_recv; + + return (datalen == len_recv) ? QCLOUD_RET_SUCCESS : err_code; +} + +int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, + size_t *written_len) +{ + int ret; + uint32_t len_sent; + Timer timer; + int net_err = 0; + + InitTimer(&timer); + countdown_ms(&timer, timeout_ms); + + len_sent = 0; + ret = 1; /* send one time if timeout_ms is value 0 */ + + do { + ret = at_socket_send(pNetwork->handle, data + len_sent, datalen - len_sent); + + if (ret > 0) { + len_sent += ret; + } else if (0 == ret) { + Log_e("No data be sent\n"); + } else { + Log_e("send fail, ret:%d\n", ret); + net_err = 1; + break; + } + } while (!net_err && (len_sent < datalen) && (!expired(&timer))); + + *written_len = (size_t)len_sent; + + return (len_sent > 0 && net_err == 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_TCP_WRITE_FAIL; +} + +void network_at_tcp_disconnect(Network *pNetwork) +{ + int rc; + + rc = at_socket_close((int)pNetwork->handle); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("socket close error\n"); + } + + return; +} + +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/network_interface.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/network_interface.c new file mode 100644 index 00000000..ab8aa093 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/network_interface.c @@ -0,0 +1,111 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "network_interface.h" + +#include "qcloud_iot_export_error.h" +#include "utils_param_check.h" + +int is_network_connected(Network *pNetwork) +{ + return pNetwork->handle; +} + +#ifdef AT_TCP_ENABLED +int is_network_at_connected(Network *pNetwork) +{ + return pNetwork->handle == AT_NO_CONNECTED_FD ? 0 : pNetwork->handle == AT_NO_CONNECTED_FD; +} +#endif + +int network_init(Network *pNetwork) +{ + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + + // to avoid process crash when writing to a broken socket +#if defined(__linux__) + signal(SIGPIPE, SIG_IGN); +#endif + + switch (pNetwork->type) { + case NETWORK_TCP: +#ifdef AT_TCP_ENABLED + pNetwork->init = network_at_tcp_init; + pNetwork->connect = network_at_tcp_connect; + pNetwork->read = network_at_tcp_read; + pNetwork->write = network_at_tcp_write; + pNetwork->disconnect = network_at_tcp_disconnect; + pNetwork->is_connected = is_network_at_connected; + pNetwork->handle = AT_NO_CONNECTED_FD; +#else + pNetwork->init = network_tcp_init; + pNetwork->connect = network_tcp_connect; + pNetwork->read = network_tcp_read; + pNetwork->write = network_tcp_write; + pNetwork->disconnect = network_tcp_disconnect; + pNetwork->is_connected = is_network_connected; + pNetwork->handle = 0; +#endif + break; + +#ifndef AUTH_WITH_NOTLS + case NETWORK_TLS: + pNetwork->init = network_tls_init; + pNetwork->connect = network_tls_connect; + pNetwork->read = network_tls_read; + pNetwork->write = network_tls_write; + pNetwork->disconnect = network_tls_disconnect; + pNetwork->is_connected = is_network_connected; + pNetwork->handle = 0; + break; +#endif + +#ifdef COAP_COMM_ENABLED +#ifdef AUTH_WITH_NOTLS + case NETWORK_UDP: + pNetwork->init = network_udp_init; + pNetwork->connect = network_udp_connect; + pNetwork->read = network_udp_read; + pNetwork->write = network_udp_write; + pNetwork->disconnect = network_udp_disconnect; + pNetwork->is_connected = is_network_connected; + pNetwork->handle = 0; + break; +#else + case NETWORK_DTLS: + pNetwork->init = network_dtls_init; + pNetwork->connect = network_dtls_connect; + pNetwork->read = network_dtls_read; + pNetwork->write = network_dtls_write; + pNetwork->disconnect = network_dtls_disconnect; + pNetwork->is_connected = is_network_connected; + pNetwork->handle = 0; + break; +#endif +#endif + default: + Log_e("unknown network type: %d", pNetwork->type); + return QCLOUD_ERR_INVAL; + } + return pNetwork->init(pNetwork); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/socket/network_socket.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/socket/network_socket.c similarity index 71% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/socket/network_socket.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/socket/network_socket.c index 39de6317..184f0808 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/socket/network_socket.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/socket/network_socket.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -21,7 +21,7 @@ /* * TCP/UDP socket API */ - + int network_tcp_init(Network *pNetwork) { return QCLOUD_RET_SUCCESS; @@ -56,7 +56,7 @@ int network_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, ui int rc = 0; - rc =HAL_TCP_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); + rc = HAL_TCP_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); return rc; } @@ -83,49 +83,49 @@ int network_udp_init(Network *pNetwork) int network_udp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = HAL_UDP_ReadTimeout(pNetwork->handle, data, datalen, timeout_ms); - if (ret > 0) { - *read_len = ret; - ret = 0; - } + int ret = HAL_UDP_ReadTimeout(pNetwork->handle, data, datalen, timeout_ms); + if (ret > 0) { + *read_len = ret; + ret = 0; + } - return ret; + return ret; } int network_udp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = HAL_UDP_Write(pNetwork->handle, data, datalen); - if (ret > 0) { - *written_len = ret; - ret = 0; - } + int ret = HAL_UDP_Write(pNetwork->handle, data, datalen); + if (ret > 0) { + *written_len = ret; + ret = 0; + } - return ret; + return ret; } void network_udp_disconnect(Network *pNetwork) { - POINTER_SANITY_CHECK_RTN(pNetwork); + POINTER_SANITY_CHECK_RTN(pNetwork); - HAL_UDP_Disconnect(pNetwork->handle); - pNetwork->handle = 0; + HAL_UDP_Disconnect(pNetwork->handle); + pNetwork->handle = 0; - return ; + return; } int network_udp_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - pNetwork->handle = HAL_UDP_Connect(pNetwork->host, pNetwork->port); - if (0 == pNetwork->handle) { - return -1; - } - return 0; + pNetwork->handle = HAL_UDP_Connect(pNetwork->host, pNetwork->port); + if (0 == pNetwork->handle) { + return -1; + } + return 0; } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/tls/network_tls.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/tls/network_tls.c similarity index 72% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/tls/network_tls.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/tls/network_tls.c index 2950fa71..cbfb62d4 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/network/tls/network_tls.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/network/tls/network_tls.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -21,7 +21,7 @@ /* * TLS/DTLS network API */ -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS int network_tls_init(Network *pNetwork) { @@ -31,14 +31,14 @@ int network_tls_init(Network *pNetwork) int network_tls_connect(Network *pNetwork) { POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - + int ret = QCLOUD_ERR_FAILURE; - + pNetwork->handle = (uintptr_t)HAL_TLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); if (pNetwork->handle != 0) { ret = QCLOUD_RET_SUCCESS; } - + return ret; } @@ -55,7 +55,7 @@ int network_tls_write(Network *pNetwork, unsigned char *data, size_t datalen, ui { POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int rc = HAL_TLS_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); + int rc = HAL_TLS_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); return rc; } @@ -77,40 +77,40 @@ int network_dtls_init(Network *pNetwork) int network_dtls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - return HAL_DTLS_Read(pNetwork->handle, data, datalen, timeout_ms, read_len); + return HAL_DTLS_Read(pNetwork->handle, data, datalen, timeout_ms, read_len); } int network_dtls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - return HAL_DTLS_Write(pNetwork->handle, data, datalen, written_len); + return HAL_DTLS_Write(pNetwork->handle, data, datalen, written_len); } void network_dtls_disconnect(Network *pNetwork) { - POINTER_SANITY_CHECK_RTN(pNetwork); + POINTER_SANITY_CHECK_RTN(pNetwork); - HAL_DTLS_Disconnect(pNetwork->handle); - pNetwork->handle = 0; + HAL_DTLS_Disconnect(pNetwork->handle); + pNetwork->handle = 0; - return ; + return; } int network_dtls_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = QCLOUD_ERR_FAILURE; + int ret = QCLOUD_ERR_FAILURE; - pNetwork->handle = (uintptr_t)HAL_DTLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); - if (pNetwork->handle != 0) { - ret = QCLOUD_RET_SUCCESS; - } + pNetwork->handle = (uintptr_t)HAL_DTLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); + if (pNetwork->handle != 0) { + ret = QCLOUD_RET_SUCCESS; + } - return ret; + return ret; } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client.c new file mode 100644 index 00000000..d880741b --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client.c @@ -0,0 +1,360 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "coap_client.h" + +#include +#include +#include +#include +#include + +#include "qcloud_iot_ca.h" +#include "qcloud_iot_common.h" +#include "qcloud_iot_device.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_base64.h" +#include "utils_param_check.h" + +static uint16_t _get_random_start_packet_id(void) +{ + srand((unsigned)time(NULL)); + return rand() % 65536 + 1; +} + +DeviceInfo *IOT_COAP_GetDeviceInfo(void *pClient) +{ + POINTER_SANITY_CHECK(pClient, NULL); + CoAPClient *coap_client = (CoAPClient *)pClient; + return &coap_client->device_info; +} + +void *IOT_COAP_Construct(CoAPInitParams *pParams) +{ + POINTER_SANITY_CHECK(pParams, NULL); + STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); + STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); + + CoAPClient *coap_client = NULL; + if ((coap_client = (CoAPClient *)HAL_Malloc(sizeof(CoAPClient))) == NULL) { + Log_e("memory not enough to malloc COAPClient"); + return NULL; + } + + int rc = qcloud_iot_coap_init(coap_client, pParams); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("coap init failed: %d", rc); + HAL_Free(coap_client); + return NULL; + } + + if (coap_client->network_stack.connect(&coap_client->network_stack) != QCLOUD_RET_SUCCESS) { + Log_e("coap connect to host: %s:%d failed: %d", coap_client->network_stack.host, + coap_client->network_stack.port, rc); + HAL_Free(coap_client); + return NULL; + } else { + Log_i("coap connect to host: %s:%d success", coap_client->network_stack.host, coap_client->network_stack.port); + } + + coap_client_auth(coap_client); + while (coap_client->is_authed == -1) { + IOT_COAP_Yield(coap_client, 200); + } + + if (coap_client->is_authed == COAP_TRUE) { + Log_i("device auth successfully, connid: %s", coap_client->conn_id); + return coap_client; + } else { + Log_e("device auth failed, connid: %s", coap_client->conn_id); + void *client = coap_client; + IOT_COAP_Destroy(&client); + return NULL; + } +} + +void IOT_COAP_Destroy(void **pClient) +{ + POINTER_SANITY_CHECK_RTN(*pClient); + + CoAPClient *coap_client = (CoAPClient *)(*pClient); + + if ((coap_client)->network_stack.handle != 0) { + (coap_client)->network_stack.disconnect(&(coap_client)->network_stack); + } + + list_destroy(coap_client->message_list); + + HAL_MutexDestroy(coap_client->lock_send_buf); + HAL_MutexDestroy(coap_client->lock_list_wait_ack); + + if (coap_client->auth_token != NULL) { + HAL_Free(coap_client->auth_token); + coap_client->auth_token = NULL; + } + coap_client->auth_token_len = 0; + coap_client->is_authed = -1; + + HAL_Free(*pClient); + *pClient = NULL; + + Log_i("coap release!"); +} + +int IOT_COAP_Yield(void *pClient, uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + CoAPClient *coap_client = (CoAPClient *)pClient; + + return coap_message_cycle(coap_client, timeout_ms); +} + +int IOT_COAP_SendMessage(void *pClient, char *topicName, SendMsgParams *sendParams) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(topicName, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(sendParams, QCLOUD_ERR_INVAL); + + if (strlen(topicName) > URI_PATH_MAX_LEN) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); + } + + int ret = QCLOUD_RET_SUCCESS; + + CoAPClient *coap_client = (CoAPClient *)pClient; + + CoAPMessage send_message = DEFAULT_COAP_MESSAGE; + + coap_message_type_set(&send_message, COAP_MSG_CON); + coap_message_code_set(&send_message, COAP_MSG_REQ, COAP_MSG_POST); + + coap_message_id_set(&send_message, get_next_coap_msg_id(coap_client)); + + char message_token[8] = {0}; + int len = get_coap_message_token(pClient, message_token); + coap_message_token_set(&send_message, message_token, len); + + send_message.pay_load = (char *)HAL_Malloc(sendParams->pay_load_len); + if (NULL == send_message.pay_load) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + + coap_message_payload_set(&send_message, sendParams->pay_load, sendParams->pay_load_len); + + coap_message_option_add(&send_message, COAP_MSG_URI_PATH, strlen(topicName), topicName); + coap_message_option_add(&send_message, COAP_MSG_AUTH_TOKEN, coap_client->auth_token_len, coap_client->auth_token); + if (sendParams->need_resp == false) { + coap_message_option_add(&send_message, COAP_MSG_NEED_RESP, 1, "0"); + coap_message_context_set(&send_message, sendParams->user_context); + } else { + coap_message_option_add(&send_message, COAP_MSG_NEED_RESP, 1, "1"); + coap_message_callback_set(&send_message, sendParams->resp_callback); + coap_message_context_set(&send_message, sendParams->user_context); + } + + ret = coap_message_send(coap_client, &send_message); + + HAL_Free(send_message.pay_load); + + if (ret != QCLOUD_RET_SUCCESS) { + IOT_FUNC_EXIT_RC(ret) + } + + IOT_FUNC_EXIT_RC(send_message.msg_id) +} + +int IOT_COAP_GetMessageId(void *pMessage) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK(pMessage, QCLOUD_ERR_INVAL); + CoAPMessage *message = (CoAPMessage *)pMessage; + + IOT_FUNC_EXIT_RC(message->msg_id) +} + +int IOT_COAP_GetMessagePayload(void *pMessage, char **payload, int *payloadLen) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK(pMessage, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(payload, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(payloadLen, QCLOUD_ERR_INVAL); + + CoAPMessage *message = (CoAPMessage *)pMessage; + if (message->code_class != COAP_MSG_SUCCESS || message->code_detail != COAP_MSG_CODE_205_CONTENT) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + } + + *payload = message->pay_load; + *payloadLen = message->pay_load_len; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int IOT_COAP_GetMessageCode(void *pMessage) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK(pMessage, QCLOUD_ERR_INVAL); + + CoAPMessage *message = (CoAPMessage *)pMessage; + + int rc = COAP_EVENT_ACK_TIMEOUT; + + if (message->code_class == COAP_MSG_SUCCESS) { + rc = COAP_EVENT_RECEIVE_RESPCONTENT; + } else if (message->code_class == COAP_MSG_CLIENT_ERR) { + if (message->code_detail == COAP_MSG_CODE_401_UNAUTHORIZED) { + rc = COAP_EVENT_UNAUTHORIZED; + } else { + rc = COAP_EVENT_FORBIDDEN; + } + } else if (message->code_class == COAP_MSG_SERVER_ERR) { + rc = COAP_EVENT_INTERNAL_SERVER_ERROR; + } else if (message->code_class == COAP_MSG_SDKINTERNAL_ERR) { + rc = COAP_EVENT_SEPRESP_TIMEOUT; + } else { + /** + * no more error code + */ + Log_e("not supported code class: %d", message->code_class); + } + + IOT_FUNC_EXIT_RC(rc) +} + +int qcloud_iot_coap_init(CoAPClient *pClient, CoAPInitParams *pParams) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); + + memset(pClient, 0x0, sizeof(CoAPClient)); + + int rc = iot_device_info_set(&(pClient->device_info), pParams->product_id, pParams->device_name); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("failed to set device info: %d", rc); + return rc; + } + + int size = + HAL_Snprintf(pClient->host_addr, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_COAP_DEIRECT_DOMAIN); + if (size < 0 || size > HOST_STR_LENGTH - 1) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + pClient->is_authed = -1; + + if (pParams->command_timeout < MIN_COMMAND_TIMEOUT) + pParams->command_timeout = MIN_COMMAND_TIMEOUT; + if (pParams->command_timeout > MAX_COMMAND_TIMEOUT) + pParams->command_timeout = MAX_COMMAND_TIMEOUT; + pClient->command_timeout_ms = pParams->command_timeout; + +#ifndef AUTH_WITH_NOTLS +#ifdef AUTH_MODE_CERT + Log_d("cert file: %s", pParams->cert_file); + Log_d("key file: %s", pParams->key_file); + + strncpy(pClient->cert_file_path, pParams->cert_file, FILE_PATH_MAX_LEN - 1); + strncpy(pClient->key_file_path, pParams->key_file, FILE_PATH_MAX_LEN - 1); + + // device param for TLS connection + pClient->network_stack.ssl_connect_params.cert_file = pParams->cert_file; + pClient->network_stack.ssl_connect_params.key_file = pParams->key_file; + pClient->network_stack.ssl_connect_params.ca_crt = iot_ca_get(); + pClient->network_stack.ssl_connect_params.ca_crt_len = strlen(pClient->network_stack.ssl_connect_params.ca_crt); + +#else + pClient->network_stack.ssl_connect_params.psk_id = pClient->device_info.client_id; + if (pParams->device_secret != NULL) { + size_t src_len = strlen(pParams->device_secret); + size_t len; + memset(pClient->psk_decode, 0x00, DECODE_PSK_LENGTH); + qcloud_iot_utils_base64decode(pClient->psk_decode, DECODE_PSK_LENGTH, &len, + (unsigned char *)pParams->device_secret, src_len); + pClient->network_stack.ssl_connect_params.psk = (char *)pClient->psk_decode; + pClient->network_stack.ssl_connect_params.psk_length = len; + pClient->network_stack.ssl_connect_params.ca_crt = NULL; + pClient->network_stack.ssl_connect_params.ca_crt_len = 0; + } else { + Log_e("psk is empty!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + } +#endif + + pClient->network_stack.host = pClient->host_addr; + pClient->network_stack.port = COAP_SERVER_PORT; +#else + pClient->network_stack.host = pClient->host_addr; + pClient->network_stack.port = COAP_SERVER_PORT; +#endif + + pClient->auth_token = NULL; + pClient->auth_token_len = 0; + // next_msg_id, random: 1- 65536 + pClient->next_msg_id = _get_random_start_packet_id(); + pClient->read_buf_size = COAP_RECVMSG_MAX_BUFLEN; + pClient->send_buf_size = COAP_SENDMSG_MAX_BUFLEN; + + pClient->lock_send_buf = HAL_MutexCreate(); + if (pClient->lock_send_buf == NULL) { + Log_e("create send buf lock failed"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + pClient->lock_list_wait_ack = HAL_MutexCreate(); + if (pClient->lock_list_wait_ack == NULL) { + Log_e("create send buf lock failed"); + goto error; + } + + pClient->message_list = list_new(); + pClient->max_retry_count = pParams->max_retry_count; + pClient->event_handle = pParams->event_handle; + + // init network stack + qcloud_iot_coap_network_init(&(pClient->network_stack)); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + +error: + if (pClient->lock_send_buf != NULL) { + HAL_MutexDestroy(pClient->lock_send_buf); + pClient->lock_send_buf = NULL; + } + + if (pClient->lock_list_wait_ack != NULL) { + HAL_MutexDestroy(pClient->lock_list_wait_ack); + pClient->lock_list_wait_ack = NULL; + } + + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_auth.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_auth.c new file mode 100644 index 00000000..77464b4e --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_auth.c @@ -0,0 +1,147 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include "coap_client.h" +#include "qcloud_iot_common.h" +#include "qcloud_iot_device.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +static void _coap_client_auth_callback(void *message, void *userContext) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK_RTN(message); + POINTER_SANITY_CHECK_RTN(userContext); + + CoAPClient * client = (CoAPClient *)userContext; + CoAPMessage *msg = (CoAPMessage *)message; + + if (msg->code_class == COAP_MSG_SUCCESS && msg->code_detail == COAP_MSG_CODE_205_CONTENT) { + Log_i("auth token message success, code_class: %d code_detail: %d", msg->code_class, msg->code_detail); + if (msg->pay_load_len == 0 || msg->pay_load == NULL || strlen(msg->pay_load) == 0) { + client->is_authed = COAP_FALSE; + Log_e("auth token response empty"); + } else { + client->auth_token_len = msg->pay_load_len; + client->auth_token = HAL_Malloc(client->auth_token_len); + strncpy(client->auth_token, msg->pay_load, client->auth_token_len); + client->is_authed = COAP_TRUE; + Log_d("auth_token_len = %d, auth_token = %.*s", client->auth_token_len, client->auth_token_len, + client->auth_token); + } + } else { + client->is_authed = COAP_FALSE; + Log_e("auth token message failed, code_class: %d code_detail: %d", msg->code_class, msg->code_detail); + } + + IOT_FUNC_EXIT +} + +static void get_coap_next_conn_id(CoAPClient *pclient) +{ + int i = 0; + + srand((unsigned)time(0)); + + for (i = 0; i < COAP_MAX_CONN_ID_LEN - 1; i++) { + int flag = rand() % 3; + + switch (flag) { + case 0: + pclient->conn_id[i] = (rand() % 26) + 'a'; + break; + case 1: + pclient->conn_id[i] = (rand() % 26) + 'A'; + break; + case 2: + pclient->conn_id[i] = (rand() % 10) + '0'; + break; + } + } + + pclient->conn_id[COAP_MAX_CONN_ID_LEN - 1] = '\0'; + + return; +} + +int coap_client_auth(CoAPClient *pclient) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK(pclient, QCLOUD_ERR_COAP_NULL); + + int ret = QCLOUD_RET_SUCCESS; + + CoAPClient *coap_client = (CoAPClient *)pclient; + CoAPMessage send_message = DEFAULT_COAP_MESSAGE; + + coap_message_type_set(&send_message, COAP_MSG_CON); + coap_message_code_set(&send_message, COAP_MSG_REQ, COAP_MSG_POST); + + coap_message_id_set(&send_message, get_next_coap_msg_id(coap_client)); + + char message_token[8] = {0}; + int len = get_coap_message_token(pclient, message_token); + coap_message_token_set(&send_message, message_token, len); + + len = MAX_SIZE_OF_PRODUCT_ID + strlen(pclient->device_info.device_name) + strlen(COAP_AUTH_URI) + 4; + char *auth_path = (char *)HAL_Malloc(len); + HAL_Snprintf(auth_path, len, "%s/%s/%s", pclient->device_info.product_id, pclient->device_info.device_name, + COAP_AUTH_URI); + coap_message_option_add(&send_message, COAP_MSG_URI_PATH, strlen(auth_path), auth_path); + HAL_Free(auth_path); + + coap_message_option_add(&send_message, COAP_MSG_NEED_RESP, 1, "0"); + + coap_message_callback_set(&send_message, _coap_client_auth_callback); + coap_message_context_set(&send_message, pclient); + + get_coap_next_conn_id(coap_client); + + send_message.pay_load_len = strlen(QCLOUD_IOT_DEVICE_SDK_APPID) + COAP_MAX_CONN_ID_LEN + 2; + send_message.pay_load = (char *)HAL_Malloc(send_message.pay_load_len); + if (NULL == send_message.pay_load) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + + char *temp_pay_load = (char *)HAL_Malloc(send_message.pay_load_len); + if (NULL == temp_pay_load) { + HAL_Free(send_message.pay_load); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + } + + HAL_Snprintf(temp_pay_load, send_message.pay_load_len, "%s;%s", QCLOUD_IOT_DEVICE_SDK_APPID, coap_client->conn_id); + + coap_message_payload_set(&send_message, temp_pay_load, send_message.pay_load_len); + + ret = coap_message_send(coap_client, &send_message); + + HAL_Free(temp_pay_load); + HAL_Free(send_message.pay_load); + + IOT_FUNC_EXIT_RC(ret) +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_common.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_common.c new file mode 100644 index 00000000..936b353e --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_common.c @@ -0,0 +1,284 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#include "coap_client.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" + +/** + * @brief Free an option structure that was allocated by coap_msg_op_new + * + * @param[in,out] op Pointer to the option structure + */ +static void _coap_msg_op_delete(CoAPMsgOption *option) +{ + IOT_FUNC_ENTRY + HAL_Free(option->val); + HAL_Free(option); + IOT_FUNC_EXIT +} + +/** + * @brief Deinitialise an option linked-list structure + * + * @param[in,out] list Pointer to an option linked-list structure + */ +static void _coap_msg_op_list_destroy(CoAPMsgOptionList *list) +{ + IOT_FUNC_ENTRY + + CoAPMsgOption *prev = NULL; + CoAPMsgOption *option = NULL; + + option = list->first; + while (option != NULL) { + prev = option; + option = option->next; + _coap_msg_op_delete(prev); + } + memset(list, 0, sizeof(CoAPMsgOptionList)); + + IOT_FUNC_EXIT +} + +uint16_t get_next_coap_msg_id(CoAPClient *pClient) +{ + IOT_FUNC_ENTRY + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + unsigned int id = 0; + id = pClient->next_msg_id = + (uint16_t)((COAP_MSG_MAX_MSG_ID == pClient->next_msg_id) ? 1 : (pClient->next_msg_id + 1)); + + IOT_FUNC_EXIT_RC(id) +} + +unsigned int get_coap_message_token(CoAPClient *client, char *tokenData) +{ + unsigned int value = client->message_token; + tokenData[0] = ((value & 0x00FF) >> 0); + tokenData[1] = ((value & 0xFF00) >> 8); + tokenData[2] = ((value & 0xFF0000) >> 16); + tokenData[3] = ((value & 0xFF000000) >> 24); + client->message_token++; + return sizeof(unsigned int); +} + +int coap_message_type_set(CoAPMessage *message, unsigned type) +{ + IOT_FUNC_ENTRY + + if ((type != COAP_MSG_CON) && (type != COAP_MSG_NON) && (type != COAP_MSG_ACK) && (type != COAP_MSG_RST)) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) + } + message->type = type; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_code_set(CoAPMessage *message, unsigned code_class, unsigned code_detail) +{ + IOT_FUNC_ENTRY + + if (code_class > COAP_MSG_MAX_CODE_CLASS) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) + } + if (code_detail > COAP_MSG_MAX_CODE_DETAIL) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) + } + message->code_class = code_class; + message->code_detail = code_detail; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_id_set(CoAPMessage *message, unsigned msg_id) +{ + IOT_FUNC_ENTRY + + if (msg_id > COAP_MSG_MAX_MSG_ID) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) + } + message->msg_id = msg_id; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_token_set(CoAPMessage *message, char *buf, size_t len) +{ + IOT_FUNC_ENTRY + + if (len > COAP_MSG_MAX_TOKEN_LEN) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL) + } + memcpy(message->token, buf, len); + message->token_len = len; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_payload_set(CoAPMessage *message, char *buf, size_t len) +{ + IOT_FUNC_ENTRY + + message->pay_load_len = 0; + + if (len > 0) { + if (message->pay_load == NULL) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + } + + memcpy(message->pay_load, buf, len); + message->pay_load_len = len; + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_option_add(CoAPMessage *message, unsigned num, unsigned len, const char *val) +{ + IOT_FUNC_ENTRY + + CoAPMsgOption * prev = NULL; + CoAPMsgOption * option = NULL; + CoAPMsgOptionList *list = &message->op_list; + + if ((option = qcloud_iot_coap_option_init(num, len, val)) == NULL) { + Log_e("allocate new option failed."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + } + + if (list->first == NULL) { + /* empty list */ + list->first = option; + list->last = option; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) + } + + if (option->option_num < list->first->option_num) { + /* start of the list */ + option->next = list->first; + list->first = option; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) + } + + prev = list->first; + while (prev != list->last) { + /* middle of the list */ + if ((prev->option_num <= option->option_num) && (option->option_num < prev->next->option_num)) { + option->next = prev->next; + prev->next = option; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) + } + prev = prev->next; + } + + /* end of the list */ + list->last->next = option; + list->last = option; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_callback_set(CoAPMessage *message, OnRespCallback callback) +{ + IOT_FUNC_ENTRY + + message->handler = callback; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_context_set(CoAPMessage *message, void *userContext) +{ + IOT_FUNC_ENTRY + + message->user_context = userContext; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +CoAPMsgOption *qcloud_iot_coap_option_init(unsigned num, unsigned len, const char *val) +{ + IOT_FUNC_ENTRY + + CoAPMsgOption *option = NULL; + + option = (CoAPMsgOption *)HAL_Malloc(sizeof(CoAPMsgOption)); + if (option == NULL) { + Log_e("no space to malloc option"); + return NULL; + } + + option->option_num = num; + option->val_len = len; + option->val = (char *)HAL_Malloc(len); + if (option->val == NULL) { + HAL_Free(option); + option = NULL; + Log_e("no space to malloc option"); + return NULL; + } + + memcpy(option->val, val, len); + option->next = NULL; + + return option; +} + +void coap_message_destroy(CoAPMessage *message) +{ + IOT_FUNC_ENTRY + + _coap_msg_op_list_destroy(&message->op_list); + + if (message->pay_load != NULL) { + HAL_Free(message->pay_load); + } + + memset(message, 0, sizeof(CoAPMessage)); + + IOT_FUNC_EXIT +} + +void coap_msg_dump(CoAPMessage *msg) +{ + Log_i("msg->version = %u", msg->version); + Log_i("msg->type = %d", msg->type); + Log_i("msg->code_class = %u", msg->code_class); + Log_i("msg->code_detail = %u", msg->code_detail); + Log_i("msg->msg_id = %d", msg->msg_id); + Log_i("msg->pay_load_len = %d", msg->pay_load_len); + Log_i("msg->pay_load: %s", msg->pay_load); + + Log_i("msg->token_len = %u", msg->token_len); + Log_i("msg->token: %s", msg->token); + return; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c similarity index 73% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c index c6fbbb99..f6aaaecd 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_deserialize.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,23 +17,22 @@ extern "C" { #endif +#include +#include #include #include -#include #include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" #include "coap_client.h" - +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" #include "utils_param_check.h" -#define COAP_MSG_OPLIST_LAST(list) ((list)->last) /**< Get the last option in an option linked-list */ -#define COAP_MSG_OPLIST_EMPTY(list) ((list)->first == NULL) /**< Indicate whether or not an option linked-list is empty */ +#define COAP_MSG_OPLIST_LAST(list) ((list)->last) /**< Get the last option in an option linked-list */ +#define COAP_MSG_OPLIST_EMPTY(list) \ + ((list)->first == NULL) /**< Indicate whether or not an option linked-list is empty */ -#define Swap16(A) ((((uint16_t)(A) & 0xff00) >> 8) | (((uint16_t)(A) & 0x00ff) << 8)) +#define Swap16(A) ((((uint16_t)(A)&0xff00) >> 8) | (((uint16_t)(A)&0x00ff) << 8)) /** * @brief Check a message for correctness @@ -58,23 +57,18 @@ extern "C" { */ static int _coap_msg_check(CoAPMessage *msg) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY - if ((msg->code_class == 0) && (msg->code_detail == 0)) - { + if ((msg->code_class == 0) && (msg->code_detail == 0)) { /* empty message */ - if ((msg->type == COAP_MSG_NON) || (msg->token_len != 0) || (!COAP_MSG_OPLIST_EMPTY(&msg->op_list)) - || (msg->pay_load_len != 0)) - { + if ((msg->type == COAP_MSG_NON) || (msg->token_len != 0) || (!COAP_MSG_OPLIST_EMPTY(&msg->op_list)) || + (msg->pay_load_len != 0)) { Log_e("coap msg op list is not empty"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } - } - else - { + } else { /* non-empty message */ - if (msg->type == COAP_MSG_RST) - { + if (msg->type == COAP_MSG_RST) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } } @@ -94,25 +88,23 @@ static int _coap_msg_check(CoAPMessage *msg) * @retval 0 Success * @retval <0 Error */ -static int _coap_msg_op_list_add_last(CoAPMsgOptionList *list, unsigned num, unsigned len, const char *val) { - IOT_FUNC_ENTRY +static int _coap_msg_op_list_add_last(CoAPMsgOptionList *list, unsigned num, unsigned len, const char *val) +{ + IOT_FUNC_ENTRY CoAPMsgOption *option = NULL; - if ((option = qcloud_iot_coap_option_init(num, len, val)) == NULL) { - Log_e("allocate new option failed."); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) - } - - if (list->first == NULL) - { - list->first = option; - list->last = option; + if ((option = qcloud_iot_coap_option_init(num, len, val)) == NULL) { + Log_e("allocate new option failed."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) } - else - { + + if (list->first == NULL) { + list->first = option; + list->last = option; + } else { list->last->next = option; - list->last = option; + list->last = option; } IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) @@ -131,40 +123,35 @@ static int _coap_msg_op_list_add_last(CoAPMsgOptionList *list, unsigned num, uns */ static ssize_t _coap_message_deserialize_header(CoAPMessage *msg, char *buf, size_t len) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY char *p = buf; - if (len < 4) - { + if (len < 4) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } msg->version = (p[0] >> 6) & 0x03; - if (msg->version != COAP_MSG_VER) - { + if (msg->version != COAP_MSG_VER) { return -EINVAL; } - msg->type = (p[0] >> 4) & 0x03; + msg->type = (p[0] >> 4) & 0x03; msg->token_len = p[0] & 0x0f; - if (msg->token_len > sizeof(msg->token)) - { + if (msg->token_len > sizeof(msg->token)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } msg->code_detail = p[1] & 0x1f; - msg->code_class = (p[1] >> 5) & 0x07; + msg->code_class = (p[1] >> 5) & 0x07; - if ((msg->code_class != COAP_MSG_REQ) && (msg->code_class != COAP_MSG_SUCCESS) - && (msg->code_class != COAP_MSG_CLIENT_ERR) && (msg->code_class != COAP_MSG_SERVER_ERR)) - { + if ((msg->code_class != COAP_MSG_REQ) && (msg->code_class != COAP_MSG_SUCCESS) && + (msg->code_class != COAP_MSG_CLIENT_ERR) && (msg->code_class != COAP_MSG_SERVER_ERR)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_BADMSG) } msg->msg_id = Swap16(*((uint16_t *)(&p[2]))); p += 4; - len -= 4; IOT_FUNC_EXIT_RC(p - buf) } @@ -182,10 +169,9 @@ static ssize_t _coap_message_deserialize_header(CoAPMessage *msg, char *buf, siz */ static ssize_t _coap_message_deserialize_token(CoAPMessage *msg, char *buf, size_t len) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY - if (len < msg->token_len) - { + if (len < msg->token_len) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } @@ -207,83 +193,66 @@ static ssize_t _coap_message_deserialize_token(CoAPMessage *msg, char *buf, size */ static ssize_t _coap_message_deserialize_option(CoAPMessage *msg, char *buf, size_t len) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY - CoAPMsgOption *prev = NULL; - unsigned op_delta = 0; - unsigned op_len = 0; - unsigned op_num = 0; - char *p = buf; - int ret = 0; + CoAPMsgOption *prev = NULL; + unsigned op_delta = 0; + unsigned op_len = 0; + unsigned op_num = 0; + char * p = buf; + int ret = 0; - if (len < 1) - { + if (len < 1) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } op_delta = (p[0] >> 4) & 0x0f; - op_len = p[0] & 0x0f; - if ((op_delta == 15) || (op_len == 15)) - { + op_len = p[0] & 0x0f; + if ((op_delta == 15) || (op_len == 15)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } p++; len--; - if (op_delta == 13) - { - if (len < 1) - { + if (op_delta == 13) { + if (len < 1) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } op_delta += p[0]; p++; len--; - } - else if (op_delta == 14) - { - if (len < 2) - { + } else if (op_delta == 14) { + if (len < 2) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } op_delta = 269 + Swap16(*((uint16_t *)(&p[0]))); p += 2; len -= 2; } - if (op_len == 13) - { - if (len < 1) - { + if (op_len == 13) { + if (len < 1) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } op_len += p[0]; p++; len--; - } - else if (op_len == 14) - { - if (len < 2) - { + } else if (op_len == 14) { + if (len < 2) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } op_len = 269 + Swap16(*((uint16_t *)(&p[0]))); p += 2; len -= 2; } - if (len < op_len) - { + if (len < op_len) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } prev = COAP_MSG_OPLIST_LAST(&msg->op_list); - if (prev == NULL) - { + if (prev == NULL) { op_num = op_delta; - } - else - { + } else { op_num = COAP_MSG_OPTION_NUM(prev) + op_delta; } ret = _coap_msg_op_list_add_last(&msg->op_list, op_num, op_len, p); - if (ret < 0) - { + if (ret < 0) { IOT_FUNC_EXIT_RC(ret) } p += op_len; @@ -304,20 +273,17 @@ static ssize_t _coap_message_deserialize_option(CoAPMessage *msg, char *buf, siz */ static ssize_t _coap_message_deserialize_options(CoAPMessage *msg, char *buf, size_t len) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY ssize_t num = 0; - char *p = buf; + char * p = buf; - while (1) - { - if (((p[0] & 0xff) == 0xff) || (len == 0)) - { + while (1) { + if (((p[0] & 0xff) == 0xff) || (len == 0)) { break; } num = _coap_message_deserialize_option(msg, p, len); - if (num < 0) - { + if (num < 0) { return num; } p += num; @@ -340,29 +306,25 @@ static ssize_t _coap_message_deserialize_options(CoAPMessage *msg, char *buf, si */ static ssize_t _coap_message_deserialize_payload(CoAPMessage *msg, char *buf, size_t len) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY char *p = buf; - if (len == 0) - { + if (len == 0) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) } - if ((p[0] & 0xff) != 0xff) - { + if ((p[0] & 0xff) != 0xff) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } p++; len--; - if (len == 0) - { + if (len == 0) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } msg->pay_load = (char *)HAL_Malloc(len); - if (msg->pay_load == NULL) - { + if (msg->pay_load == NULL) { return -ENOMEM; } @@ -375,15 +337,14 @@ static ssize_t _coap_message_deserialize_payload(CoAPMessage *msg, char *buf, si ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len) { - IOT_FUNC_ENTRY + IOT_FUNC_ENTRY ssize_t num = 0; - char *p = buf; + char * p = buf; num = _coap_message_deserialize_header(message, p, len); - if (num < 0) - { - Log_e("coap_message_deserialize_header failed, num:%lu", num); + if (num < 0) { + Log_e("coap_message_deserialize_header failed, num:%lu", num); coap_message_destroy(message); goto error; } @@ -391,9 +352,8 @@ ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len) p += num; len -= num; num = _coap_message_deserialize_token(message, p, len); - if (num < 0) - { - Log_e("coap_message_deserialize_token failed, num:%lu", num); + if (num < 0) { + Log_e("coap_message_deserialize_token failed, num:%lu", num); coap_message_destroy(message); goto error; } @@ -401,9 +361,8 @@ ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len) p += num; len -= num; num = _coap_message_deserialize_options(message, p, len); - if (num < 0) - { - Log_e("coap_message_deserialize_options failed, num:%lu", num); + if (num < 0) { + Log_e("coap_message_deserialize_options failed, num:%lu", num); coap_message_destroy(message); goto error; } @@ -411,9 +370,8 @@ ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len) p += num; len -= num; num = _coap_message_deserialize_payload(message, p, len); - if (num < 0) - { - Log_e("coap_message_deserialize_payload failed, num:%lu", num); + if (num < 0) { + Log_e("coap_message_deserialize_payload failed, num:%lu", num); coap_message_destroy(message); goto error; } @@ -421,10 +379,9 @@ ssize_t deserialize_coap_message(CoAPMessage *message, char *buf, size_t len) IOT_FUNC_EXIT_RC(_coap_msg_check(message)) error: - IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_INTERNAL) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_INTERNAL) } #ifdef __cplusplus } #endif - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_message.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_message.c new file mode 100644 index 00000000..c9bc1d22 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_message.c @@ -0,0 +1,418 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include "coap_client.h" +#include "coap_client_net.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_param_check.h" +#include "utils_timer.h" + +#define PROCESS_ACK_CMD (0) +#define PROCESS_PIGGY_CMD (1) +#define PROCESS_RESP_CMD (2) +#define PROCESS_WAIT_CMD (3) + +static void _event_message_type_set(CoAPEventMessage *eventMsg, CoAPMessage *message, uint16_t processCmd) +{ + if (message->code_class == COAP_MSG_SUCCESS && message->code_detail == COAP_MSG_CODE_205_CONTENT) { + eventMsg->event_type = processCmd == PROCESS_RESP_CMD ? COAP_EVENT_RECEIVE_RESPCONTENT : COAP_EVENT_RECEIVE_ACK; + } else if (message->code_class == COAP_MSG_CLIENT_ERR && message->code_detail == COAP_MSG_CODE_401_UNAUTHORIZED) { + eventMsg->event_type = COAP_EVENT_UNAUTHORIZED; + Log_e("coap messagefailed, message id: %d, failure reason: %d.%d", message->msg_id, message->code_class, + message->code_detail); + } else if (message->code_class == COAP_MSG_CLIENT_ERR && message->code_detail == COAP_MSG_CODE_403_FORBIDDEN) { + eventMsg->event_type = COAP_EVENT_FORBIDDEN; + Log_e("coap message failed, message id: %d, failure reason: %d.%d", message->msg_id, message->code_class, + message->code_detail); + } else { + eventMsg->event_type = COAP_EVENT_INTERNAL_SERVER_ERROR; + Log_e("coap message failed, message id: %d, failure reason: %d.%d", message->msg_id, message->code_class, + message->code_detail); + } +} + +static int _coap_message_list_proc(CoAPClient *client, CoAPMessage *message, uint16_t processCmd) +{ + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(client, QCLOUD_ERR_INVAL); + + HAL_MutexLock(client->lock_list_wait_ack); + + if (client->message_list->len <= 0) { + HAL_MutexUnlock(client->lock_list_wait_ack); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + ListIterator * iter; + ListNode * node = NULL; + ListNode * temp_node = NULL; + CoAPMsgSendInfo *send_info = NULL; + + if ((iter = list_iterator_new(client->message_list, LIST_TAIL)) == NULL) { + HAL_MutexUnlock(client->lock_list_wait_ack); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + + for (;;) { + node = list_iterator_next(iter); + + if (NULL != temp_node) { + list_remove(client->message_list, temp_node); + Log_i("remove node"); + temp_node = NULL; + } + + if (NULL == node) { + break; + } + + send_info = (CoAPMsgSendInfo *)node->val; + if (NULL == send_info) { + Log_e("node's value is invalid!"); + continue; + } + + if (processCmd == PROCESS_ACK_CMD) { + if (send_info->msg_id == message->msg_id) { + send_info->acked = 1; /* ACK is received */ + InitTimer(&send_info->start_time); + countdown_ms(&send_info->start_time, client->command_timeout_ms); + } + } else if (processCmd == PROCESS_RESP_CMD) { + if (0 != send_info->token_len && send_info->token_len == message->token_len && + 0 == memcmp(send_info->token, message->token, message->token_len)) { + message->user_context = send_info->user_context; + + if (send_info->handler != NULL) { + send_info->handler(message, send_info->user_context); + } else if (NULL != client->event_handle.h_fp) { // event handle process + CoAPEventMessage event_msg = {0}; + _event_message_type_set(&event_msg, message, processCmd); + event_msg.message = message; + message->msg_id = send_info->msg_id; + client->event_handle.h_fp(client->event_handle.context, &event_msg); + } else { + Log_e("nether response callback nor event callback is set"); + } + + Log_d("remove the message id %d from list", send_info->msg_id); + send_info->node_state = COAP_NODE_STATE_INVALID; + } + } else if (processCmd == PROCESS_PIGGY_CMD) { + if (send_info->msg_id == message->msg_id) { + message->user_context = send_info->user_context; + + if (send_info->handler != NULL) { + send_info->handler(message, send_info->user_context); + } else if (NULL != client->event_handle.h_fp) { // event handle process + CoAPEventMessage event_msg = {0}; + _event_message_type_set(&event_msg, message, processCmd); + event_msg.message = (void *)(uintptr_t)(message->msg_id); + client->event_handle.h_fp(client->event_handle.context, &event_msg); + } else { + Log_e("nether response callback nor event callback is set"); + } + + Log_d("remove the message id %d from list", send_info->msg_id); + + send_info->acked = 1; /* ACK is received */ + send_info->node_state = COAP_NODE_STATE_INVALID; + } + } else if (processCmd == PROCESS_WAIT_CMD) { + if (COAP_NODE_STATE_INVALID == send_info->node_state) { + temp_node = node; + continue; + } + + if (left_ms(&send_info->start_time) > 0) { + continue; + } + + if (send_info->retrans_count < client->max_retry_count && (0 == send_info->acked)) { + InitTimer(&send_info->start_time); + countdown_ms(&send_info->start_time, client->command_timeout_ms); + send_info->retrans_count++; + Log_d("start to retansmit the message id %d len %d", send_info->msg_id, send_info->msglen); + size_t written_len = 0; + int ret = client->network_stack.write(&client->network_stack, send_info->message, send_info->msglen, + left_ms(&send_info->start_time), &written_len); + if (ret != QCLOUD_RET_SUCCESS) { + Log_e("retansmit the message id %d failed.", send_info->msg_id, send_info->msglen); + continue; + } + } else { + send_info->node_state = COAP_NODE_STATE_INVALID; + temp_node = node; + + if (send_info->handler != NULL) { + message->type = COAP_MSG_ACK; + message->user_context = send_info->user_context; + message->code_class = COAP_MSG_SDKINTERNAL_ERR; + message->code_detail = COAP_MSG_CODE_600_TIMEOUT; + message->msg_id = send_info->msg_id; + send_info->handler(message, send_info->user_context); + } else if (NULL != client->event_handle.h_fp) { + CoAPEventMessage event_msg = {0}; + if (send_info->acked) { + event_msg.event_type = COAP_EVENT_SEPRESP_TIMEOUT; + } else { + event_msg.event_type = COAP_EVENT_ACK_TIMEOUT; + } + event_msg.message = (void *)(uintptr_t)(send_info->msg_id); + client->event_handle.h_fp(client->event_handle.context, &event_msg); + } else { + Log_e("nether response callback nor event callback is set"); + } + + continue; + } + } + } + + list_iterator_destroy(iter); + HAL_MutexUnlock(client->lock_list_wait_ack); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +/** + * @brief Send ACK to server + * + * @param client reference to CoAP client + * @param msgId msg Id + * + * @returns Operation status + * @retval 0 Success + * @retval <0 Error + */ +static int _coap_client_send_ack(CoAPClient *client, int msgId) +{ + IOT_FUNC_ENTRY + + CoAPMessage ack = DEFAULT_COAP_MESSAGE; + int ret = 0; + + if ((ret = coap_message_type_set(&ack, COAP_MSG_ACK)) != QCLOUD_RET_SUCCESS) { + coap_message_destroy(&ack); + IOT_FUNC_EXIT_RC(ret) + } + + if ((ret = coap_message_id_set(&ack, msgId)) != QCLOUD_RET_SUCCESS) { + coap_message_destroy(&ack); + IOT_FUNC_EXIT_RC(ret) + } + + ret = coap_message_send(client, &ack); + coap_message_destroy(&ack); + + IOT_FUNC_EXIT_RC(ret) +} + +static int _coap_piggyresp_message_handle(CoAPClient *client, CoAPMessage *message) +{ + IOT_FUNC_ENTRY + + int rc = _coap_message_list_proc(client, message, PROCESS_PIGGY_CMD); + + IOT_FUNC_EXIT_RC(rc) +} + +static int _coap_ack_message_handle(CoAPClient *client, CoAPMessage *message) +{ + IOT_FUNC_ENTRY + + int rc = _coap_message_list_proc(client, message, PROCESS_ACK_CMD); + + IOT_FUNC_EXIT_RC(rc) +} + +static int _coap_resp_message_handle(CoAPClient *client, CoAPMessage *message) +{ + IOT_FUNC_ENTRY + + int rc = 0; + + if (COAP_MSG_CON == message->type) { + rc = _coap_client_send_ack(client, message->msg_id); + Log_d("send ack message for id: %d rc: %d", message->msg_id, rc); + } + + rc = _coap_message_list_proc(client, message, PROCESS_RESP_CMD); + + IOT_FUNC_EXIT_RC(rc) +} + +static void _coap_message_handle(CoAPClient *client, unsigned char *buf, unsigned short datalen) +{ + IOT_FUNC_ENTRY + + int rc = QCLOUD_RET_SUCCESS; + CoAPMessage recv_message; + memset(&recv_message, 0x00, sizeof(CoAPMessage)); + + if ((rc = deserialize_coap_message(&recv_message, (char *)buf, datalen)) != QCLOUD_RET_SUCCESS) { + Log_e("deserialize message failed: %d", rc); + } + + if (recv_message.type == COAP_MSG_ACK && COAP_MSG_IS_EMPTY_ACK(&recv_message)) { // empty ACK + Log_d("receive coap ACK message, id %d", recv_message.msg_id); + _coap_ack_message_handle(client, &recv_message); + } else if (recv_message.type == COAP_MSG_ACK && !COAP_MSG_IS_EMPTY(&recv_message)) { // piggy Response + Log_d("receive coap piggy ACK message, id %d", recv_message.msg_id); + _coap_piggyresp_message_handle(client, &recv_message); + } else if (recv_message.type == COAP_MSG_CON && COAP_MSG_IS_EMPTY_RSP(&recv_message)) { // payload Response + Log_d("receive coap response message, id: %d", recv_message.msg_id); + _coap_resp_message_handle(client, &recv_message); + } else if (recv_message.type == COAP_MSG_NON && COAP_MSG_IS_EMPTY_RSP(&recv_message)) { // payload Response + Log_d("receive coap response message, id: %d", recv_message.msg_id); + _coap_resp_message_handle(client, &recv_message); + } else { + Log_e("not recgonized recv message type"); + } + + if (recv_message.pay_load != NULL) { + HAL_Free(recv_message.pay_load); + recv_message.pay_load_len = 0; + } + + IOT_FUNC_EXIT +} + +static int _coap_message_list_add(CoAPClient *client, CoAPMessage *message, int len) +{ + IOT_FUNC_ENTRY + + CoAPMsgSendInfo *send_info = (CoAPMsgSendInfo *)HAL_Malloc(sizeof(CoAPMsgSendInfo)); + if (send_info == NULL) { + Log_e("no memory to malloc SendInfo"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + } + + send_info->node_state = COAP_NODE_STATE_NORMANL; + send_info->acked = 0; + send_info->user_context = message->user_context; + send_info->msg_id = message->msg_id; + send_info->handler = message->handler; + send_info->msglen = len; + + if (COAP_MSG_CON == message->type) { + send_info->retrans_count = 0; + InitTimer(&send_info->start_time); + countdown_ms(&send_info->start_time, client->command_timeout_ms); + } else { + } + + send_info->token_len = message->token_len; + memcpy(send_info->token, message->token, message->token_len); + send_info->message = (unsigned char *)HAL_Malloc(len); + + if (NULL != send_info->message) { + memcpy(send_info->message, client->send_buf, len); + } + + ListNode *node = list_node_new(send_info); + if (NULL == node) { + Log_e("run list_node_new is error!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + } + + HAL_MutexLock(client->lock_list_wait_ack); + list_rpush(client->message_list, node); + HAL_MutexUnlock(client->lock_list_wait_ack); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int coap_message_cycle(CoAPClient *client, uint32_t timeout_ms) +{ + POINTER_SANITY_CHECK(client, QCLOUD_ERR_INVAL); + + int rc = coap_message_recv(client, timeout_ms); + + if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_ERR_SSL_READ_TIMEOUT) { + IOT_FUNC_EXIT_RC(rc) + } + + CoAPMessage message = DEFAULT_COAP_MESSAGE; + rc = _coap_message_list_proc(client, &message, PROCESS_WAIT_CMD); + + IOT_FUNC_EXIT_RC(rc) +} + +ssize_t coap_message_send(CoAPClient *client, CoAPMessage *message) +{ + IOT_FUNC_ENTRY + + ssize_t ret; + size_t written_len = 0; + + HAL_MutexLock(client->lock_send_buf); + + if ((ret = serialize_coap_message(message, (char *)client->send_buf, client->send_buf_size)) < 0) { + Log_e("failed to serialize coap message"); + HAL_MutexUnlock(client->lock_send_buf); + IOT_FUNC_EXIT_RC(ret) + } + + ret = client->network_stack.write(&client->network_stack, client->send_buf, ret, 0, &written_len); + + if (ret == QCLOUD_RET_SUCCESS) { + if (message->type == COAP_MSG_CON && message->code_class == COAP_MSG_REQ) { + ret = _coap_message_list_add(client, message, written_len); + Log_i("add coap message id: %d into wait list ret: %d", message->msg_id, ret); + } else { + Log_i("The message doesn't need to be retransmitted"); + } + } else { + Log_e("coap net fail to write rc: %d", ret); + } + + HAL_MutexUnlock(client->lock_send_buf); + + IOT_FUNC_EXIT_RC(ret) +} + +ssize_t coap_message_recv(CoAPClient *client, uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY + + size_t read_lean = 0; + int rc = 0; + + rc = client->network_stack.read(&client->network_stack, client->recv_buf, client->read_buf_size, timeout_ms, + &read_lean); + switch (rc) { + case QCLOUD_RET_SUCCESS: + _coap_message_handle(client, client->recv_buf, read_lean); + break; + case QCLOUD_ERR_SSL_READ_TIMEOUT: + break; + default: + break; + } + + IOT_FUNC_EXIT_RC(rc) +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_net.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_net.c similarity index 89% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_net.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_net.c index be755fdc..6f6a3fcc 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_net.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_net.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -20,14 +20,14 @@ extern "C" { #include "coap_client_net.h" #include "network_interface.h" - + int qcloud_iot_coap_network_init(Network *pNetwork) { int rc; /* first choice: TLS */ pNetwork->type = NETWORK_DTLS; -#ifdef AUTH_WITH_NOTLS +#ifdef AUTH_WITH_NOTLS pNetwork->type = NETWORK_UDP; #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c similarity index 74% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c index 32e77b3f..8d33b638 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/coap/coap_client_serialize.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,20 +17,18 @@ extern "C" { #endif +#include +#include #include #include -#include #include -#include - -#include "qcloud_iot_export.h" -#include "qcloud_iot_import.h" #include "coap_client.h" - +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" #include "utils_param_check.h" -#define COAP_MSG_OPLIST_FIRST(list) ((list)->first) /**< Get the first option from an option linked-list */ +#define COAP_MSG_OPLIST_FIRST(list) ((list)->first) /**< Get the first option from an option linked-list */ /** * @brief Format the header in a message @@ -43,19 +41,16 @@ extern "C" { * @retval >0 Length of the formatted message * @retval <0 Error */ -static ssize_t _coap_message_serialize_header(CoAPMessage *message, char *buf, size_t len) { - IOT_FUNC_ENTRY +static ssize_t _coap_message_serialize_header(CoAPMessage *message, char *buf, size_t len) +{ + IOT_FUNC_ENTRY - if (len < 4) - { + if (len < 4) { return -ENOSPC; } - buf[0] = (char)((COAP_MSG_VER << 6) - | ((message->type & 0x03) << 4) - | (message->token_len & 0x0f)); - buf[1] = (char)(((message->code_class & 0x07) << 5) - | (message->code_detail & 0x1f)); + buf[0] = (char)((COAP_MSG_VER << 6) | ((message->type & 0x03) << 4) | (message->token_len & 0x0f)); + buf[1] = (char)(((message->code_class & 0x07) << 5) | (message->code_detail & 0x1f)); buf[2] = (message->msg_id & 0xFF00) >> 8; buf[3] = (message->msg_id & 0x00FF); @@ -74,11 +69,11 @@ static ssize_t _coap_message_serialize_header(CoAPMessage *message, char *buf, s * @retval >0 Length of the formatted message * @retval <0 Error */ -static ssize_t _coap_message_serialize_token(CoAPMessage *message, char *buf, size_t len) { - IOT_FUNC_ENTRY +static ssize_t _coap_message_serialize_token(CoAPMessage *message, char *buf, size_t len) +{ + IOT_FUNC_ENTRY - if (len < message->token_len) - { + if (len < message->token_len) { return -ENOSPC; } memcpy(buf, message->token, message->token_len); @@ -98,98 +93,76 @@ static ssize_t _coap_message_serialize_token(CoAPMessage *message, char *buf, si * @retval >0 Length of the formatted message * @retval <0 Error */ -static ssize_t _coap_msg_format_op(CoAPMsgOption *op, unsigned prev_num, char *buf, size_t len) { - IOT_FUNC_ENTRY +static ssize_t _coap_msg_format_op(CoAPMsgOption *op, unsigned prev_num, char *buf, size_t len) +{ + IOT_FUNC_ENTRY unsigned short op_delta = 0; - unsigned num = 0; - char *p = buf; + unsigned num = 0; + char * p = buf; op_delta = op->option_num - prev_num; num++; /* option delta */ - if (op_delta >= 269) - { + if (op_delta >= 269) { num += 2; - } - else if (op_delta >= 13) - { + } else if (op_delta >= 13) { num += 1; } /* option length */ - if (op->val_len >= 269) - { + if (op->val_len >= 269) { num += 2; - } - else if (op->option_num >= 13) - { + } else if (op->option_num >= 13) { num += 1; } /* option value */ num += op->val_len; - if (num > len) - { + if (num > len) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_DATA_SIZE) } /* option delta */ - if (op_delta >= 269) - { + if (op_delta >= 269) { p[0] = 14 << 4; - } - else if (op_delta >= 13) - { + } else if (op_delta >= 13) { p[0] = 13 << 4; - } - else - { + } else { p[0] = op_delta << 4; } /* option length */ - if (op->val_len >= 269) - { + if (op->val_len >= 269) { p[0] |= 14; - } - else if (op->val_len >= 13) - { + } else if (op->val_len >= 13) { p[0] |= 13; - } - else - { + } else { p[0] |= op->val_len; } p++; len--; /* option delta extended */ - if (op_delta >= 269) - { - *p = (unsigned char)(((op_delta - 269) & 0xFF00) >> 8); - *(p+1) = (unsigned char)(((op_delta - 269) & 0x00FF)); + if (op_delta >= 269) { + *p = (unsigned char)(((op_delta - 269) & 0xFF00) >> 8); + *(p + 1) = (unsigned char)(((op_delta - 269) & 0x00FF)); p += 2; len -= 2; - } - else if (op_delta >= 13) - { + } else if (op_delta >= 13) { p[0] = op_delta - 13; p++; len--; } /* option length extended */ - if (op->val_len >= 269) - { - *p = (unsigned char)(((op->val_len - 269) & 0xFF00) >> 8); - *(p+1) = (unsigned char)(((op->val_len - 269) & 0x00FF)); + if (op->val_len >= 269) { + *p = (unsigned char)(((op->val_len - 269) & 0xFF00) >> 8); + *(p + 1) = (unsigned char)(((op->val_len - 269) & 0x00FF)); p += 2; len -= 2; - } - else if (op->val_len >= 13) - { + } else if (op->val_len >= 13) { p[0] = op->val_len - 13; p++; len--; @@ -213,26 +186,25 @@ static ssize_t _coap_msg_format_op(CoAPMsgOption *op, unsigned prev_num, char *b * @retval >0 Length of the formatted message * @retval <0 Error */ -static ssize_t _coap_message_serialize_options(CoAPMessage *message, char *buf, size_t len) { +static ssize_t _coap_message_serialize_options(CoAPMessage *message, char *buf, size_t len) +{ IOT_FUNC_ENTRY; - CoAPMsgOption *op = NULL; - unsigned prev_num = 0; - ssize_t num = 0; - char *p = buf; + CoAPMsgOption *op = NULL; + unsigned prev_num = 0; + ssize_t num = 0; + char * p = buf; op = COAP_MSG_OPLIST_FIRST(&message->op_list); - while (op != NULL) - { + while (op != NULL) { num = _coap_msg_format_op(op, prev_num, p, len); - if (num < 0) - { + if (num < 0) { return num; } p += num; len -= num; prev_num = COAP_MSG_OPTION_NUM(op); - op = COAP_MSG_OP_NEXT(op); + op = COAP_MSG_OP_NEXT(op); } IOT_FUNC_EXIT_RC(p - buf) @@ -249,16 +221,15 @@ static ssize_t _coap_message_serialize_options(CoAPMessage *message, char *buf, * @retval >0 Length of the formatted message * @retval <0 Error */ -static ssize_t _coap_message_serialize_payload(CoAPMessage *message, char *buf, size_t len) { +static ssize_t _coap_message_serialize_payload(CoAPMessage *message, char *buf, size_t len) +{ IOT_FUNC_ENTRY; - if (message->pay_load_len == 0) - { + if (message->pay_load_len == 0) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) } - if (message->pay_load_len + 1 > len) - { + if (message->pay_load_len + 1 > len) { return -ENOSPC; } @@ -276,11 +247,10 @@ ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len) POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); ssize_t num = 0; - char *p = buf; + char * p = buf; num = _coap_message_serialize_header(message, p, len); - if (num < 0) - { + if (num < 0) { Log_e("coap_message_serialize_header fail num=%lu", num); goto error; } @@ -288,8 +258,7 @@ ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len) p += num; len -= num; num = _coap_message_serialize_token(message, p, len); - if (num < 0) - { + if (num < 0) { Log_e("coap_message_serialize_token fail num=%lu", num); goto error; } @@ -297,8 +266,7 @@ ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len) p += num; len -= num; num = _coap_message_serialize_options(message, p, len); - if (num < 0) - { + if (num < 0) { Log_e("coap_message_serialize_options fail num=%lu", num); goto error; } @@ -306,8 +274,7 @@ ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len) p += num; len -= num; num = _coap_message_serialize_payload(message, p, len); - if (num < 0) - { + if (num < 0) { Log_e("coap_message_serialize_payload fail num=%lu", num); goto error; } @@ -317,11 +284,9 @@ ssize_t serialize_coap_message(CoAPMessage *message, char *buf, size_t len) IOT_FUNC_EXIT_RC(p - buf) error: - IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_INTERNAL) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_COAP_INTERNAL) } #ifdef __cplusplus } #endif - - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/http/utils_httpc.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c similarity index 78% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/http/utils_httpc.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c index d3f7ce61..02b687db 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/http/utils_httpc.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/http/utils_httpc.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,42 +17,38 @@ extern "C" { #endif +#include "utils_httpc.h" - -#include #include #include -#include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" -#include "qcloud_iot_common.h" - #include "qcloud_iot_ca.h" -#include "utils_httpc.h" +#include "qcloud_iot_common.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" #include "utils_timer.h" -#define HTTP_CLIENT_MIN(x,y) (((x)<(y))?(x):(y)) -#define HTTP_CLIENT_MAX(x,y) (((x)>(y))?(x):(y)) +#define HTTP_CLIENT_MIN(x, y) (((x) < (y)) ? (x) : (y)) +#define HTTP_CLIENT_MAX(x, y) (((x) > (y)) ? (x) : (y)) -#define HTTP_CLIENT_AUTHB_SIZE 128 +#define HTTP_CLIENT_AUTHB_SIZE 128 -#define HTTP_CLIENT_CHUNK_SIZE 1024 -#define HTTP_CLIENT_SEND_BUF_SIZE 1024 +#define HTTP_CLIENT_CHUNK_SIZE 1024 +#define HTTP_CLIENT_SEND_BUF_SIZE 1024 + +#define HTTP_CLIENT_MAX_HOST_LEN 64 +#define HTTP_CLIENT_MAX_URL_LEN 1024 + +#define HTTP_RETRIEVE_MORE_DATA (1) -#define HTTP_CLIENT_MAX_HOST_LEN 64 -#define HTTP_CLIENT_MAX_URL_LEN 1024 - -#define HTTP_RETRIEVE_MORE_DATA (1) - #if defined(MBEDTLS_DEBUG_C) - #define DEBUG_LEVEL 2 +#define DEBUG_LEVEL 2 #endif - static void _http_client_base64enc(char *out, const char *in) { const char code[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - int i = 0, x = 0, l = 0; + int i = 0, x = 0, l = 0; for (; *in; in++) { x = x << 8 | *in; @@ -70,14 +66,14 @@ static void _http_client_base64enc(char *out, const char *in) out[i] = '\0'; } -static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_scheme_len, char *host, uint32_t maxhost_len, - int *port, char *path, uint32_t max_path_len) +static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_scheme_len, char *host, + uint32_t maxhost_len, int *port, char *path, uint32_t max_path_len) { - char *scheme_ptr = (char *) url; - char *host_ptr = (char *) strstr(url, "://"); - uint32_t host_len = 0; + char * scheme_ptr = (char *)url; + char * host_ptr = (char *)strstr(url, "://"); + uint32_t host_len = 0; uint32_t path_len; - + char *path_ptr; char *fragment_ptr; @@ -103,38 +99,38 @@ static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_sc host_len = path_ptr - host_ptr; memcpy(host, host_ptr, host_len); host[host_len] = '\0'; - + memcpy(path, "/", 1); path[1] = '\0'; return QCLOUD_RET_SUCCESS; } - + if (host_len == 0) { host_len = path_ptr - host_ptr; } - + if (maxhost_len < host_len + 1) { Log_e("Host str is too long (host_len(%d) >= max_len(%d))", host_len + 1, maxhost_len); return QCLOUD_ERR_HTTP_PARSE; } memcpy(host, host_ptr, host_len); host[host_len] = '\0'; - + fragment_ptr = strchr(host_ptr, '#'); if (fragment_ptr != NULL) { path_len = fragment_ptr - path_ptr; } else { path_len = strlen(path_ptr); } - + if (max_path_len < path_len + 1) { Log_e("Path str is too small (%d >= %d)", max_path_len, path_len + 1); return QCLOUD_ERR_HTTP_PARSE; } - + memcpy(path, path_ptr, path_len); - + path[path_len] = '\0'; return QCLOUD_RET_SUCCESS; @@ -142,18 +138,18 @@ static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_sc static int _http_client_parse_host(const char *url, char *host, uint32_t host_max_len) { - const char *host_ptr = (const char *) strstr(url, "://"); - uint32_t host_len = 0; - char *path_ptr; + const char *host_ptr = (const char *)strstr(url, "://"); + uint32_t host_len = 0; + char * path_ptr; if (host_ptr == NULL) { Log_e("Could not find host"); return QCLOUD_ERR_HTTP_PARSE; } host_ptr += 3; - + uint32_t pro_len = 0; - pro_len = host_ptr - url; + pro_len = host_ptr - url; path_ptr = strchr(host_ptr, '/'); if (path_ptr != NULL) @@ -171,7 +167,6 @@ static int _http_client_parse_host(const char *url, char *host, uint32_t host_ma return QCLOUD_RET_SUCCESS; } - static int _http_client_get_info(HTTPClient *client, unsigned char *send_buf, int *send_idx, char *buf, uint32_t len) { int rc = QCLOUD_RET_SUCCESS; @@ -195,7 +190,8 @@ static int _http_client_get_info(HTTPClient *client, unsigned char *send_buf, in if (idx == HTTP_CLIENT_SEND_BUF_SIZE) { size_t byte_written_len = 0; - rc = client->network_stack.write(&(client->network_stack), send_buf, HTTP_CLIENT_SEND_BUF_SIZE, 5000, &byte_written_len); + rc = client->network_stack.write(&(client->network_stack), send_buf, HTTP_CLIENT_SEND_BUF_SIZE, 5000, + &byte_written_len); if (byte_written_len) { return (byte_written_len); } @@ -216,76 +212,77 @@ static int _http_client_send_auth(HTTPClient *client, unsigned char *send_buf, i _http_client_base64enc(b_auth, base64buff); b_auth[strlen(b_auth) + 1] = '\0'; - b_auth[strlen(b_auth)] = '\n'; + b_auth[strlen(b_auth)] = '\n'; _http_client_get_info(client, send_buf, send_idx, b_auth, 0); return QCLOUD_RET_SUCCESS; } - static int _http_client_send_header(HTTPClient *client, const char *url, HttpMethod method, HTTPClientData *client_data) { - char scheme[8] = { 0 }; - char host[HTTP_CLIENT_MAX_HOST_LEN] = { 0 }; - char path[HTTP_CLIENT_MAX_URL_LEN] = { 0 }; - int len; - unsigned char send_buf[HTTP_CLIENT_SEND_BUF_SIZE] = { 0 }; - char buf[HTTP_CLIENT_SEND_BUF_SIZE] = { 0 }; - char *meth = (method == HTTP_GET) ? "GET" : (method == HTTP_POST) ? "POST" : - (method == HTTP_PUT) ? "PUT" : (method == HTTP_DELETE) ? "DELETE" : - (method == HTTP_HEAD) ? "HEAD" : ""; + char scheme[8] = {0}; + char host[HTTP_CLIENT_MAX_HOST_LEN] = {0}; + char path[HTTP_CLIENT_MAX_URL_LEN] = {0}; + int len; + unsigned char send_buf[HTTP_CLIENT_SEND_BUF_SIZE] = {0}; + char buf[HTTP_CLIENT_SEND_BUF_SIZE] = {0}; + char * meth = (method == HTTP_GET) + ? "GET" + : (method == HTTP_POST) + ? "POST" + : (method == HTTP_PUT) + ? "PUT" + : (method == HTTP_DELETE) ? "DELETE" : (method == HTTP_HEAD) ? "HEAD" : ""; int rc; int port; - + int res = _http_client_parse_url(url, scheme, sizeof(scheme), host, sizeof(host), &port, path, sizeof(path)); if (res != QCLOUD_RET_SUCCESS) { Log_e("httpclient_parse_url returned %d", res); return res; } - + if (strcmp(scheme, "http") == 0) { - } else if (strcmp(scheme, "https") == 0) { - } - + memset(send_buf, 0, HTTP_CLIENT_SEND_BUF_SIZE); len = 0; - + HAL_Snprintf(buf, sizeof(buf), "%s %s HTTP/1.1\r\nHost: %s\r\n", meth, path, host); rc = _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); if (rc) { Log_e("Could not write request"); return QCLOUD_ERR_HTTP_CONN; } - + if (client->auth_user) { _http_client_send_auth(client, send_buf, &len); } - + if (client->header) { - _http_client_get_info(client, send_buf, &len, (char *) client->header, strlen(client->header)); + _http_client_get_info(client, send_buf, &len, (char *)client->header, strlen(client->header)); } - + if (client_data->post_buf != NULL) { HAL_Snprintf(buf, sizeof(buf), "Content-Length: %d\r\n", client_data->post_buf_len); _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); - + if (client_data->post_content_type != NULL) { HAL_Snprintf(buf, sizeof(buf), "Content-Type: %s\r\n", client_data->post_content_type); _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); } } - + _http_client_get_info(client, send_buf, &len, "\r\n", 0); - - //Log_d("REQUEST:\n%s", send_buf); + + // Log_d("REQUEST:\n%s", send_buf); size_t written_len = 0; - rc = client->network_stack.write(&client->network_stack, send_buf, len, 5000, &written_len); + rc = client->network_stack.write(&client->network_stack, send_buf, len, 5000, &written_len); if (written_len > 0) { - //Log_d("Written %lu bytes", written_len); + // Log_d("Written %lu bytes", written_len); } else if (written_len == 0) { Log_e("written_len == 0,Connection was closed by server"); return QCLOUD_ERR_HTTP_CLOSED; /* Connection was closed by server */ @@ -293,20 +290,20 @@ static int _http_client_send_header(HTTPClient *client, const char *url, HttpMet Log_e("Connection error (send returned %d)", rc); return QCLOUD_ERR_HTTP_CONN; } - + return QCLOUD_RET_SUCCESS; } - static int _http_client_send_userdata(HTTPClient *client, HTTPClientData *client_data) -{ +{ if (client_data->post_buf && client_data->post_buf_len) { - //Log_d("client_data->post_buf: %s", client_data->post_buf); + // Log_d("client_data->post_buf: %s", client_data->post_buf); { size_t written_len = 0; - int rc = client->network_stack.write(&client->network_stack, (unsigned char *)client_data->post_buf, client_data->post_buf_len, 5000, &written_len); + int rc = client->network_stack.write(&client->network_stack, (unsigned char *)client_data->post_buf, + client_data->post_buf_len, 5000, &written_len); if (written_len > 0) { - //Log_d("Written %d bytes", written_len); + // Log_d("Written %d bytes", written_len); } else if (written_len == 0) { Log_e("written_len == 0,Connection was closed by server"); return QCLOUD_ERR_HTTP_CLOSED; @@ -316,63 +313,63 @@ static int _http_client_send_userdata(HTTPClient *client, HTTPClientData *client } } } - + return QCLOUD_RET_SUCCESS; } - -static int _http_client_recv(HTTPClient *client, char *buf, int min_len, int max_len, int *p_read_len, uint32_t timeout_ms, HTTPClientData *client_data) +static int _http_client_recv(HTTPClient *client, char *buf, int min_len, int max_len, int *p_read_len, + uint32_t timeout_ms, HTTPClientData *client_data) { IOT_FUNC_ENTRY; - int rc = 0; - Timer timer; - + int rc = 0; + Timer timer; + size_t recv_size = 0; + InitTimer(&timer); countdown_ms(&timer, (unsigned int)timeout_ms); - + *p_read_len = 0; - rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), (size_t *)p_read_len); - + rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), + &recv_size); + *p_read_len = (int)recv_size; if (rc == QCLOUD_ERR_SSL_NOTHING_TO_READ || rc == QCLOUD_ERR_TCP_NOTHING_TO_READ) { Log_d("HTTP read nothing and timeout"); rc = QCLOUD_RET_SUCCESS; - } - else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_TCP_READ_TIMEOUT) { + } else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_TCP_READ_TIMEOUT) { if (*p_read_len == client_data->retrieve_len || client_data->retrieve_len == 0) rc = QCLOUD_RET_SUCCESS; else Log_e("network_stack read timeout"); - } - else if (rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN && *p_read_len > 0) { + } else if (rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN && *p_read_len > 0) { /* HTTP server give response and close this connection */ client->network_stack.disconnect(&client->network_stack); rc = QCLOUD_RET_SUCCESS; - } - else if (rc != QCLOUD_RET_SUCCESS) { + } else if (rc != QCLOUD_RET_SUCCESS) { Log_e("Connection error rc = %d (recv returned %d)", rc, *p_read_len); IOT_FUNC_EXIT_RC(rc); } - + + // IOT_FUNC_EXIT_RC(rc); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - + static int _http_client_retrieve_content(HTTPClient *client, char *data, int len, uint32_t timeout_ms, HTTPClientData *client_data) { IOT_FUNC_ENTRY; - int count = 0; - int templen = 0; - int crlf_pos; + int count = 0; + int templen = 0; + int crlf_pos; Timer timer; - + InitTimer(&timer); countdown_ms(&timer, (unsigned int)timeout_ms); - + client_data->is_more = IOT_TRUE; - + if (client_data->response_content_len == -1 && client_data->is_chunked == IOT_FALSE) { while (1) { int rc, max_len; @@ -385,13 +382,13 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->response_buf[client_data->response_buf_len - 1] = '\0'; return HTTP_RETRIEVE_MORE_DATA; } - + max_len = HTTP_CLIENT_MIN(HTTP_CLIENT_CHUNK_SIZE - 1, client_data->response_buf_len - 1 - count); - rc = _http_client_recv(client, data, 1, max_len, &len, (uint32_t)left_ms(&timer), client_data); - + rc = _http_client_recv(client, data, 1, max_len, &len, (uint32_t)left_ms(&timer), client_data); + /* Receive data */ - //Log_d("data len: %d %d", len, count); - + // Log_d("data len: %d %d", len, count); + if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } @@ -399,7 +396,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len Log_e("HTTP read timeout!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_TIMEOUT); } - + if (len == 0) { /* read no more data */ Log_d("no more data, len == 0"); @@ -408,16 +405,16 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } } } - + while (1) { uint32_t readLen = 0; if (client_data->is_chunked && client_data->retrieve_len <= 0) { /* Read chunk header */ bool foundCrlf; - int n; + int n; do { foundCrlf = IOT_FALSE; - crlf_pos = 0; + crlf_pos = 0; data[len] = 0; if (len >= 2) { for (; crlf_pos < len - 2; crlf_pos++) { @@ -431,13 +428,8 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len /* Try to read more */ if (len < HTTP_CLIENT_CHUNK_SIZE) { int new_trf_len, rc; - rc = _http_client_recv(client, - data + len, - 0, - HTTP_CLIENT_CHUNK_SIZE - len - 1, - &new_trf_len, - left_ms(&timer), - client_data); + rc = _http_client_recv(client, data + len, 0, HTTP_CLIENT_CHUNK_SIZE - len - 1, &new_trf_len, + left_ms(&timer), client_data); len += new_trf_len; if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); @@ -452,8 +444,8 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len data[crlf_pos] = '\0'; // n = sscanf(data, "%x", &readLen);/* chunk length */ - readLen = strtoul(data, NULL, 16); - n = (0 == readLen) ? 0 : 1; + readLen = strtoul(data, NULL, 16); + n = (0 == readLen) ? 0 : 1; client_data->retrieve_len = readLen; client_data->response_content_len += client_data->retrieve_len; if (readLen == 0) { @@ -465,14 +457,14 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len Log_e("Could not read chunk length"); return QCLOUD_ERR_HTTP_UNRESOLVED_DNS; } - + memmove(data, &data[crlf_pos + 2], len - (crlf_pos + 2)); len -= (crlf_pos + 2); - + } else { readLen = client_data->retrieve_len; } - + do { templen = HTTP_CLIENT_MIN(len, readLen); if (count + templen < client_data->response_buf_len - 1) { @@ -486,22 +478,22 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->retrieve_len -= (client_data->response_buf_len - 1 - count); IOT_FUNC_EXIT_RC(HTTP_RETRIEVE_MORE_DATA); } - + if (len > readLen) { Log_d("memmove %d %d %d\n", readLen, len, client_data->retrieve_len); memmove(data, &data[readLen], len - readLen); /* chunk case, read between two chunks */ len -= readLen; - readLen = 0; + readLen = 0; client_data->retrieve_len = 0; } else { readLen -= len; } - + if (readLen) { int rc; int max_len = HTTP_CLIENT_MIN(HTTP_CLIENT_CHUNK_SIZE - 1, client_data->response_buf_len - 1 - count); - max_len = HTTP_CLIENT_MIN(max_len, readLen); - rc = _http_client_recv(client, data, 1, max_len, &len, left_ms(&timer), client_data); + max_len = HTTP_CLIENT_MIN(max_len, readLen); + rc = _http_client_recv(client, data, 1, max_len, &len, left_ms(&timer), client_data); if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } @@ -511,19 +503,19 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } } } while (readLen); - + if (client_data->is_chunked) { if (len < 2) { int new_trf_len, rc; /* Read missing chars to find end of chunk */ rc = _http_client_recv(client, data + len, 2 - len, HTTP_CLIENT_CHUNK_SIZE - len - 1, &new_trf_len, - left_ms(&timer), client_data); - if ((rc != QCLOUD_RET_SUCCESS )|| (0 == left_ms(&timer))) { + left_ms(&timer), client_data); + if ((rc != QCLOUD_RET_SUCCESS) || (0 == left_ms(&timer))) { IOT_FUNC_EXIT_RC(rc); } len += new_trf_len; } - + if ((data[0] != '\r') || (data[1] != '\n')) { Log_e("Format error, %s", data); /* after memmove, the beginning of next chunk */ IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_UNRESOLVED_DNS); @@ -531,40 +523,38 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len memmove(data, &data[2], len - 2); /* remove the \r\n */ len -= 2; } else { - //Log_d("no more (content-length)"); + // Log_d("no more (content-length)"); client_data->is_more = IOT_FALSE; break; } - } - + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - -static int _http_client_response_parse(HTTPClient *client, char *data, int len, uint32_t timeout_ms, +static int _http_client_response_parse(HTTPClient *client, char *data, int len, uint32_t timeout_ms, HTTPClientData *client_data) { IOT_FUNC_ENTRY; - - int crlf_pos; + + int crlf_pos; Timer timer; char *tmp_ptr, *ptr_body_end; - + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - + client_data->response_content_len = -1; - + char *crlf_ptr = strstr(data, "\r\n"); if (crlf_ptr == NULL) { Log_e("\\r\\n not found"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_UNRESOLVED_DNS); } - - crlf_pos = crlf_ptr - data; + + crlf_pos = crlf_ptr - data; data[crlf_pos] = '\0'; - + #if 0 if (sscanf(data, "HTTP/%*d.%*d %d %*[^\r\n]", &(client->response_code)) != 1) { Log_e("Not a correct HTTP answer : %s\n", data); @@ -573,28 +563,29 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, #endif client->response_code = atoi(data + 9); - + if ((client->response_code < 200) || (client->response_code >= 400)) { Log_w("Response code %d", client->response_code); - + if (client->response_code == 403) IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_AUTH); - + if (client->response_code == 404) IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_NOT_FOUND); } - //Log_d("Reading headers : %s", data); - + // Log_d("Reading headers : %s", data); + // remove null character memmove(data, &data[crlf_pos + 2], len - (crlf_pos + 2) + 1); len -= (crlf_pos + 2); - + client_data->is_chunked = IOT_FALSE; if (NULL == (ptr_body_end = strstr(data, "\r\n\r\n"))) { int new_trf_len, rc; - rc = _http_client_recv(client, data + len, 1, HTTP_CLIENT_CHUNK_SIZE - len - 1, &new_trf_len, left_ms(&timer), client_data); + rc = _http_client_recv(client, data + len, 1, HTTP_CLIENT_CHUNK_SIZE - len - 1, &new_trf_len, left_ms(&timer), + client_data); if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } @@ -608,22 +599,21 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, if (NULL != (tmp_ptr = strstr(data, "Content-Length"))) { client_data->response_content_len = atoi(tmp_ptr + strlen("Content-Length: ")); - client_data->retrieve_len = client_data->response_content_len; + client_data->retrieve_len = client_data->response_content_len; } else if (NULL != (tmp_ptr = strstr(data, "Transfer-Encoding"))) { - int len_chunk = strlen("Chunked"); + int len_chunk = strlen("Chunked"); char *chunk_value = data + strlen("Transfer-Encoding: "); - if ((! memcmp(chunk_value, "Chunked", len_chunk)) - || (! memcmp(chunk_value, "chunked", len_chunk))) { - client_data->is_chunked = IOT_TRUE; + if ((!memcmp(chunk_value, "Chunked", len_chunk)) || (!memcmp(chunk_value, "chunked", len_chunk))) { + client_data->is_chunked = IOT_TRUE; client_data->response_content_len = 0; - client_data->retrieve_len = 0; + client_data->retrieve_len = 0; } } else { Log_e("Could not parse header"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP); } - + len = len - (ptr_body_end + 4 - data); memmove(data, ptr_body_end + 4, len + 1); int rc = _http_client_retrieve_content(client, data, len, left_ms(&timer), client_data); @@ -632,15 +622,16 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, static int _http_client_connect(HTTPClient *client) { - if (QCLOUD_RET_SUCCESS != client->network_stack.connect(&client->network_stack)) { + if (QCLOUD_RET_SUCCESS != client->network_stack.connect(&client->network_stack)) { return QCLOUD_ERR_HTTP_CONN; } return QCLOUD_RET_SUCCESS; } -static int _http_client_send_request(HTTPClient *client, const char *url, HttpMethod method, HTTPClientData *client_data) -{ +static int _http_client_send_request(HTTPClient *client, const char *url, HttpMethod method, + HTTPClientData *client_data) +{ int rc; rc = _http_client_send_header(client, url, method, client_data); @@ -655,46 +646,45 @@ static int _http_client_send_request(HTTPClient *client, const char *url, HttpMe return rc; } - static int _http_client_recv_response(HTTPClient *client, uint32_t timeout_ms, HTTPClientData *client_data) { IOT_FUNC_ENTRY; - int reclen = 0, rc = QCLOUD_ERR_HTTP_CONN; - char buf[HTTP_CLIENT_CHUNK_SIZE] = { 0 }; + int reclen = 0, rc = QCLOUD_ERR_HTTP_CONN; + char buf[HTTP_CLIENT_CHUNK_SIZE] = {0}; Timer timer; - + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - + if (0 == client->network_stack.handle) { Log_e("Connection has not been established"); IOT_FUNC_EXIT_RC(rc); } - + if (client_data->is_more) { client_data->response_buf[0] = '\0'; - rc = _http_client_retrieve_content(client, buf, reclen, left_ms(&timer), client_data); + rc = _http_client_retrieve_content(client, buf, reclen, left_ms(&timer), client_data); } else { client_data->is_more = IOT_TRUE; - rc = _http_client_recv(client, buf, 1, HTTP_CLIENT_CHUNK_SIZE - 1, &reclen, left_ms(&timer), client_data); - + rc = _http_client_recv(client, buf, 1, HTTP_CLIENT_CHUNK_SIZE - 1, &reclen, left_ms(&timer), client_data); + if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } - //else if(0 == left_ms(&timer)){ + // else if(0 == left_ms(&timer)){ // IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_TIMEOUT); //} - + buf[reclen] = '\0'; - + if (reclen) { - //HAL_Printf("RESPONSE:\n%s", buf); + // HAL_Printf("RESPONSE:\n%s", buf); rc = _http_client_response_parse(client, buf, reclen, left_ms(&timer), client_data); } } - + IOT_FUNC_EXIT_RC(rc); } @@ -707,17 +697,17 @@ static int _http_network_init(Network *pNetwork, const char *host, int port, con pNetwork->type = NETWORK_TCP; #ifndef AUTH_WITH_NOTLS if (ca_crt_dir != NULL) { - pNetwork->ssl_connect_params.ca_crt = ca_crt_dir; + pNetwork->ssl_connect_params.ca_crt = ca_crt_dir; pNetwork->ssl_connect_params.ca_crt_len = strlen(pNetwork->ssl_connect_params.ca_crt); pNetwork->ssl_connect_params.timeout_ms = 10000; - pNetwork->type = NETWORK_TLS; + pNetwork->type = NETWORK_TLS; } #endif pNetwork->host = host; pNetwork->port = port; rc = network_init(pNetwork); - + return rc; } @@ -728,10 +718,11 @@ int qcloud_http_client_connect(HTTPClient *client, const char *url, int port, co return QCLOUD_ERR_HTTP_CONN; } - int rc; + int rc; char host[HTTP_CLIENT_MAX_HOST_LEN] = {0}; - rc = _http_client_parse_host(url, host, sizeof(host)); - if (rc != QCLOUD_RET_SUCCESS) return rc; + rc = _http_client_parse_host(url, host, sizeof(host)); + if (rc != QCLOUD_RET_SUCCESS) + return rc; rc = _http_network_init(&client->network_stack, host, port, ca_crt); if (rc != QCLOUD_RET_SUCCESS) @@ -758,14 +749,16 @@ void qcloud_http_client_close(HTTPClient *client) } } -int qcloud_http_client_common(HTTPClient *client, const char *url, int port, const char *ca_crt, HttpMethod method, HTTPClientData *client_data) +int qcloud_http_client_common(HTTPClient *client, const char *url, int port, const char *ca_crt, HttpMethod method, + HTTPClientData *client_data) { int rc; if (client->network_stack.handle == 0) { rc = qcloud_http_client_connect(client, url, port, ca_crt); - if (rc != QCLOUD_RET_SUCCESS) return rc; - } + if (rc != QCLOUD_RET_SUCCESS) + return rc; + } rc = _http_client_send_request(client, url, method, client_data); if (rc != QCLOUD_RET_SUCCESS) { @@ -773,7 +766,7 @@ int qcloud_http_client_common(HTTPClient *client, const char *url, int port, con qcloud_http_client_close(client); return rc; } - + return QCLOUD_RET_SUCCESS; } @@ -781,14 +774,13 @@ int qcloud_http_recv_data(HTTPClient *client, uint32_t timeout_ms, HTTPClientDat { IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; + int rc = QCLOUD_RET_SUCCESS; Timer timer; InitTimer(&timer); - countdown_ms(&timer, (unsigned int) timeout_ms); - - if ((NULL != client_data->response_buf) - && (0 != client_data->response_buf_len)) { + countdown_ms(&timer, (unsigned int)timeout_ms); + + if ((NULL != client_data->response_buf) && (0 != client_data->response_buf_len)) { rc = _http_client_recv_response(client, left_ms(&timer), client_data); if (rc < 0) { Log_e("http_client_recv_response is error,rc = %d", rc); @@ -799,8 +791,6 @@ int qcloud_http_recv_data(HTTPClient *client, uint32_t timeout_ms, HTTPClientDat IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - - #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c new file mode 100644 index 00000000..d9c9b6e0 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client.c @@ -0,0 +1,583 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lite-utils.h" +#include "log_upload.h" +#include "mqtt_client.h" +#include "qcloud_iot_ca.h" +#include "qcloud_iot_common.h" +#include "qcloud_iot_device.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_base64.h" +#include "utils_list.h" + +static uint16_t _get_random_start_packet_id(void) +{ + srand((unsigned)HAL_GetTimeMs()); + return rand() % 65536 + 1; +} + +DeviceInfo *IOT_MQTT_GetDeviceInfo(void *pClient) +{ + POINTER_SANITY_CHECK(pClient, NULL); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + return &mqtt_client->device_info; +} + +// currently return a constant value +int IOT_MQTT_GetErrCode(void) +{ + return QCLOUD_ERR_FAILURE; +} + +void *IOT_MQTT_Construct(MQTTInitParams *pParams) +{ + POINTER_SANITY_CHECK(pParams, NULL); + STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); + STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); + + Qcloud_IoT_Client *mqtt_client = NULL; + + // create and init MQTTClient + if ((mqtt_client = (Qcloud_IoT_Client *)HAL_Malloc(sizeof(Qcloud_IoT_Client))) == NULL) { + Log_e("malloc MQTTClient failed"); + return NULL; + } + + int rc = qcloud_iot_mqtt_init(mqtt_client, pParams); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("mqtt init failed: %d", rc); + HAL_Free(mqtt_client); + return NULL; + } + + MQTTConnectParams connect_params = DEFAULT_MQTTCONNECT_PARAMS; + connect_params.client_id = mqtt_client->device_info.client_id; + // Upper limit of keep alive interval is (11.5 * 60) seconds + connect_params.keep_alive_interval = Min(pParams->keep_alive_interval_ms / 1000, 690); + connect_params.clean_session = pParams->clean_session; + connect_params.auto_connect_enable = pParams->auto_connect_enable; +#if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) + if (pParams->device_secret == NULL) { + Log_e("Device secret is null!"); + qcloud_iot_mqtt_fini(mqtt_client); + HAL_Free(mqtt_client); + return NULL; + } + size_t src_len = strlen(pParams->device_secret); + size_t len; + memset(mqtt_client->psk_decode, 0x00, DECODE_PSK_LENGTH); + rc = qcloud_iot_utils_base64decode(mqtt_client->psk_decode, DECODE_PSK_LENGTH, &len, + (unsigned char *)pParams->device_secret, src_len); + connect_params.device_secret = (char *)mqtt_client->psk_decode; + connect_params.device_secret_len = len; + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Device secret decode err, secret:%s", pParams->device_secret); + qcloud_iot_mqtt_fini(mqtt_client); + HAL_Free(mqtt_client); + return NULL; + } +#endif + + rc = qcloud_iot_mqtt_connect(mqtt_client, &connect_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("mqtt connect with id: %s failed: %d", mqtt_client->options.conn_id, rc); + qcloud_iot_mqtt_fini(mqtt_client); + HAL_Free(mqtt_client); + return NULL; + } else { + Log_i("mqtt connect with id: %s success", mqtt_client->options.conn_id); + } + +#ifdef LOG_UPLOAD + // log subscribe topics + if (is_log_uploader_init()) { + int log_level; + rc = qcloud_get_log_level(mqtt_client, &log_level); + // rc = qcloud_log_topic_subscribe(mqtt_client); + if (rc < 0) { + Log_e("client get log topic failed: %d", rc); + } + set_log_mqtt_client((void *)mqtt_client); + + IOT_Log_Upload(true); + } +#endif + return mqtt_client; +} + +int IOT_MQTT_Destroy(void **pClient) +{ + POINTER_SANITY_CHECK(*pClient, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)(*pClient); + + int rc = qcloud_iot_mqtt_disconnect(mqtt_client); + // disconnect network stack by force + if (rc != QCLOUD_RET_SUCCESS) { + mqtt_client->network_stack.disconnect(&(mqtt_client->network_stack)); + set_client_conn_state(mqtt_client, NOTCONNECTED); + } + + int i = 0; + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { + /* notify this event to topic subscriber */ + if (NULL != mqtt_client->sub_handles[i].topic_filter && NULL != mqtt_client->sub_handles[i].sub_event_handler) + mqtt_client->sub_handles[i].sub_event_handler(mqtt_client, MQTT_EVENT_CLIENT_DESTROY, + mqtt_client->sub_handles[i].handler_user_data); + + if (NULL != mqtt_client->sub_handles[i].topic_filter) { + HAL_Free((void *)mqtt_client->sub_handles[i].topic_filter); + mqtt_client->sub_handles[i].topic_filter = NULL; + } + } + +#ifdef MQTT_RMDUP_MSG_ENABLED + reset_repeat_packet_id_buffer(mqtt_client); +#endif + + HAL_MutexDestroy(mqtt_client->lock_generic); + HAL_MutexDestroy(mqtt_client->lock_write_buf); + + HAL_MutexDestroy(mqtt_client->lock_list_sub); + HAL_MutexDestroy(mqtt_client->lock_list_pub); + + list_destroy(mqtt_client->list_pub_wait_ack); + list_destroy(mqtt_client->list_sub_wait_ack); + + HAL_Free(*pClient); + *pClient = NULL; +#ifdef LOG_UPLOAD + set_log_mqtt_client(NULL); +#endif + Log_i("mqtt release!"); + + return rc; +} + +int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) +{ + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + +#ifdef MULTITHREAD_ENABLED + /* only one instance of yield is allowed in running state*/ + if (mqtt_client->thread_running) { + HAL_SleepMs(timeout_ms); + return QCLOUD_RET_SUCCESS; + } +#endif + + int rc = qcloud_iot_mqtt_yield(mqtt_client, timeout_ms); + +#ifdef LOG_UPLOAD + /* do instant log uploading if MQTT communication error */ + if (rc == QCLOUD_RET_SUCCESS) + IOT_Log_Upload(false); + else + IOT_Log_Upload(true); +#endif + + return rc; +} + +int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams) +{ + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + + return qcloud_iot_mqtt_publish(mqtt_client, topicName, pParams); +} + +int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParams) +{ + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + + return qcloud_iot_mqtt_subscribe(mqtt_client, topicFilter, pParams); +} + +int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter) +{ + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + + return qcloud_iot_mqtt_unsubscribe(mqtt_client, topicFilter); +} + +bool IOT_MQTT_IsSubReady(void *pClient, char *topicFilter) +{ + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + + return qcloud_iot_mqtt_is_sub_ready(mqtt_client, topicFilter); +} + +bool IOT_MQTT_IsConnected(void *pClient) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + + IOT_FUNC_EXIT_RC(get_client_conn_state(mqtt_client) == 1) +} + +#ifdef MULTITHREAD_ENABLED + +static void _mqtt_yield_thread(void *ptr) +{ + int rc = QCLOUD_RET_SUCCESS; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)ptr; + + Log_i("MQTT client %s start loop", mqtt_client->device_info.client_id); + while (mqtt_client->thread_running) { + int rc = qcloud_iot_mqtt_yield(mqtt_client, 500); + +#ifdef LOG_UPLOAD + /* do instant log uploading if MQTT communication error */ + if (rc == QCLOUD_RET_SUCCESS) + IOT_Log_Upload(false); + else + IOT_Log_Upload(true); +#endif + + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(500); + continue; + } else if (rc == QCLOUD_RET_MQTT_MANUALLY_DISCONNECTED || rc == QCLOUD_ERR_MQTT_RECONNECT_TIMEOUT) { + Log_e("MQTT Yield thread exit with error: %d", rc); + break; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("MQTT Yield thread error: %d", rc); + } + + HAL_SleepMs(200); + } + + mqtt_client->thread_running = false; + mqtt_client->thread_exit_code = rc; + +#ifdef LOG_UPLOAD + IOT_Log_Upload(true); +#endif + + Log_i("MQTT client %s stop loop", mqtt_client->device_info.client_id); +} + +int IOT_MQTT_StartLoop(void *pClient) +{ + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + ThreadParams thread_params = {0}; + thread_params.thread_func = _mqtt_yield_thread; + thread_params.thread_name = "MQTT_yield_thread"; + thread_params.user_arg = pClient; + thread_params.stack_size = 4096; + thread_params.priority = 1; + mqtt_client->thread_running = true; + + int rc = HAL_ThreadCreate(&thread_params); + if (rc) { + Log_e("create mqtt yield thread fail: %d", rc); + return QCLOUD_ERR_FAILURE; + } + + HAL_SleepMs(500); + return QCLOUD_RET_SUCCESS; +} + +void IOT_MQTT_StopLoop(void *pClient) +{ + POINTER_SANITY_CHECK_RTN(pClient); + + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + mqtt_client->thread_running = false; + HAL_SleepMs(1000); + return; +} + +bool IOT_MQTT_GetLoopStatus(void *pClient, int *exit_code) +{ + POINTER_SANITY_CHECK(pClient, false); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + *exit_code = mqtt_client->thread_exit_code; + return mqtt_client->thread_running; +} + +#endif + +#if 0 +static inline void _strlowr(char *str) +{ + while (*str != '\0') { + *str = tolower(*str); + str++; + } +} +#endif + +int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); + + memset(pClient, 0x0, sizeof(Qcloud_IoT_Client)); + + int rc = iot_device_info_set(&(pClient->device_info), pParams->product_id, pParams->device_name); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("failed to set device info: %d", rc); + return rc; + } + + int size = + HAL_Snprintf(pClient->host_addr, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_MQTT_DIRECT_DOMAIN); + if (size < 0 || size > HOST_STR_LENGTH - 1) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + // enable below code for some special platform + //_strlowr(s_qcloud_iot_host); + + int i = 0; + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { + pClient->sub_handles[i].topic_filter = NULL; + pClient->sub_handles[i].message_handler = NULL; + pClient->sub_handles[i].sub_event_handler = NULL; + pClient->sub_handles[i].qos = QOS0; + pClient->sub_handles[i].handler_user_data = NULL; + } + + if (pParams->command_timeout < MIN_COMMAND_TIMEOUT) + pParams->command_timeout = MIN_COMMAND_TIMEOUT; + if (pParams->command_timeout > MAX_COMMAND_TIMEOUT) + pParams->command_timeout = MAX_COMMAND_TIMEOUT; + pClient->command_timeout_ms = pParams->command_timeout; + + // packet id, random from [1 - 65536] + pClient->next_packet_id = _get_random_start_packet_id(); + pClient->write_buf_size = QCLOUD_IOT_MQTT_TX_BUF_LEN; + pClient->read_buf_size = QCLOUD_IOT_MQTT_RX_BUF_LEN; + pClient->is_ping_outstanding = 0; + pClient->was_manually_disconnected = 0; + pClient->counter_network_disconnected = 0; + + pClient->event_handle = pParams->event_handle; + + pClient->lock_generic = HAL_MutexCreate(); + if (NULL == pClient->lock_generic) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + set_client_conn_state(pClient, NOTCONNECTED); + + if ((pClient->lock_write_buf = HAL_MutexCreate()) == NULL) { + Log_e("create write buf lock failed."); + goto error; + } + if ((pClient->lock_list_sub = HAL_MutexCreate()) == NULL) { + Log_e("create sub list lock failed."); + goto error; + } + if ((pClient->lock_list_pub = HAL_MutexCreate()) == NULL) { + Log_e("create pub list lock failed."); + goto error; + } + + if ((pClient->list_pub_wait_ack = list_new()) == NULL) { + Log_e("create pub wait list failed."); + goto error; + } + pClient->list_pub_wait_ack->free = HAL_Free; + + if ((pClient->list_sub_wait_ack = list_new()) == NULL) { + Log_e("create sub wait list failed."); + goto error; + } + pClient->list_sub_wait_ack->free = HAL_Free; + +#ifndef AUTH_WITH_NOTLS + // device param for TLS connection +#ifdef AUTH_MODE_CERT + Log_d("cert file: %s", pParams->cert_file); + Log_d("key file: %s", pParams->key_file); + + strncpy(pClient->cert_file_path, pParams->cert_file, FILE_PATH_MAX_LEN - 1); + strncpy(pClient->key_file_path, pParams->key_file, FILE_PATH_MAX_LEN - 1); + + pClient->network_stack.ssl_connect_params.cert_file = pClient->cert_file_path; + pClient->network_stack.ssl_connect_params.key_file = pClient->key_file_path; + pClient->network_stack.ssl_connect_params.ca_crt = iot_ca_get(); + pClient->network_stack.ssl_connect_params.ca_crt_len = strlen(pClient->network_stack.ssl_connect_params.ca_crt); +#else + if (pParams->device_secret != NULL) { + size_t src_len = strlen(pParams->device_secret); + size_t len; + memset(pClient->psk_decode, 0x00, DECODE_PSK_LENGTH); + qcloud_iot_utils_base64decode(pClient->psk_decode, DECODE_PSK_LENGTH, &len, + (unsigned char *)pParams->device_secret, src_len); + pClient->network_stack.ssl_connect_params.psk = (char *)pClient->psk_decode; + pClient->network_stack.ssl_connect_params.psk_length = len; + } else { + Log_e("psk is empty!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + } + if (strnlen(pClient->device_info.client_id, MAX_SIZE_OF_CLIENT_ID) == 0) { + Log_e("psk id is empty!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + } + pClient->network_stack.ssl_connect_params.psk_id = pClient->device_info.client_id; + pClient->network_stack.ssl_connect_params.ca_crt = NULL; + pClient->network_stack.ssl_connect_params.ca_crt_len = 0; +#endif + + pClient->network_stack.host = pClient->host_addr; + pClient->network_stack.port = MQTT_SERVER_PORT_TLS; + pClient->network_stack.ssl_connect_params.timeout_ms = + pClient->command_timeout_ms > QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT ? pClient->command_timeout_ms + : QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT; + +#else + pClient->network_stack.host = pClient->host_addr; + pClient->network_stack.port = MQTT_SERVER_PORT_NOTLS; +#endif + + // init network stack + qcloud_iot_mqtt_network_init(&(pClient->network_stack)); + + // ping timer and reconnect delay timer + InitTimer(&(pClient->ping_timer)); + InitTimer(&(pClient->reconnect_delay_timer)); + +#ifdef SYSTEM_COMM + pClient->sys_state.result_recv_ok = false; + pClient->sys_state.topic_sub_ok = false; + pClient->sys_state.time = 0; +#endif + +#ifdef MULTITHREAD_ENABLED + pClient->thread_running = false; +#endif + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + +error: + if (pClient->list_pub_wait_ack) { + pClient->list_pub_wait_ack->free(pClient->list_pub_wait_ack); + pClient->list_pub_wait_ack = NULL; + } + if (pClient->list_sub_wait_ack) { + pClient->list_sub_wait_ack->free(pClient->list_sub_wait_ack); + pClient->list_sub_wait_ack = NULL; + } + if (pClient->lock_generic) { + HAL_MutexDestroy(pClient->lock_generic); + pClient->lock_generic = NULL; + } + if (pClient->lock_list_sub) { + HAL_MutexDestroy(pClient->lock_list_sub); + pClient->lock_list_sub = NULL; + } + if (pClient->lock_list_pub) { + HAL_MutexDestroy(pClient->lock_list_pub); + pClient->lock_list_pub = NULL; + } + if (pClient->lock_write_buf) { + HAL_MutexDestroy(pClient->lock_write_buf); + pClient->lock_write_buf = NULL; + } + + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) +} + +int qcloud_iot_mqtt_fini(Qcloud_IoT_Client *mqtt_client) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(mqtt_client, QCLOUD_ERR_INVAL); + + HAL_MutexDestroy(mqtt_client->lock_generic); + HAL_MutexDestroy(mqtt_client->lock_write_buf); + + HAL_MutexDestroy(mqtt_client->lock_list_sub); + HAL_MutexDestroy(mqtt_client->lock_list_pub); + + list_destroy(mqtt_client->list_pub_wait_ack); + list_destroy(mqtt_client->list_sub_wait_ack); + + Log_i("release mqtt client resources"); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + pClient->options.auto_connect_enable = (uint8_t)value; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + bool is_enabled = false; + if (pClient->options.auto_connect_enable == 1) { + is_enabled = true; + } + + IOT_FUNC_EXIT_RC(is_enabled); +} + +int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + IOT_FUNC_EXIT_RC(pClient->counter_network_disconnected); +} + +int qcloud_iot_mqtt_reset_network_disconnected_count(Qcloud_IoT_Client *pClient) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + + pClient->counter_network_disconnected = 0; + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c similarity index 71% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c index 64627f07..fed4bd3c 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_common.c @@ -23,11 +23,10 @@ extern "C" { #include #include "mqtt_client.h" - #include "utils_list.h" /* remain waiting time after MQTT header is received (unit: ms) */ -#define QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS (2000) +#define QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS (2000) #define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 @@ -59,37 +58,40 @@ static int _check_handle_is_identical(SubTopicHandle *sub_handle1, SubTopicHandl return 0; } -uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) { +uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); HAL_MutexLock(pClient->lock_generic); - pClient->next_packet_id = (uint16_t) ((MAX_PACKET_ID == pClient->next_packet_id) ? 1 : (pClient->next_packet_id + 1)); + pClient->next_packet_id = + (uint16_t)((MAX_PACKET_ID == pClient->next_packet_id) ? 1 : (pClient->next_packet_id + 1)); HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(pClient->next_packet_id); } -void get_next_conn_id(char *conn_id) { - int i; - srand((unsigned)HAL_GetTimeMs()); - for (i = 0; i < MAX_CONN_ID_LEN - 1; i++) { - int flag = rand() % 3; - switch(flag) { - case 0: - conn_id[i] = (rand() % 26) + 'a'; - break; - case 1: - conn_id[i] = (rand() % 26) + 'A'; - break; - case 2: - conn_id[i] = (rand() % 10) + '0'; - break; - } - } +void get_next_conn_id(char *conn_id) +{ + int i; + srand((unsigned)HAL_GetTimeMs()); + for (i = 0; i < MAX_CONN_ID_LEN - 1; i++) { + int flag = rand() % 3; + switch (flag) { + case 0: + conn_id[i] = (rand() % 26) + 'a'; + break; + case 1: + conn_id[i] = (rand() % 26) + 'A'; + break; + case 2: + conn_id[i] = (rand() % 10) + '0'; + break; + } + } - conn_id[MAX_CONN_ID_LEN - 1] = '\0'; + conn_id[MAX_CONN_ID_LEN - 1] = '\0'; } /** @@ -98,14 +100,15 @@ void get_next_conn_id(char *conn_id) { * @param length the length to be encoded * @return the number of bytes written to buffer */ -size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) { +size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) +{ IOT_FUNC_ENTRY; size_t outLen = 0; do { unsigned char encodeByte; - encodeByte = (unsigned char) (length % 128); + encodeByte = (unsigned char)(length % 128); length /= 128; /* if there are more digits to encode, set the top bit of this digit */ if (length > 0) { @@ -117,7 +120,8 @@ size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) { IOT_FUNC_EXIT_RC((int)outLen); } -size_t get_mqtt_packet_len(size_t rem_len) { +size_t get_mqtt_packet_len(size_t rem_len) +{ rem_len += 1; /* header byte */ /* now remaining_length field */ @@ -140,24 +144,20 @@ size_t get_mqtt_packet_len(size_t rem_len) { * @param value the decoded length returned * @return the number of bytes read from the socket */ -static int _decode_packet_rem_len_from_buf_read(uint32_t (*getcharfn)(unsigned char *, uint32_t), uint32_t *value, - uint32_t *readBytesLen) { +static int _decode_packet_rem_len_from_buf_read(unsigned char *bufptr, uint32_t *value, uint32_t *readBytesLen) +{ IOT_FUNC_ENTRY; unsigned char c; - uint32_t multiplier = 1; - uint32_t len = 0; - *value = 0; + uint32_t multiplier = 1; + uint32_t len = 0; + *value = 0; do { if (++len > MAX_NO_OF_REMAINING_LENGTH_BYTES) { /* bad data */ IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_PACKET_READ); } - uint32_t getLen = 0; - getLen = (*getcharfn)(&c, 1); - if (1 != getLen) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } + c = *bufptr++; *value += (c & 127) * multiplier; multiplier *= 128; } while ((c & 128) != 0); @@ -167,20 +167,9 @@ static int _decode_packet_rem_len_from_buf_read(uint32_t (*getcharfn)(unsigned c IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -static unsigned char *bufptr; -uint32_t bufchar(unsigned char *c, uint32_t count) { - uint32_t i; - - for (i = 0; i < count; ++i) { - *c = *bufptr++; - } - - return count; -} - -int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint32_t *readBytesLen) { - bufptr = buf; - return _decode_packet_rem_len_from_buf_read(bufchar, value, readBytesLen); +int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint32_t *readBytesLen) +{ + return _decode_packet_rem_len_from_buf_read(buf, value, readBytesLen); } /** @@ -188,11 +177,12 @@ int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint3 * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned * @return the value calculated */ -uint16_t mqtt_read_uint16_t(unsigned char **pptr) { - unsigned char *ptr = *pptr; - uint8_t firstByte = (uint8_t) (*ptr); - uint8_t secondByte = (uint8_t) (*(ptr + 1)); - uint16_t len = (uint16_t) (secondByte + (256 * firstByte)); +uint16_t mqtt_read_uint16_t(unsigned char **pptr) +{ + unsigned char *ptr = *pptr; + uint8_t firstByte = (uint8_t)(*ptr); + uint8_t secondByte = (uint8_t)(*(ptr + 1)); + uint16_t len = (uint16_t)(secondByte + (256 * firstByte)); *pptr += 2; return len; } @@ -202,7 +192,8 @@ uint16_t mqtt_read_uint16_t(unsigned char **pptr) { * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned * @return the character read */ -unsigned char mqtt_read_char(unsigned char **pptr) { +unsigned char mqtt_read_char(unsigned char **pptr) +{ unsigned char c = **pptr; (*pptr)++; return c; @@ -213,7 +204,8 @@ unsigned char mqtt_read_char(unsigned char **pptr) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param c the character to write */ -void mqtt_write_char(unsigned char **pptr, unsigned char c) { +void mqtt_write_char(unsigned char **pptr, unsigned char c) +{ **pptr = c; (*pptr)++; } @@ -223,10 +215,11 @@ void mqtt_write_char(unsigned char **pptr, unsigned char c) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param anInt the integer to write */ -void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) { - **pptr = (unsigned char) (anInt / 256); +void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) +{ + **pptr = (unsigned char)(anInt / 256); (*pptr)++; - **pptr = (unsigned char) (anInt % 256); + **pptr = (unsigned char)(anInt % 256); (*pptr)++; } @@ -235,9 +228,10 @@ void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param string the C string to write */ -void mqtt_write_utf8_string(unsigned char **pptr, const char *string) { +void mqtt_write_utf8_string(unsigned char **pptr, const char *string) +{ size_t len = strlen(string); - mqtt_write_uint_16(pptr, (uint16_t) len); + mqtt_write_uint_16(pptr, (uint16_t)len); memcpy(*pptr, string, len); *pptr += len; } @@ -245,8 +239,7 @@ void mqtt_write_utf8_string(unsigned char **pptr, const char *string) { /** * Initialize the MQTT Header fixed byte. Used to ensure that Header bits are */ -int mqtt_init_packet_header(unsigned char *header, MessageTypes message_type, - QoS Qos, uint8_t dup, uint8_t retained) +int mqtt_init_packet_header(unsigned char *header, MessageTypes message_type, QoS Qos, uint8_t dup, uint8_t retained) { POINTER_SANITY_CHECK(header, QCLOUD_ERR_INVAL); unsigned char type, qos; @@ -319,24 +312,24 @@ int mqtt_init_packet_header(unsigned char *header, MessageTypes message_type, } /* Generate the final protocol header by using bitwise operator */ - *header = ((type< buf_len) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); } - header = mqtt_read_char(&curdata); - *packet_type = ((header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT); - *dup = ((header&MQTT_HEADER_DUP_MASK)>>MQTT_HEADER_DUP_SHIFT); + header = mqtt_read_char(&curdata); + *packet_type = ((header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT); + *dup = ((header & MQTT_HEADER_DUP_MASK) >> MQTT_HEADER_DUP_SHIFT); /* read remaining length */ rc = mqtt_read_packet_rem_len_form_buf(curdata, &decodedLen, &readBytesLen); @@ -372,7 +365,7 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ } *packet_id = mqtt_read_uint16_t(&curdata); - + if (enddata - curdata >= 1) { unsigned char ack_code = mqtt_read_char(&curdata); if (ack_code != 0) { @@ -385,17 +378,17 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ } /** - * Deserializes the supplied (wire) buffer into suback data - * @param packet_id returned integer - the MQTT packet identifier - * @param max_count - the maximum number of members allowed in the grantedQoSs array - * @param count returned integer - number of members in the grantedQoSs array - * @param grantedQoSs returned array of integers - the granted qualities of service - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buf_len the length in bytes of the data in the supplied buffer - * @return error code. 1 is success, 0 is failure - */ -int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t *count, - QoS *grantedQoSs, unsigned char *buf, size_t buf_len) + * Deserializes the supplied (wire) buffer into suback data + * @param packet_id returned integer - the MQTT packet identifier + * @param max_count - the maximum number of members allowed in the grantedQoSs array + * @param count returned integer - number of members in the grantedQoSs array + * @param grantedQoSs returned array of integers - the granted qualities of service + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buf_len the length in bytes of the data in the supplied buffer + * @return error code. 1 is success, 0 is failure + */ +int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t *count, QoS *grantedQoSs, + unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -403,12 +396,12 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t POINTER_SANITY_CHECK(count, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(grantedQoSs, QCLOUD_ERR_INVAL); - unsigned char header, type = 0; + unsigned char header, type = 0; unsigned char *curdata = buf; unsigned char *enddata = NULL; - int decodeRc; - uint32_t decodedLen = 0; - uint32_t readBytesLen = 0; + int decodeRc; + uint32_t decodedLen = 0; + uint32_t readBytesLen = 0; // 4 bytes of SUBACK header size and at least 1 byte(QoS) in payload if (5 > buf_len) { @@ -416,12 +409,12 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t } // read 1st byte in fixed header header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; if (type != SUBACK) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - // read remain part in fixed header + // read remain part in fixed header decodeRc = mqtt_read_packet_rem_len_form_buf(curdata, &decodedLen, &readBytesLen); if (decodeRc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(decodeRc); @@ -442,20 +435,20 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t if (*count > max_count) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - grantedQoSs[(*count)++] = (QoS) mqtt_read_char(&curdata); + grantedQoSs[(*count)++] = (QoS)mqtt_read_char(&curdata); } IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } /** - * Deserializes the supplied (wire) buffer into unsuback data - * @param packet_id returned integer - the MQTT packet identifier - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buf_len the length in bytes of the data in the supplied buffer - * @return int indicating function execution status - */ -int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len) + * Deserializes the supplied (wire) buffer into unsuback data + * @param packet_id returned integer - the MQTT packet identifier + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buf_len the length in bytes of the data in the supplied buffer + * @return int indicating function execution status + */ +int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -463,8 +456,8 @@ int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t POINTER_SANITY_CHECK(packet_id, QCLOUD_ERR_INVAL); unsigned char type = 0; - unsigned char dup = 0; - int rc; + unsigned char dup = 0; + int rc; rc = deserialize_ack_packet(&type, &dup, packet_id, buf, buf_len); if (QCLOUD_RET_SUCCESS == rc && UNSUBACK != type) { @@ -475,22 +468,24 @@ int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t } /** - * Serializes a 0-length packet into the supplied buffer, ready for writing to a socket - * @param buf the buffer into which the packet will be serialized - * @param buf_len the length in bytes of the supplied buffer, to avoid overruns - * @param packettype the message type - * @param serialized length - * @return int indicating function execution status - */ -int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, uint32_t *serialized_len) { + * Serializes a 0-length packet into the supplied buffer, ready for writing to a socket + * @param buf the buffer into which the packet will be serialized + * @param buf_len the length in bytes of the supplied buffer, to avoid overruns + * @param packettype the message type + * @param serialized length + * @return int indicating function execution status + */ +int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); - unsigned char header = 0; - unsigned char *ptr = buf; - int rc; + unsigned char header = 0; + unsigned char *ptr = buf; + int rc; /* Buffer should have at least 2 bytes for the header */ if (4 > buf_len) { @@ -507,18 +502,19 @@ int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, Messa /* write remaining length */ ptr += mqtt_write_packet_rem_len(ptr, 0); - *serialized_len = (uint32_t) (ptr - buf); + *serialized_len = (uint32_t)(ptr - buf); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { +int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); - int rc = QCLOUD_RET_SUCCESS; + int rc = QCLOUD_RET_SUCCESS; size_t sentLen = 0, sent = 0; if (length >= pClient->write_buf_size) { @@ -526,7 +522,8 @@ int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { } while (sent < length && !expired(timer)) { - rc = pClient->network_stack.write(&(pClient->network_stack), &pClient->write_buf[sent], length, left_ms(timer), &sentLen); + rc = pClient->network_stack.write(&(pClient->network_stack), &pClient->write_buf[sent], length, left_ms(timer), + &sentLen); if (rc != QCLOUD_RET_SUCCESS) { /* there was an error writing the data */ break; @@ -536,24 +533,24 @@ int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { if (sent == length) { /* record the fact that we have successfully sent the packet */ - //countdown(&c->ping_timer, c->keep_alive_interval); + // countdown(&c->ping_timer, c->keep_alive_interval); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } IOT_FUNC_EXIT_RC(rc); } - -static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint32_t *value, uint32_t timeout) { +static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint32_t *value, uint32_t timeout) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(value, QCLOUD_ERR_INVAL); unsigned char i; - uint32_t multiplier = 1; - uint32_t len = 0; - size_t read_len = 0; + uint32_t multiplier = 1; + uint32_t len = 0; + size_t read_len = 0; *value = 0; @@ -563,8 +560,7 @@ static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_PACKET_READ) } - if ((pClient->network_stack.read(&(pClient->network_stack), &i, 1, timeout, &read_len)) != - QCLOUD_RET_SUCCESS) { + if ((pClient->network_stack.read(&(pClient->network_stack), &i, 1, timeout, &read_len)) != QCLOUD_RET_SUCCESS) { /* The value argument is the important value. len is just used temporarily * and never used by the calling function for anything else */ IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); @@ -591,19 +587,20 @@ static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint * @param packet_type MQTT packet type * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type) { +static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); - uint32_t len = 0; - uint32_t rem_len = 0; - size_t read_len = 0; - int rc; - int timer_left_ms = left_ms(timer); - - if (timer_left_ms <= 0) { + uint32_t len = 0; + uint32_t rem_len = 0; + size_t read_len = 0; + int rc; + int timer_left_ms = left_ms(timer); + + if (timer_left_ms <= 0) { timer_left_ms = 1; } @@ -618,12 +615,12 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * len = 1; // 2. read the remaining length - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - + rc = _decode_packet_rem_len_with_net_read(pClient, &rem_len, timer_left_ms); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); @@ -631,11 +628,11 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * // if read buffer is not enough to read the remaining length, discard the packet if (rem_len >= pClient->read_buf_size) { - size_t total_bytes_read = 0; - size_t bytes_to_be_read; + size_t total_bytes_read = 0; + size_t bytes_to_be_read; int32_t ret_val = 0; - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } @@ -643,8 +640,8 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * bytes_to_be_read = pClient->read_buf_size; do { - ret_val = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, bytes_to_be_read, timer_left_ms, - &read_len); + ret_val = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, bytes_to_be_read, + timer_left_ms, &read_len); if (ret_val == QCLOUD_RET_SUCCESS) { total_bytes_read += read_len; if ((rem_len - total_bytes_read) >= pClient->read_buf_size) { @@ -663,33 +660,31 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * // 3. read payload according to remaining length if (rem_len > 0 && ((len + rem_len) > pClient->read_buf_size)) { - - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - - pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, rem_len, timer_left_ms, &read_len); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); - } - else { - if (rem_len > 0) { - timer_left_ms = left_ms(timer); - if (timer_left_ms <= 0) { - timer_left_ms = 1; - } - timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - rc = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf + len, rem_len, timer_left_ms, &read_len); - if (rc != QCLOUD_RET_SUCCESS) { - IOT_FUNC_EXIT_RC(rc); - } + pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, rem_len, timer_left_ms, &read_len); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); + } else { + if (rem_len > 0) { + timer_left_ms = left_ms(timer); + if (timer_left_ms <= 0) { + timer_left_ms = 1; + } + timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; + rc = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf + len, rem_len, timer_left_ms, + &read_len); + if (rc != QCLOUD_RET_SUCCESS) { + IOT_FUNC_EXIT_RC(rc); + } } } - *packet_type = (pClient->read_buf[0]&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; - + *packet_type = (pClient->read_buf[0] & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } @@ -700,8 +695,9 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * * @param topicName * @return */ -static uint8_t _is_topic_equals(char *topic_filter, char *topicName) { - return (uint8_t) (strlen(topic_filter) == strlen(topicName) && !strcmp(topic_filter, topicName)); +static uint8_t _is_topic_equals(char *topic_filter, char *topicName) +{ + return (uint8_t)(strlen(topic_filter) == strlen(topicName) && !strcmp(topic_filter, topicName)); } /** @@ -716,17 +712,17 @@ static uint8_t _is_topic_equals(char *topic_filter, char *topicName) { * @param topicNameLen length of topic name * @return */ -static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t topicNameLen) { +static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t topicNameLen) +{ char *curf; char *curn; char *curn_end; - curf = topic_filter; - curn = topicName; + curf = topic_filter; + curn = topicName; curn_end = curn + topicNameLen; while (*curf && (curn < curn_end)) { - if (*curf == '+' && *curn == '/') { curf++; continue; @@ -743,8 +739,7 @@ static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t t if (*curf == '+') { /* skip until we meet the next separator, or end of string */ char *nextpos = curn + 1; - while (nextpos < curn_end && *nextpos != '/') - nextpos = ++curn + 1; + while (nextpos < curn_end && *nextpos != '/') nextpos = ++curn + 1; } else if (*curf == '#') { /* skip until end of string */ curn = curn_end - 1; @@ -752,12 +747,12 @@ static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t t curf++; curn++; - }; + } if (*curf == '\0') { - return (uint8_t) (curn == curn_end); + return (uint8_t)(curn == curn_end); } else { - return (uint8_t) ((*curf == '#') || *(curf + 1) == '#' || (*curf == '+' && *(curn - 1) == '/')); + return (uint8_t)((*curf == '#') || *(curf + 1) == '#' || (*curf == '+' && *(curn - 1) == '/')); } } @@ -769,29 +764,26 @@ static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t t * @param message * @return */ -static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_t topicNameLen, MQTTMessage *message) { +static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_t topicNameLen, MQTTMessage *message) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(topicName, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(message, QCLOUD_ERR_INVAL); - message->ptopic = topicName; + message->ptopic = topicName; message->topic_len = (size_t)topicNameLen; uint32_t i; - int flag_matched = 0; - HAL_MutexLock(pClient->lock_generic); for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { - if ((pClient->sub_handles[i].topic_filter != NULL) - && (_is_topic_equals(topicName, (char *) pClient->sub_handles[i].topic_filter) || - _is_topic_matched((char *) pClient->sub_handles[i].topic_filter, topicName, topicNameLen))) - { + if ((pClient->sub_handles[i].topic_filter != NULL) && + (_is_topic_equals(topicName, (char *)pClient->sub_handles[i].topic_filter) || + _is_topic_matched((char *)pClient->sub_handles[i].topic_filter, topicName, topicNameLen))) { HAL_MutexUnlock(pClient->lock_generic); if (pClient->sub_handles[i].message_handler != NULL) { pClient->sub_handles[i].message_handler(pClient, message, pClient->sub_handles[i].handler_user_data); - flag_matched = 1; IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } HAL_MutexLock(pClient->lock_generic); @@ -802,15 +794,13 @@ static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_ /* May be we do not care change FAILURE use SUCCESS*/ HAL_MutexUnlock(pClient->lock_generic); - if (0 == flag_matched) { - Log_d("no matching any topic, call default handle function"); + Log_d("no matching any topic, call default handle function"); - if (NULL != pClient->event_handle.h_fp) { - MQTTEventMsg msg; - msg.event_type = MQTT_EVENT_PUBLISH_RECVEIVED; - msg.msg = message; - pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); - } + if (NULL != pClient->event_handle.h_fp) { + MQTTEventMsg msg; + msg.event_type = MQTT_EVENT_PUBLISH_RECVEIVED; + msg.msg = message; + pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); @@ -831,8 +821,8 @@ static int _mask_pubInfo_from(Qcloud_IoT_Client *c, uint16_t msgId) HAL_MutexLock(c->lock_list_pub); if (c->list_pub_wait_ack->len) { - ListIterator *iter; - ListNode *node = NULL; + ListIterator * iter; + ListNode * node = NULL; QcloudIotPubInfo *repubInfo = NULL; if (NULL == (iter = list_iterator_new(c->list_pub_wait_ack, LIST_TAIL))) { @@ -847,7 +837,7 @@ static int _mask_pubInfo_from(Qcloud_IoT_Client *c, uint16_t msgId) break; } - repubInfo = (QcloudIotPubInfo *) node->val; + repubInfo = (QcloudIotPubInfo *)node->val; if (NULL == repubInfo) { Log_e("node's value is invalid!"); continue; @@ -880,8 +870,8 @@ static int _mask_sub_info_from(Qcloud_IoT_Client *c, unsigned int msgId, SubTopi HAL_MutexLock(c->lock_list_sub); if (c->list_sub_wait_ack->len) { - ListIterator *iter; - ListNode *node = NULL; + ListIterator * iter; + ListNode * node = NULL; QcloudIotSubInfo *sub_info = NULL; if (NULL == (iter = list_iterator_new(c->list_sub_wait_ack, LIST_TAIL))) { @@ -895,16 +885,16 @@ static int _mask_sub_info_from(Qcloud_IoT_Client *c, unsigned int msgId, SubTopi break; } - sub_info = (QcloudIotSubInfo *) node->val; + sub_info = (QcloudIotSubInfo *)node->val; if (NULL == sub_info) { Log_e("node's value is invalid!"); continue; } if (sub_info->msg_id == msgId) { - *messageHandler = sub_info->handler; /* return handle */ + *messageHandler = sub_info->handler; /* return handle */ sub_info->node_state = MQTT_NODE_STATE_INVALID; /* mark as invalid node */ - } + } } list_iterator_destroy(iter); @@ -914,7 +904,6 @@ static int _mask_sub_info_from(Qcloud_IoT_Client *c, unsigned int msgId, SubTopi IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - static int _handle_puback_packet(Qcloud_IoT_Client *pClient, Timer *timer) { IOT_FUNC_ENTRY; @@ -922,8 +911,8 @@ static int _handle_puback_packet(Qcloud_IoT_Client *pClient, Timer *timer) POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); uint16_t packet_id; - uint8_t dup, type; - int rc; + uint8_t dup, type; + int rc; rc = deserialize_ack_packet(&type, &dup, &packet_id, pClient->read_buf, pClient->read_buf_size); if (QCLOUD_RET_SUCCESS != rc) { @@ -936,14 +925,13 @@ static int _handle_puback_packet(Qcloud_IoT_Client *pClient, Timer *timer) if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; msg.event_type = MQTT_EVENT_PUBLISH_SUCCESS; - msg.msg = (void *)(uintptr_t)packet_id; + msg.msg = (void *)(uintptr_t)packet_id; pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS qos) { IOT_FUNC_ENTRY; @@ -951,12 +939,12 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); - uint32_t count = 0; - uint16_t packet_id = 0; - QoS grantedQoS[3] = {QOS0, QOS0, QOS0}; - int rc; - bool sub_nack = false; - + uint32_t count = 0; + uint16_t packet_id = 0; + QoS grantedQoS[3] = {QOS0, QOS0, QOS0}; + int rc; + bool sub_nack = false; + rc = deserialize_suback_packet(&packet_id, 1, &count, grantedQoS, pClient->read_buf, pClient->read_buf_size); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); @@ -965,22 +953,22 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q int flag_dup = 0, i_free = -1; // check return code in SUBACK packet: 0x00(QOS0, SUCCESS),0x01(QOS1, SUCCESS),0x02(QOS2, SUCCESS),0x80(Failure) if (grantedQoS[0] == 0x80) { - MQTTEventMsg msg; + MQTTEventMsg msg; msg.event_type = MQTT_EVENT_SUBCRIBE_NACK; - msg.msg = (void *)(uintptr_t)packet_id; + msg.msg = (void *)(uintptr_t)packet_id; pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); sub_nack = true; } HAL_MutexLock(pClient->lock_generic); - + SubTopicHandle sub_handle; memset(&sub_handle, 0, sizeof(SubTopicHandle)); (void)_mask_sub_info_from(pClient, (unsigned int)packet_id, &sub_handle); - if (/*(NULL == sub_handle.message_handler) || */(NULL == sub_handle.topic_filter)) { + if (/*(NULL == sub_handle.message_handler) || */ (NULL == sub_handle.topic_filter)) { Log_e("sub_handle is illegal, topic is null"); HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_SUB); @@ -992,25 +980,25 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q /* notify this event to topic subscriber */ if (NULL != sub_handle.sub_event_handler) sub_handle.sub_event_handler(pClient, MQTT_EVENT_SUBCRIBE_NACK, sub_handle.handler_user_data); - + HAL_Free((void *)sub_handle.topic_filter); - sub_handle.topic_filter = NULL; + sub_handle.topic_filter = NULL; IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_SUB); } int i; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((NULL != pClient->sub_handles[i].topic_filter)) { - if (0 == _check_handle_is_identical(&pClient->sub_handles[i], &sub_handle)) { + if (0 == _check_handle_is_identical(&pClient->sub_handles[i], &sub_handle)) { flag_dup = 1; Log_w("Identical topic found: %s", sub_handle.topic_filter); if (pClient->sub_handles[i].handler_user_data != sub_handle.handler_user_data) { - Log_w("Update handler_user_data %p -> %p!", - pClient->sub_handles[i].handler_user_data, sub_handle.handler_user_data); + Log_w("Update handler_user_data %p -> %p!", pClient->sub_handles[i].handler_user_data, + sub_handle.handler_user_data); pClient->sub_handles[i].handler_user_data = sub_handle.handler_user_data; } HAL_Free((void *)sub_handle.topic_filter); - sub_handle.topic_filter = NULL; + sub_handle.topic_filter = NULL; break; } } else { @@ -1026,21 +1014,21 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } else { - pClient->sub_handles[i_free].topic_filter = sub_handle.topic_filter; - pClient->sub_handles[i_free].message_handler = sub_handle.message_handler; + pClient->sub_handles[i_free].topic_filter = sub_handle.topic_filter; + pClient->sub_handles[i_free].message_handler = sub_handle.message_handler; pClient->sub_handles[i_free].sub_event_handler = sub_handle.sub_event_handler; - pClient->sub_handles[i_free].qos = sub_handle.qos; + pClient->sub_handles[i_free].qos = sub_handle.qos; pClient->sub_handles[i_free].handler_user_data = sub_handle.handler_user_data; } } - + HAL_MutexUnlock(pClient->lock_generic); /* notify this event to user callback */ if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; msg.event_type = MQTT_EVENT_SUBCRIBE_SUCCESS; - msg.msg = (void *)(uintptr_t)packet_id; + msg.msg = (void *)(uintptr_t)packet_id; if (pClient->event_handle.h_fp != NULL) pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } @@ -1052,7 +1040,6 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) { IOT_FUNC_ENTRY; @@ -1062,7 +1049,7 @@ static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) uint16_t packet_id = 0; - int rc = deserialize_unsuback_packet(&packet_id, pClient->read_buf, pClient->read_buf_size); + int rc = deserialize_unsuback_packet(&packet_id, pClient->read_buf, pClient->read_buf_size); if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } @@ -1073,20 +1060,6 @@ static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) /* Remove from message handler array */ HAL_MutexLock(pClient->lock_generic); - /* actually below code is nonsense as unsub handle is different with sub handle even the same topic_filter*/ - #if 0 - int i; - for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { - if ((pClient->sub_handles[i].topic_filter != NULL) - && (0 == _check_handle_is_identical(&pClient->sub_handles[i], &messageHandler))) { - memset(&pClient->sub_handles[i], 0, sizeof(SubTopicHandle)); - - /* NOTE: in case of more than one register(subscribe) with different callback function, - * so we must keep continuously searching related message handle. */ - } - } - #endif - /* Free the topic filter malloced in qcloud_iot_mqtt_unsubscribe */ if (messageHandler.topic_filter) { HAL_Free((void *)messageHandler.topic_filter); @@ -1096,7 +1069,7 @@ static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; msg.event_type = MQTT_EVENT_UNSUBCRIBE_SUCCESS; - msg.msg = (void *)(uintptr_t)packet_id; + msg.msg = (void *)(uintptr_t)packet_id; pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } @@ -1108,72 +1081,65 @@ static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) #ifdef MQTT_RMDUP_MSG_ENABLED -#define MQTT_MAX_REPEAT_BUF_LEN 50 -static uint16_t sg_repeat_packet_id_buf[MQTT_MAX_REPEAT_BUF_LEN]; - - -static int _get_packet_id_in_repeat_buf(uint16_t packet_id) +static int _get_packet_id_in_repeat_buf(Qcloud_IoT_Client *pClient, uint16_t packet_id) { int i; - for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) - { - if (packet_id == sg_repeat_packet_id_buf[i]) - { + for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) { + if (packet_id == pClient->repeat_packet_id_buf[i]) { return packet_id; } } return -1; } -static void _add_packet_id_to_repeat_buf(uint16_t packet_id) +static void _add_packet_id_to_repeat_buf(Qcloud_IoT_Client *pClient, uint16_t packet_id) { - static unsigned int current_packet_id_cnt = 0; - if (_get_packet_id_in_repeat_buf(packet_id) > 0) + if (_get_packet_id_in_repeat_buf(pClient, packet_id) > 0) return; - sg_repeat_packet_id_buf[current_packet_id_cnt++] = packet_id; + pClient->repeat_packet_id_buf[pClient->current_packet_id_cnt++] = packet_id; - if (current_packet_id_cnt >= MQTT_MAX_REPEAT_BUF_LEN) - current_packet_id_cnt = current_packet_id_cnt % 50; + if (pClient->current_packet_id_cnt >= MQTT_MAX_REPEAT_BUF_LEN) + pClient->current_packet_id_cnt %= MQTT_MAX_REPEAT_BUF_LEN; } -void reset_repeat_packet_id_buffer(void) +void reset_repeat_packet_id_buffer(Qcloud_IoT_Client *pClient) { int i; - for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) - { - sg_repeat_packet_id_buf[i] = 0; + for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) { + pClient->repeat_packet_id_buf[i] = 0; } + pClient->current_packet_id_cnt = 0; } #endif - -static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { +static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) +{ IOT_FUNC_ENTRY; - char *topic_name; - uint16_t topic_len; + char * topic_name; + uint16_t topic_len; MQTTMessage msg; - int rc; - uint32_t len = 0; + int rc; + uint32_t len = 0; - rc = deserialize_publish_packet(&msg.dup, &msg.qos, &msg.retained, &msg.id, &topic_name, &topic_len, (unsigned char **) &msg.payload, - &msg.payload_len, pClient->read_buf, pClient->read_buf_size); + rc = deserialize_publish_packet(&msg.dup, &msg.qos, &msg.retained, &msg.id, &topic_name, &topic_len, + (unsigned char **)&msg.payload, &msg.payload_len, pClient->read_buf, + pClient->read_buf_size); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); } - + // topicName from packet is NOT null terminated char fix_topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - - if(topic_len > MAX_SIZE_OF_CLOUD_TOPIC){ - topic_len = MAX_SIZE_OF_CLOUD_TOPIC - 1; - Log_e("topic len exceed buffer len"); - } + + if (topic_len > MAX_SIZE_OF_CLOUD_TOPIC) { + topic_len = MAX_SIZE_OF_CLOUD_TOPIC - 1; + Log_e("topic len exceed buffer len"); + } memcpy(fix_topic, topic_name, topic_len); - if (QOS0 == msg.qos) - { + if (QOS0 == msg.qos) { rc = _deliver_message(pClient, fix_topic, topic_len, &msg); if (QCLOUD_RET_SUCCESS != rc) IOT_FUNC_EXIT_RC(rc); @@ -1184,21 +1150,20 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { } else { #ifdef MQTT_RMDUP_MSG_ENABLED // check if packet_id has been received before - int repeat_id = _get_packet_id_in_repeat_buf(msg.id); + int repeat_id = _get_packet_id_in_repeat_buf(pClient, msg.id); // deliver to msg callback - if (repeat_id < 0) - { + if (repeat_id < 0) { #endif rc = _deliver_message(pClient, fix_topic, topic_len, &msg); if (QCLOUD_RET_SUCCESS != rc) IOT_FUNC_EXIT_RC(rc); #ifdef MQTT_RMDUP_MSG_ENABLED } - _add_packet_id_to_repeat_buf(msg.id); + _add_packet_id_to_repeat_buf(pClient, msg.id); #endif } - + HAL_MutexLock(pClient->lock_write_buf); if (QOS1 == msg.qos) { rc = serialize_pub_ack_packet(pClient->write_buf, pClient->write_buf_size, PUBACK, 0, msg.id, &len); @@ -1221,13 +1186,13 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - -static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) { +static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) +{ IOT_FUNC_ENTRY; - uint16_t packet_id; + uint16_t packet_id; unsigned char dup, type; - int rc; - uint32_t len; + int rc; + uint32_t len; rc = deserialize_ack_packet(&type, &dup, &packet_id, pClient->read_buf, pClient->read_buf_size); if (QCLOUD_RET_SUCCESS != rc) { @@ -1253,8 +1218,8 @@ static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - -static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) { +static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; HAL_MutexLock(pClient->lock_generic); @@ -1265,7 +1230,8 @@ static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT; } -int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos) { +int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -1309,29 +1275,29 @@ int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_typ } case PUBCOMP: break; - case PINGRESP: + case PINGRESP: break; default: { /* Either unknown packet type or Failure occurred * Should not happen */ - + IOT_FUNC_EXIT_RC(QCLOUD_ERR_RX_MESSAGE_INVAL); break; } } - switch (*packet_type) { + switch (*packet_type) { /* Recv below msgs are all considered as PING OK */ case PUBACK: case SUBACK: - case UNSUBACK: + case UNSUBACK: case PINGRESP: { _handle_pingresp_packet(pClient); break; } /* Recv downlink pub means link is OK but we still need to send PING request */ case PUBLISH: { - HAL_MutexLock(pClient->lock_generic); + HAL_MutexLock(pClient->lock_generic); pClient->is_ping_outstanding = 0; HAL_MutexUnlock(pClient->lock_generic); break; @@ -1341,37 +1307,40 @@ int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_typ IOT_FUNC_EXIT_RC(rc); } -int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, QoS qos) { - IOT_FUNC_ENTRY; - int rc; - uint8_t read_packet_type = 0; +int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, QoS qos) +{ + IOT_FUNC_ENTRY; + int rc; + uint8_t read_packet_type = 0; - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); - do { - if (expired(timer)) { - rc = QCLOUD_ERR_MQTT_REQUEST_TIMEOUT; - break; - } - rc = cycle_for_read(pClient, timer, &read_packet_type, qos); - } while (QCLOUD_RET_SUCCESS == rc && read_packet_type != packet_type ); + do { + if (expired(timer)) { + rc = QCLOUD_ERR_MQTT_REQUEST_TIMEOUT; + break; + } + rc = cycle_for_read(pClient, timer, &read_packet_type, qos); + } while (QCLOUD_RET_SUCCESS == rc && read_packet_type != packet_type); - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected) { +void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected) +{ HAL_MutexLock(pClient->lock_generic); pClient->is_connected = connected; HAL_MutexUnlock(pClient->lock_generic); } -uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) { +uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; - uint8_t is_connected = 0; - HAL_MutexLock(pClient->lock_generic); - is_connected = pClient->is_connected; - HAL_MutexUnlock(pClient->lock_generic); + uint8_t is_connected = 0; + HAL_MutexLock(pClient->lock_generic); + is_connected = pClient->is_connected; + HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(is_connected); } @@ -1380,15 +1349,14 @@ uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) { * * return: 0, success; NOT 0, fail; */ -int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, MessageTypes type, - SubTopicHandle *handler, ListNode **node) +int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, MessageTypes type, SubTopicHandle *handler, + ListNode **node) { IOT_FUNC_ENTRY; if (!c || !handler || !node) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); } - HAL_MutexLock(c->lock_list_sub); if (c->list_sub_wait_ack->len >= MAX_MESSAGE_HANDLERS) { @@ -1397,30 +1365,30 @@ int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, Messag IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_MAX_SUBSCRIPTIONS); } - QcloudIotSubInfo *sub_info = (QcloudIotSubInfo *)HAL_Malloc(sizeof( - QcloudIotSubInfo) + len); + QcloudIotSubInfo *sub_info = (QcloudIotSubInfo *)HAL_Malloc(sizeof(QcloudIotSubInfo) + len); if (NULL == sub_info) { HAL_MutexUnlock(c->lock_list_sub); Log_e("malloc failed!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - + sub_info->node_state = MQTT_NODE_STATE_NORMANL; - sub_info->msg_id = msgId; - sub_info->len = len; + sub_info->msg_id = msgId; + sub_info->len = len; InitTimer(&sub_info->sub_start_time); countdown_ms(&sub_info->sub_start_time, c->command_timeout_ms); - sub_info->type = type; + sub_info->type = type; sub_info->handler = *handler; - sub_info->buf = (unsigned char *)sub_info + sizeof(QcloudIotSubInfo); + sub_info->buf = (unsigned char *)sub_info + sizeof(QcloudIotSubInfo); memcpy(sub_info->buf, c->write_buf, len); *node = list_node_new(sub_info); if (NULL == *node) { HAL_MutexUnlock(c->lock_list_sub); + HAL_Free(sub_info); Log_e("list_node_new failed!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c similarity index 64% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c index 184ee040..935e717f 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_connect.c @@ -18,44 +18,44 @@ extern "C" { #endif -#include #include +#include -#include "qcloud_iot_common.h" #include "mqtt_client.h" +#include "qcloud_iot_common.h" #include "utils_hmac.h" +#define MQTT_CONNECT_FLAG_USERNAME 0x80 +#define MQTT_CONNECT_FLAG_PASSWORD 0x40 +#define MQTT_CONNECT_FLAG_WILL_RETAIN 0x20 +#define MQTT_CONNECT_FLAG_WILL_QOS2 0x18 +#define MQTT_CONNECT_FLAG_WILL_QOS1 0x08 +#define MQTT_CONNECT_FLAG_WILL_QOS0 0x00 +#define MQTT_CONNECT_FLAG_WILL_FLAG 0x04 +#define MQTT_CONNECT_FLAG_CLEAN_SES 0x02 -#define MQTT_CONNECT_FLAG_USERNAME 0x80 -#define MQTT_CONNECT_FLAG_PASSWORD 0x40 -#define MQTT_CONNECT_FLAG_WILL_RETAIN 0x20 -#define MQTT_CONNECT_FLAG_WILL_QOS2 0x18 -#define MQTT_CONNECT_FLAG_WILL_QOS1 0x08 -#define MQTT_CONNECT_FLAG_WILL_QOS0 0x00 -#define MQTT_CONNECT_FLAG_WILL_FLAG 0x04 -#define MQTT_CONNECT_FLAG_CLEAN_SES 0x02 - -#define MQTT_CONNACK_FLAG_SES_PRE 0x01 +#define MQTT_CONNACK_FLAG_SES_PRE 0x01 /** * Connect return code */ typedef enum { - CONNACK_CONNECTION_ACCEPTED = 0, // connection accepted - CONANCK_UNACCEPTABLE_PROTOCOL_VERSION_ERROR = 1, // connection refused: unaccpeted protocol verison - CONNACK_IDENTIFIER_REJECTED_ERROR = 2, // connection refused: identifier rejected - CONNACK_SERVER_UNAVAILABLE_ERROR = 3, // connection refused: server unavailable - CONNACK_BAD_USERDATA_ERROR = 4, // connection refused: bad user name or password - CONNACK_NOT_AUTHORIZED_ERROR = 5 // connection refused: not authorized + CONNACK_CONNECTION_ACCEPTED = 0, // connection accepted + CONANCK_UNACCEPTABLE_PROTOCOL_VERSION_ERROR = 1, // connection refused: unaccpeted protocol verison + CONNACK_IDENTIFIER_REJECTED_ERROR = 2, // connection refused: identifier rejected + CONNACK_SERVER_UNAVAILABLE_ERROR = 3, // connection refused: server unavailable + CONNACK_BAD_USERDATA_ERROR = 4, // connection refused: bad user name or password + CONNACK_NOT_AUTHORIZED_ERROR = 5 // connection refused: not authorized } MQTTConnackReturnCodes; /** - * Determines the length of the MQTT connect packet that would be produced using the supplied connect options. - * @param options the options to be used to build the connect packet - * @param the length of buffer needed to contain the serialized version of the packet - * @return int indicating function execution status - */ -static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) { + * Determines the length of the MQTT connect packet that would be produced using the supplied connect options. + * @param options the options to be used to build the connect packet + * @param the length of buffer needed to contain the serialized version of the packet + * @return int indicating function execution status + */ +static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) +{ size_t len = 0; /* variable depending on MQTT or MQIsdp */ if (3 == options->mqtt_version) { @@ -74,35 +74,42 @@ static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) { len += strlen(options->password) + 2; } - return (uint32_t) len; + return (uint32_t)len; } -static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectParams *source) { +static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectParams *source) +{ + POINTER_SANITY_CHECK_RTN(destination); + POINTER_SANITY_CHECK_RTN(source); - POINTER_SANITY_CHECK_RTN(destination); - POINTER_SANITY_CHECK_RTN(source); + /* In case of reconnecting, source == destination */ + if (source == destination) { + return; + } - destination->mqtt_version = source->mqtt_version; - destination->client_id = source->client_id; - destination->username = source->username; + destination->mqtt_version = source->mqtt_version; + destination->client_id = source->client_id; + destination->username = source->username; destination->keep_alive_interval = source->keep_alive_interval; - destination->clean_session = source->clean_session; + destination->clean_session = source->clean_session; destination->auto_connect_enable = source->auto_connect_enable; #ifdef AUTH_WITH_NOTLS - destination->device_secret = source->device_secret; + destination->device_secret = source->device_secret; destination->device_secret_len = source->device_secret_len; #endif } /** - * Serializes the connect options into the buffer. - * @param buf the buffer into which the packet will be serialized - * @param len the length in bytes of the supplied buffer - * @param options the options to be used to build the connect packet - * @param serialized length - * @return int indicating function execution status - */ -static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTConnectParams *options, uint32_t *serialized_len) { + * Serializes the connect options into the buffer. + * @param buf the buffer into which the packet will be serialized + * @param len the length in bytes of the supplied buffer + * @param options the options to be used to build the connect packet + * @param serialized length + * @return int indicating function execution status + */ +static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTConnectParams *options, + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -110,46 +117,62 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon STRING_PTR_SANITY_CHECK(options->client_id, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); - unsigned char *ptr = buf; - unsigned char header = 0; - unsigned char flags = 0; - uint32_t rem_len = 0; - int rc; + unsigned char *ptr = buf; + unsigned char header = 0; + unsigned char flags = 0; + uint32_t rem_len = 0; + int rc; long cur_timesec = HAL_Timer_current_sec() + MAX_ACCESS_EXPIRE_TIMEOUT / 1000; if (cur_timesec <= 0 || MAX_ACCESS_EXPIRE_TIMEOUT <= 0) { - cur_timesec = LONG_MAX; + cur_timesec = LONG_MAX; } long cur_timesec_bak = cur_timesec; - int cur_timesec_len = 0; - while(cur_timesec_bak != 0) { - cur_timesec_bak /= 10; - ++cur_timesec_len; - } + int cur_timesec_len = 0; + while (cur_timesec_bak != 0) { + cur_timesec_bak /= 10; + ++cur_timesec_len; + } + + int username_len = + strlen(options->client_id) + strlen(QCLOUD_IOT_DEVICE_SDK_APPID) + MAX_CONN_ID_LEN + cur_timesec_len + 4; + options->username = (char *)HAL_Malloc(username_len); + if (options->username == NULL) { + Log_e("malloc username failed!"); + rc = QCLOUD_ERR_MALLOC; + goto err_exit; + } - int username_len = strlen(options->client_id) + strlen(QCLOUD_IOT_DEVICE_SDK_APPID) + MAX_CONN_ID_LEN + cur_timesec_len + 4; - options->username = (char*)HAL_Malloc(username_len); get_next_conn_id(options->conn_id); - HAL_Snprintf(options->username, username_len, "%s;%s;%s;%ld", options->client_id, QCLOUD_IOT_DEVICE_SDK_APPID, options->conn_id, cur_timesec); + HAL_Snprintf(options->username, username_len, "%s;%s;%s;%ld", options->client_id, QCLOUD_IOT_DEVICE_SDK_APPID, + options->conn_id, cur_timesec); #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - if (options->device_secret != NULL && options->username != NULL) { - char sign[41] = {0}; - utils_hmac_sha1(options->username, strlen(options->username), sign, options->device_secret, options->device_secret_len); - options->password = (char*) HAL_Malloc (51); - if (options->password == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - HAL_Snprintf(options->password, 51, "%s;hmacsha1", sign); - } + if (options->device_secret != NULL && options->username != NULL) { + char sign[41] = {0}; + utils_hmac_sha1(options->username, strlen(options->username), sign, options->device_secret, + options->device_secret_len); + options->password = (char *)HAL_Malloc(51); + if (options->password == NULL) { + Log_e("malloc password failed!"); + rc = QCLOUD_ERR_MALLOC; + goto err_exit; + } + HAL_Snprintf(options->password, 51, "%s;hmacsha1", sign); + } #endif rem_len = _get_packet_connect_rem_len(options); if (get_mqtt_packet_len(rem_len) > buf_len) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); + Log_e("get_mqtt_packet_len failed!"); + rc = QCLOUD_ERR_BUF_TOO_SHORT; + goto err_exit; } rc = mqtt_init_packet_header(&header, CONNECT, QOS0, 0, 0); if (QCLOUD_RET_SUCCESS != rc) { - IOT_FUNC_EXIT_RC(rc); + Log_e("mqtt_init_packet_header failed!"); + goto err_exit; } // 1st byte in fixed header @@ -161,10 +184,10 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon // MQTT protocol name and version in variable header if (4 == options->mqtt_version) { mqtt_write_utf8_string(&ptr, "MQTT"); - mqtt_write_char(&ptr, (unsigned char) 4); + mqtt_write_char(&ptr, (unsigned char)4); } else { mqtt_write_utf8_string(&ptr, "MQIsdp"); - mqtt_write_char(&ptr, (unsigned char) 3); + mqtt_write_char(&ptr, (unsigned char)3); } // flags in variable header @@ -172,7 +195,7 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon flags |= (options->username != NULL) ? MQTT_CONNECT_FLAG_USERNAME : 0; #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - flags |= MQTT_CONNECT_FLAG_PASSWORD; + flags |= MQTT_CONNECT_FLAG_PASSWORD; #endif mqtt_write_char(&ptr, flags); @@ -190,38 +213,48 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon } if ((flags & MQTT_CONNECT_FLAG_PASSWORD) && options->password != NULL) { - mqtt_write_utf8_string(&ptr, options->password); - HAL_Free(options->password); - options->password = NULL; + mqtt_write_utf8_string(&ptr, options->password); + HAL_Free(options->password); + options->password = NULL; } - *serialized_len = (uint32_t) (ptr - buf); + *serialized_len = (uint32_t)(ptr - buf); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + +err_exit: + HAL_Free(options->username); + options->username = NULL; + + HAL_Free(options->password); + options->password = NULL; + + IOT_FUNC_EXIT_RC(rc); } /** - * Deserializes the supplied (wire) buffer into connack data - return code - * @param sessionPresent the session present flag returned (only for MQTT 3.1.1) - * @param connack_rc returned integer value of the connack return code - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buflen the length in bytes of the data in the supplied buffer - * @return int indicating function execution status - */ -static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, unsigned char *buf, size_t buflen) { + * Deserializes the supplied (wire) buffer into connack data - return code + * @param sessionPresent the session present flag returned (only for MQTT 3.1.1) + * @param connack_rc returned integer value of the connack return code + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buflen the length in bytes of the data in the supplied buffer + * @return int indicating function execution status + */ +static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, unsigned char *buf, size_t buflen) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(sessionPresent, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(connack_rc, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); - unsigned char header, type = 0; + unsigned char header, type = 0; unsigned char *curdata = buf; unsigned char *enddata = NULL; - int rc; - uint32_t decodedLen = 0, readBytesLen = 0; - unsigned char flags = 0; - unsigned char connack_rc_char; + int rc; + uint32_t decodedLen = 0, readBytesLen = 0; + unsigned char flags = 0; + unsigned char connack_rc_char; // CONNACK: 2 bytes in fixed header and 2 bytes in variable header, no payload if (4 > buflen) { @@ -229,7 +262,7 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, } header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; if (CONNACK != type) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -245,7 +278,7 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, } // variable header - connack flag, refer to MQTT spec 3.2.2.1 - flags = mqtt_read_char(&curdata); + flags = mqtt_read_char(&curdata); *sessionPresent = flags & MQTT_CONNACK_FLAG_SES_PRE; // variable header - return code, refer to MQTT spec 3.2.2.3 @@ -284,18 +317,17 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, * @param options * @return */ -static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) { - +static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) +{ IOT_FUNC_ENTRY; - Timer connect_timer; - int connack_rc = QCLOUD_ERR_FAILURE, rc = QCLOUD_ERR_FAILURE; - uint8_t sessionPresent = 0; - uint32_t len = 0; + Timer connect_timer; + int connack_rc = QCLOUD_ERR_FAILURE, rc = QCLOUD_ERR_FAILURE; + uint8_t sessionPresent = 0; + uint32_t len = 0; InitTimer(&connect_timer); - // if we have log in console, we need a longer timeout - countdown_ms(&connect_timer, pClient->command_timeout_ms + 10 * 1000); + countdown_ms(&connect_timer, pClient->command_timeout_ms); if (NULL != options) { _copy_connect_params(&(pClient->options), options); @@ -311,14 +343,14 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) // serialize CONNECT packet rc = _serialize_connect_packet(pClient->write_buf, pClient->write_buf_size, &(pClient->options), &len); if (QCLOUD_RET_SUCCESS != rc || 0 == len) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } // send CONNECT packet rc = send_mqtt_packet(pClient, len, &connect_timer); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } HAL_MutexUnlock(pClient->lock_write_buf); @@ -342,15 +374,15 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) set_client_conn_state(pClient, CONNECTED); HAL_MutexLock(pClient->lock_generic); pClient->was_manually_disconnected = 0; - pClient->is_ping_outstanding = 0; + pClient->is_ping_outstanding = 0; countdown(&pClient->ping_timer, pClient->options.keep_alive_interval); HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pParams) { - +int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pParams) +{ IOT_FUNC_ENTRY; int rc; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -371,8 +403,8 @@ int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pPara IOT_FUNC_EXIT_RC(rc); } -int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) { - +int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; @@ -398,14 +430,14 @@ int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(QCLOUD_RET_MQTT_RECONNECTED); } -int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) { - +int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - Timer timer; + Timer timer; uint32_t serialized_len = 0; if (get_client_conn_state(pClient) == 0) { @@ -443,5 +475,3 @@ int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) { #ifdef __cplusplus } #endif - - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c similarity index 78% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c index 84b835df..c57520a7 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_net.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,14 +19,15 @@ extern "C" { #include "mqtt_client_net.h" -//TODO: how to implement +// TODO: how to implement /** * @brief Check if TLS connection is valid * * @param pNetwork * @return */ -int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) { +int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) +{ return 1; } @@ -37,17 +38,18 @@ int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) { * @param pConnectParams * @return */ -int qcloud_iot_mqtt_network_init(Network *pNetwork) { +int qcloud_iot_mqtt_network_init(Network *pNetwork) +{ int rc; /* first choice: TLS */ pNetwork->type = NETWORK_TLS; -#ifdef AUTH_WITH_NOTLS +#ifdef AUTH_WITH_NOTLS pNetwork->type = NETWORK_TCP; #endif - rc = network_init(pNetwork); + rc = network_init(pNetwork); pNetwork->is_connected = qcloud_iot_mqtt_tls_is_connected; return rc; diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c similarity index 59% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c index 5e24165f..370b922e 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_publish.c @@ -22,7 +22,6 @@ extern "C" { #include #include "mqtt_client.h" - #include "utils_list.h" /** @@ -31,21 +30,22 @@ extern "C" { * @param enddata pointer to the end of the data: do not read beyond * @return SUCCESS if successful, FAILURE if not */ -static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned char **pptr, unsigned char *enddata) { +static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned char **pptr, unsigned char *enddata) +{ int rc = QCLOUD_ERR_FAILURE; /* the first two bytes are the length of the string */ /* enough length to read the integer? */ if (enddata - (*pptr) > 1) { *stringLen = mqtt_read_uint16_t(pptr); /* increments pptr to point past length */ - - if(*stringLen > QCLOUD_IOT_MQTT_RX_BUF_LEN){ - Log_e("stringLen exceed QCLOUD_IOT_MQTT_RX_BUF_LEN"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - + + if (*stringLen > QCLOUD_IOT_MQTT_RX_BUF_LEN) { + Log_e("stringLen exceed QCLOUD_IOT_MQTT_RX_BUF_LEN"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + if (&(*pptr)[*stringLen] <= enddata) { - *string = (char *) *pptr; + *string = (char *)*pptr; *pptr += *stringLen; rc = QCLOUD_RET_SUCCESS; } @@ -55,20 +55,21 @@ static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned ch } /** - * Determines the length of the MQTT publish packet that would be produced using the supplied parameters - * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) - * @param topicName the topic name to be used in the publish - * @param payload_len the length of the payload to be sent - * @return the length of buffer needed to contain the serialized version of the packet - */ -static uint32_t _get_publish_packet_len(uint8_t qos, char *topicName, size_t payload_len) { + * Determines the length of the MQTT publish packet that would be produced using the supplied parameters + * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) + * @param topicName the topic name to be used in the publish + * @param payload_len the length of the payload to be sent + * @return the length of buffer needed to contain the serialized version of the packet + */ +static uint32_t _get_publish_packet_len(uint8_t qos, char *topicName, size_t payload_len) +{ size_t len = 0; len += 2 + strlen(topicName) + payload_len; if (qos > 0) { len += 2; /* packetid */ } - return (uint32_t) len; + return (uint32_t)len; } static int _mask_push_pubInfo_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, ListNode **node) @@ -101,8 +102,8 @@ static int _mask_push_pubInfo_to(Qcloud_IoT_Client *c, int len, unsigned short m } repubInfo->node_state = MQTT_NODE_STATE_NORMANL; - repubInfo->msg_id = msgId; - repubInfo->len = len; + repubInfo->msg_id = msgId; + repubInfo->len = len; InitTimer(&repubInfo->pub_start_time); countdown_ms(&repubInfo->pub_start_time, c->command_timeout_ms); @@ -113,6 +114,7 @@ static int _mask_push_pubInfo_to(Qcloud_IoT_Client *c, int len, unsigned short m *node = list_node_new(repubInfo); if (NULL == *node) { HAL_MutexUnlock(c->lock_list_pub); + HAL_Free(repubInfo); Log_e("list_node_new failed!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -125,20 +127,21 @@ static int _mask_push_pubInfo_to(Qcloud_IoT_Client *c, int len, unsigned short m } /** - * Deserializes the supplied (wire) buffer into publish data - * @param dup returned integer - the MQTT dup flag - * @param qos returned integer - the MQTT QoS value - * @param retained returned integer - the MQTT retained flag - * @param packet_id returned integer - the MQTT packet identifier - * @param topicName returned MQTTString - the MQTT topic in the publish - * @param payload returned byte buffer - the MQTT publish payload - * @param payload_len returned integer - the length of the MQTT payload - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buf_len the length in bytes of the data in the supplied buffer - * @return error code. 1 is success - */ + * Deserializes the supplied (wire) buffer into publish data + * @param dup returned integer - the MQTT dup flag + * @param qos returned integer - the MQTT QoS value + * @param retained returned integer - the MQTT retained flag + * @param packet_id returned integer - the MQTT packet identifier + * @param topicName returned MQTTString - the MQTT topic in the publish + * @param payload returned byte buffer - the MQTT publish payload + * @param payload_len returned integer - the length of the MQTT payload + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buf_len the length in bytes of the data in the supplied buffer + * @return error code. 1 is success + */ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16_t *packet_id, char **topicName, - uint16_t *topicNameLen,unsigned char **payload, size_t *payload_len, unsigned char *buf, size_t buf_len) + uint16_t *topicNameLen, unsigned char **payload, size_t *payload_len, unsigned char *buf, + size_t buf_len) { IOT_FUNC_ENTRY; @@ -147,12 +150,12 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 POINTER_SANITY_CHECK(retained, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(packet_id, QCLOUD_ERR_INVAL); - unsigned char header, type = 0; + unsigned char header, type = 0; unsigned char *curdata = buf; unsigned char *enddata = NULL; - int rc; - uint32_t decodedLen = 0; - uint32_t readBytesLen = 0; + int rc; + uint32_t decodedLen = 0; + uint32_t readBytesLen = 0; /* Publish header size is at least four bytes. * Fixed header is two bytes. @@ -164,12 +167,12 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); } - header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; - *dup = (header&MQTT_HEADER_DUP_MASK)>>MQTT_HEADER_DUP_SHIFT; - *qos = (QoS)((header&MQTT_HEADER_QOS_MASK)>>MQTT_HEADER_QOS_SHIFT); - *retained = header&MQTT_HEADER_RETAIN_MASK; - + header = mqtt_read_char(&curdata); + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; + *dup = (header & MQTT_HEADER_DUP_MASK) >> MQTT_HEADER_DUP_SHIFT; + *qos = (QoS)((header & MQTT_HEADER_QOS_MASK) >> MQTT_HEADER_QOS_SHIFT); + *retained = header & MQTT_HEADER_RETAIN_MASK; + if (PUBLISH != type) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -183,7 +186,8 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 enddata = curdata + decodedLen; /* do we have enough data to read the protocol version byte? */ - if (QCLOUD_RET_SUCCESS != _read_string_with_len(topicName, topicNameLen, &curdata, enddata) || (0 > (enddata - curdata))) { + if (QCLOUD_RET_SUCCESS != _read_string_with_len(topicName, topicNameLen, &curdata, enddata) || + (0 > (enddata - curdata))) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -191,32 +195,32 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 *packet_id = mqtt_read_uint16_t(&curdata); } - *payload_len = (size_t) (enddata - curdata); - *payload = curdata; + *payload_len = (size_t)(enddata - curdata); + *payload = curdata; IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } /** - * Serializes the ack packet into the supplied buffer. - * @param buf the buffer into which the packet will be serialized - * @param buf_len the length in bytes of the supplied buffer - * @param packet_type the MQTT packet type: 1.PUBACK; 2.PUBREL; 3.PUBCOMP - * @param dup the MQTT dup flag - * @param packet_id the MQTT packet identifier - * @return serialized length, or error if 0 - */ + * Serializes the ack packet into the supplied buffer. + * @param buf the buffer into which the packet will be serialized + * @param buf_len the length in bytes of the supplied buffer + * @param packet_type the MQTT packet type: 1.PUBACK; 2.PUBREL; 3.PUBCOMP + * @param dup the MQTT dup flag + * @param packet_id the MQTT packet identifier + * @return serialized length, or error if 0 + */ int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes packet_type, uint8_t dup, - uint16_t packet_id, - uint32_t *serialized_len) { + uint16_t packet_id, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); - unsigned char header = 0; - unsigned char *ptr = buf; - QoS requestQoS = (PUBREL == packet_type) ? QOS1 : QOS0; // refer to MQTT spec 3.6.1 - int rc = mqtt_init_packet_header(&header, packet_type, requestQoS, dup, 0); + unsigned char header = 0; + unsigned char *ptr = buf; + QoS requestQoS = (PUBREL == packet_type) ? QOS1 : QOS0; // refer to MQTT spec 3.6.1 + int rc = mqtt_init_packet_header(&header, packet_type, requestQoS, dup, 0); /* Minimum byte length required by ACK headers is * 2 for fixed and 2 for variable part */ @@ -231,38 +235,37 @@ int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes pa ptr += mqtt_write_packet_rem_len(ptr, 2); /* write remaining length */ mqtt_write_uint_16(&ptr, packet_id); - *serialized_len = (uint32_t) (ptr - buf); + *serialized_len = (uint32_t)(ptr - buf); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - /** - * Serializes the supplied publish data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buf_len the length in bytes of the supplied buffer - * @param dup integer - the MQTT dup flag - * @param qos integer - the MQTT QoS value - * @param retained integer - the MQTT retained flag - * @param packet_id integer - the MQTT packet identifier - * @param topicName MQTTString - the MQTT topic in the publish - * @param payload byte buffer - the MQTT publish payload - * @param payload_len integer - the length of the MQTT payload - * @return the length of the serialized data. <= 0 indicates error - */ + * Serializes the supplied publish data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buf_len the length in bytes of the supplied buffer + * @param dup integer - the MQTT dup flag + * @param qos integer - the MQTT QoS value + * @param retained integer - the MQTT retained flag + * @param packet_id integer - the MQTT packet identifier + * @param topicName MQTTString - the MQTT topic in the publish + * @param payload byte buffer - the MQTT publish payload + * @param payload_len integer - the length of the MQTT payload + * @return the length of the serialized data. <= 0 indicates error + */ static int _serialize_publish_packet(unsigned char *buf, size_t buf_len, uint8_t dup, QoS qos, uint8_t retained, - uint16_t packet_id, - char *topicName, unsigned char *payload, size_t payload_len, - uint32_t *serialized_len) { + uint16_t packet_id, char *topicName, unsigned char *payload, size_t payload_len, + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(payload, QCLOUD_ERR_INVAL); - unsigned char *ptr = buf; - unsigned char header = 0; - uint32_t rem_len = 0; - int rc; + unsigned char *ptr = buf; + unsigned char header = 0; + uint32_t rem_len = 0; + int rc; rem_len = _get_publish_packet_len(qos, topicName, payload_len); if (get_mqtt_packet_len(rem_len) > buf_len) { @@ -276,35 +279,37 @@ static int _serialize_publish_packet(unsigned char *buf, size_t buf_len, uint8_t mqtt_write_char(&ptr, header); /* write header */ - ptr += mqtt_write_packet_rem_len(ptr, rem_len); /* write remaining length */; + ptr += mqtt_write_packet_rem_len(ptr, rem_len); /* write remaining length */ + ; - mqtt_write_utf8_string(&ptr, topicName); /* Variable Header: Topic Name */ + mqtt_write_utf8_string(&ptr, topicName); /* Variable Header: Topic Name */ if (qos > 0) { - mqtt_write_uint_16(&ptr, packet_id); /* Variable Header: Topic Name */ + mqtt_write_uint_16(&ptr, packet_id); /* Variable Header: Topic Name */ } memcpy(ptr, payload, payload_len); ptr += payload_len; - *serialized_len = (uint32_t) (ptr - buf); + *serialized_len = (uint32_t)(ptr - buf); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, PublishParams *pParams) { +int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, PublishParams *pParams) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); STRING_PTR_SANITY_CHECK(topicName, QCLOUD_ERR_INVAL); - Timer timer; + Timer timer; uint32_t len = 0; - int rc; + int rc; ListNode *node = NULL; - + size_t topicLen = strlen(topicName); if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); @@ -326,25 +331,23 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish if (pParams->qos == QOS1) { pParams->id = get_next_packet_id(pClient); if (IOT_Log_Get_Level() <= eLOG_DEBUG) { - Log_d("publish topic seq=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + Log_d("publish topic seq=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + } else { + Log_i("publish topic seq=%d|topicName=%s", pParams->id, topicName); } - else { - Log_i("publish topic seq=%d|topicName=%s", pParams->id, topicName); + } else { + if (IOT_Log_Get_Level() <= eLOG_DEBUG) { + Log_d("publish packetID=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + } else { + Log_i("publish packetID=%d|topicName=%s", pParams->id, topicName); } } - else { - if (IOT_Log_Get_Level() <= eLOG_DEBUG) { - Log_d("publish packetID=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); - } - else { - Log_i("publish packetID=%d|topicName=%s", pParams->id, topicName); - } - } - rc = _serialize_publish_packet(pClient->write_buf, pClient->write_buf_size, 0, pParams->qos, pParams->retained, pParams->id, - topicName, (unsigned char *) pParams->payload, pParams->payload_len, &len); + rc = _serialize_publish_packet(pClient->write_buf, pClient->write_buf_size, 0, pParams->qos, pParams->retained, + pParams->id, topicName, (unsigned char *)pParams->payload, pParams->payload_len, + &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } @@ -359,20 +362,20 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish /* send the publish packet */ rc = send_mqtt_packet(pClient, len, &timer); - if (QCLOUD_RET_SUCCESS != rc) { - if (pParams->qos > QOS0) { - HAL_MutexLock(pClient->lock_list_pub); - list_remove(pClient->list_pub_wait_ack, node); - HAL_MutexUnlock(pClient->lock_list_pub); - } + if (QCLOUD_RET_SUCCESS != rc) { + if (pParams->qos > QOS0) { + HAL_MutexLock(pClient->lock_list_pub); + list_remove(pClient->list_pub_wait_ack, node); + HAL_MutexUnlock(pClient->lock_list_pub); + } - HAL_MutexUnlock(pClient->lock_write_buf); - IOT_FUNC_EXIT_RC(rc); - } + HAL_MutexUnlock(pClient->lock_write_buf); + IOT_FUNC_EXIT_RC(rc); + } - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); - IOT_FUNC_EXIT_RC(pParams->id); + IOT_FUNC_EXIT_RC(pParams->id); } #ifdef __cplusplus diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c similarity index 61% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c index 0fbf0591..4b579aeb 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_subscribe.c @@ -23,12 +23,13 @@ extern "C" { #include "mqtt_client.h" /** - * Determines the length of the MQTT subscribe packet that would be produced using the supplied parameters - * @param count the number of topic filter strings in topicFilters - * @param topicFilters the array of topic filter strings to be used in the publish - * @return the length of buffer needed to contain the serialized version of the packet - */ -static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilters) { + * Determines the length of the MQTT subscribe packet that would be produced using the supplied parameters + * @param count the number of topic filter strings in topicFilters + * @param topicFilters the array of topic filter strings to be used in the publish + * @return the length of buffer needed to contain the serialized version of the packet + */ +static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilters) +{ size_t i; size_t len = 2; /* packetid */ @@ -36,34 +37,37 @@ static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilter len += 2 + strlen(*topicFilters + i) + 1; /* length + topic + req_qos */ } - return (uint32_t) len; + return (uint32_t)len; } /** - * Serializes the supplied subscribe data into the supplied buffer, ready for sending - * @param buf the buffer into which the packet will be serialized - * @param buf_len the length in bytes of the supplied bufferr - * @param dup integer - the MQTT dup flag - * @param packet_id integer - the MQTT packet identifier - * @param count - number of members in the topicFilters and reqQos arrays - * @param topicFilters - array of topic filter names - * @param requestedQoSs - array of requested QoS - * @return the length of the serialized data. <= 0 indicates error - */ -static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8_t dup, uint16_t packet_id, uint32_t count, - char **topicFilters, QoS *requestedQoSs, uint32_t *serialized_len) { + * Serializes the supplied subscribe data into the supplied buffer, ready for sending + * @param buf the buffer into which the packet will be serialized + * @param buf_len the length in bytes of the supplied bufferr + * @param dup integer - the MQTT dup flag + * @param packet_id integer - the MQTT packet identifier + * @param count - number of members in the topicFilters and reqQos arrays + * @param topicFilters - array of topic filter names + * @param requestedQoSs - array of requested QoS + * @return the length of the serialized data. <= 0 indicates error + */ +static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8_t dup, uint16_t packet_id, + uint32_t count, char **topicFilters, QoS *requestedQoSs, + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); - unsigned char *ptr = buf; - unsigned char header = 0; - uint32_t rem_len = 0; - uint32_t i = 0; - int rc; + unsigned char *ptr = buf; + unsigned char header = 0; + uint32_t rem_len = 0; + uint32_t i = 0; + int rc; - // remaining length of SUBSCRIBE packet = packet type(2 byte) + count * (remaining length(2 byte) + topicLen + qos(1 byte)) + // remaining length of SUBSCRIBE packet = packet type(2 byte) + count * (remaining length(2 byte) + topicLen + qos(1 + // byte)) rem_len = _get_subscribe_packet_rem_len(count, topicFilters); if (get_mqtt_packet_len(rem_len) > buf_len) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); @@ -82,16 +86,16 @@ static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8 // payload for (i = 0; i < count; ++i) { mqtt_write_utf8_string(&ptr, *topicFilters + i); - mqtt_write_char(&ptr, (unsigned char) requestedQoSs[i]); + mqtt_write_char(&ptr, (unsigned char)requestedQoSs[i]); } - *serialized_len = (uint32_t) (ptr - buf); + *serialized_len = (uint32_t)(ptr - buf); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, SubscribeParams *pParams) { - +int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, SubscribeParams *pParams) +{ IOT_FUNC_ENTRY; int rc; @@ -100,12 +104,12 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub // POINTER_SANITY_CHECK(pParams->on_message_handler, QCLOUD_ERR_INVAL); STRING_PTR_SANITY_CHECK(topicFilter, QCLOUD_ERR_INVAL); - Timer timer; - uint32_t len = 0; + Timer timer; + uint32_t len = 0; uint16_t packet_id = 0; ListNode *node = NULL; - + size_t topicLen = strlen(topicFilter); if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); @@ -115,7 +119,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub Log_e("QoS2 is not supported currently"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_QOS_NOT_SUPPORT); } - + if (!get_client_conn_state(pClient)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN) } @@ -126,10 +130,10 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub Log_e("malloc failed"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - + strcpy(topic_filter_stored, topicFilter); topic_filter_stored[topicLen] = 0; - + InitTimer(&timer); countdown_ms(&timer, pClient->command_timeout_ms); @@ -140,17 +144,17 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub rc = _serialize_subscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, &topic_filter_stored, &pParams->qos, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } /* add node into sub ack wait list */ SubTopicHandle sub_handle; - sub_handle.topic_filter = topic_filter_stored; - sub_handle.message_handler = pParams->on_message_handler; + sub_handle.topic_filter = topic_filter_stored; + sub_handle.message_handler = pParams->on_message_handler; sub_handle.sub_event_handler = pParams->on_sub_event_handler; - sub_handle.qos = pParams->qos; + sub_handle.qos = pParams->qos; sub_handle.handler_user_data = pParams->user_data; rc = push_sub_info_to(pClient, len, (unsigned int)packet_id, SUBSCRIBE, &sub_handle, &node); @@ -160,7 +164,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } - + // send SUBSCRIBE packet rc = send_mqtt_packet(pClient, len, &timer); if (QCLOUD_RET_SUCCESS != rc) { @@ -168,8 +172,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub list_remove(pClient->list_sub_wait_ack, node); HAL_MutexUnlock(pClient->lock_list_sub); - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -178,14 +182,15 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub IOT_FUNC_EXIT_RC(packet_id); } -int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - uint32_t itr = 0; - char *topic = NULL; + uint32_t itr = 0; + char * topic = NULL; SubscribeParams temp_param; if (NULL == pClient) { @@ -197,18 +202,18 @@ int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { } for (itr = 0; itr < MAX_MESSAGE_HANDLERS; itr++) { - topic = (char *) pClient->sub_handles[itr].topic_filter; + topic = (char *)pClient->sub_handles[itr].topic_filter; if (topic == NULL) { continue; } - temp_param.on_message_handler = pClient->sub_handles[itr].message_handler; + temp_param.on_message_handler = pClient->sub_handles[itr].message_handler; temp_param.on_sub_event_handler = pClient->sub_handles[itr].sub_event_handler; - temp_param.qos = pClient->sub_handles[itr].qos; - temp_param.user_data = pClient->sub_handles[itr].handler_user_data; + temp_param.qos = pClient->sub_handles[itr].qos; + temp_param.user_data = pClient->sub_handles[itr].handler_user_data; rc = qcloud_iot_mqtt_subscribe(pClient, topic, &temp_param); if (rc < 0) { - Log_e("resubscribe failed %d, topic: %s", rc, topic); + Log_e("resubscribe failed %d, topic: %s", rc, topic); IOT_FUNC_EXIT_RC(rc); } } @@ -216,6 +221,31 @@ int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } +bool qcloud_iot_mqtt_is_sub_ready(Qcloud_IoT_Client *pClient, char *topicFilter) +{ + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(pClient, false); + STRING_PTR_SANITY_CHECK(topicFilter, false); + + size_t topicLen = strlen(topicFilter); + if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { + return false; + } + + int i = 0; + HAL_MutexLock(pClient->lock_generic); + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { + if ((pClient->sub_handles[i].topic_filter != NULL && + !strcmp(pClient->sub_handles[i].topic_filter, topicFilter)) || + strstr(topicFilter, "/#") != NULL || strstr(topicFilter, "/+") != NULL) { + HAL_MutexUnlock(pClient->lock_generic); + return true; + } + } + HAL_MutexUnlock(pClient->lock_generic); + return false; +} + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c similarity index 66% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c index 75357f13..d327c31d 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c @@ -23,12 +23,13 @@ extern "C" { #include "mqtt_client.h" /** - * Determines the length of the MQTT unsubscribe packet that would be produced using the supplied parameters - * @param count the number of topic filter strings in topicFilters - * @param topicFilters the array of topic filter strings to be used in the publish - * @return the length of buffer needed to contain the serialized version of the packet - */ -static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilters) { + * Determines the length of the MQTT unsubscribe packet that would be produced using the supplied parameters + * @param count the number of topic filter strings in topicFilters + * @param topicFilters the array of topic filter strings to be used in the publish + * @return the length of buffer needed to contain the serialized version of the packet + */ +static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilters) +{ size_t i; size_t len = 2; /* packetid */ @@ -36,34 +37,33 @@ static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilt len += 2 + strlen(*topicFilters + i); /* length + topic*/ } - return (uint32_t) len; + return (uint32_t)len; } /** - * Serializes the supplied unsubscribe data into the supplied buffer, ready for sending - * @param buf the raw buffer data, of the correct length determined by the remaining length field - * @param buf_len the length in bytes of the data in the supplied buffer - * @param dup integer - the MQTT dup flag - * @param packet_id integer - the MQTT packet identifier - * @param count - number of members in the topicFilters array - * @param topicFilters - array of topic filter names - * @param serialized_len - the length of the serialized data - * @return int indicating function execution status - */ -static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, - uint8_t dup, uint16_t packet_id, - uint32_t count, char **topicFilters, - uint32_t *serialized_len) { + * Serializes the supplied unsubscribe data into the supplied buffer, ready for sending + * @param buf the raw buffer data, of the correct length determined by the remaining length field + * @param buf_len the length in bytes of the data in the supplied buffer + * @param dup integer - the MQTT dup flag + * @param packet_id integer - the MQTT packet identifier + * @param count - number of members in the topicFilters array + * @param topicFilters - array of topic filter names + * @param serialized_len - the length of the serialized data + * @return int indicating function execution status + */ +static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, uint8_t dup, uint16_t packet_id, + uint32_t count, char **topicFilters, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); - unsigned char *ptr = buf; - unsigned char header = 0; - uint32_t rem_len = 0; - uint32_t i = 0; - int rc; + unsigned char *ptr = buf; + unsigned char header = 0; + uint32_t rem_len = 0; + uint32_t i = 0; + int rc; rem_len = _get_unsubscribe_packet_rem_len(count, topicFilters); if (get_mqtt_packet_len(rem_len) > buf_len) { @@ -84,23 +84,24 @@ static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, mqtt_write_utf8_string(&ptr, *topicFilters + i); } - *serialized_len = (uint32_t) (ptr - buf); + *serialized_len = (uint32_t)(ptr - buf); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { +int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) +{ IOT_FUNC_ENTRY; int rc; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); STRING_PTR_SANITY_CHECK(topicFilter, QCLOUD_ERR_INVAL); - int i = 0; - Timer timer; - uint32_t len = 0; - uint16_t packet_id = 0; - bool suber_exists = false; + int i = 0; + Timer timer; + uint32_t len = 0; + uint16_t packet_id = 0; + bool suber_exists = false; ListNode *node = NULL; @@ -108,16 +109,17 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); } - + /* Remove from message handler array */ HAL_MutexLock(pClient->lock_generic); - for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { - if ((pClient->sub_handles[i].topic_filter != NULL && !strcmp(pClient->sub_handles[i].topic_filter, topicFilter)) - || strstr(topicFilter,"/#") != NULL || strstr(topicFilter,"/+") != NULL) { + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { + if ((pClient->sub_handles[i].topic_filter != NULL && + !strcmp(pClient->sub_handles[i].topic_filter, topicFilter)) || + strstr(topicFilter, "/#") != NULL || strstr(topicFilter, "/+") != NULL) { /* notify this event to topic subscriber */ if (NULL != pClient->sub_handles[i].sub_event_handler) - pClient->sub_handles[i].sub_event_handler( - pClient, MQTT_EVENT_UNSUBSCRIBE, pClient->sub_handles[i].handler_user_data); + pClient->sub_handles[i].sub_event_handler(pClient, MQTT_EVENT_UNSUBSCRIBE, + pClient->sub_handles[i].handler_user_data); /* Free the topic filter malloced in qcloud_iot_mqtt_subscribe */ HAL_Free((void *)pClient->sub_handles[i].topic_filter); @@ -153,18 +155,18 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { HAL_MutexLock(pClient->lock_write_buf); packet_id = get_next_packet_id(pClient); - rc = _serialize_unsubscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, &topic_filter_stored, - &len); + rc = _serialize_unsubscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, + &topic_filter_stored, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } SubTopicHandle sub_handle; - sub_handle.topic_filter = topic_filter_stored; + sub_handle.topic_filter = topic_filter_stored; sub_handle.sub_event_handler = NULL; - sub_handle.message_handler = NULL; + sub_handle.message_handler = NULL; sub_handle.handler_user_data = NULL; rc = push_sub_info_to(pClient, len, (unsigned int)packet_id, UNSUBSCRIBE, &sub_handle, &node); @@ -182,8 +184,8 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { list_remove(pClient->list_sub_wait_ack, node); HAL_MutexUnlock(pClient->lock_list_sub); - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c similarity index 82% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c index 107a4512..e29763ea 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/protocol/mqtt/mqtt_client_yield.c @@ -18,37 +18,34 @@ extern "C" { #endif -#include "mqtt_client.h" #include "log_upload.h" +#include "mqtt_client.h" #include "qcloud_iot_import.h" - static uint32_t _get_random_interval(void) { srand((unsigned)HAL_GetTimeMs()); /* range: 1000 - 2000 ms, in 10ms unit */ - return (rand() % 100 + 100)*10; + return (rand() % 100 + 100) * 10; } - static void _iot_disconnect_callback(Qcloud_IoT_Client *pClient) { - if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; msg.event_type = MQTT_EVENT_DISCONNECT; - msg.msg = NULL; + msg.msg = NULL; pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } } -static void _reconnect_callback(Qcloud_IoT_Client* pClient) +static void _reconnect_callback(Qcloud_IoT_Client *pClient) { if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; msg.event_type = MQTT_EVENT_RECONNECT; - msg.msg = NULL; + msg.msg = NULL; pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } @@ -60,10 +57,11 @@ static void _reconnect_callback(Qcloud_IoT_Client* pClient) * @param pClient * @return */ -static int _handle_disconnect(Qcloud_IoT_Client *pClient) { +static int _handle_disconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; - + if (0 == get_client_conn_state(pClient)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } @@ -76,7 +74,7 @@ static int _handle_disconnect(Qcloud_IoT_Client *pClient) { } Log_e("disconnect MQTT for some reasons.."); - + _iot_disconnect_callback(pClient); // exceptional disconnection @@ -90,11 +88,12 @@ static int _handle_disconnect(Qcloud_IoT_Client *pClient) { * @param pClient * @return */ -static int _handle_reconnect(Qcloud_IoT_Client *pClient) { +static int _handle_reconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int8_t isPhysicalLayerConnected = 1; - int rc = QCLOUD_RET_MQTT_RECONNECTED; + int rc = QCLOUD_RET_MQTT_RECONNECTED; // reconnect control by delay timer (increase interval exponentially ) if (!expired(&(pClient->reconnect_delay_timer))) { @@ -102,7 +101,8 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { } if (NULL != pClient->network_stack.is_connected) { - isPhysicalLayerConnected = (int8_t) pClient->network_stack.is_connected(&(pClient->network_stack)); // always return 1 + isPhysicalLayerConnected = + (int8_t)pClient->network_stack.is_connected(&(pClient->network_stack)); // always return 1 } if (isPhysicalLayerConnected) { @@ -112,15 +112,14 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { _reconnect_callback(pClient); #ifdef LOG_UPLOAD if (is_log_uploader_init()) { - int log_level; + int log_level; if (qcloud_get_log_level(pClient, &log_level) < 0) { Log_e("client get log topic failed: %d", rc); } } -#endif +#endif IOT_FUNC_EXIT_RC(rc); - } - else { + } else { Log_e("attempt to reconnect failed, errCode: %d", rc); rc = QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT; } @@ -144,12 +143,12 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { */ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) { -#define MQTT_PING_RETRY_TIMES 2 +#define MQTT_PING_RETRY_TIMES 2 IOT_FUNC_ENTRY; - int rc; - Timer timer; + int rc; + Timer timer; uint32_t serialized_len = 0; if (0 == pClient->options.keep_alive_interval) { @@ -161,13 +160,13 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) } if (pClient->is_ping_outstanding >= MQTT_PING_RETRY_TIMES) { - //Reaching here means we haven't received any MQTT packet for a long time (keep_alive_interval) + // Reaching here means we haven't received any MQTT packet for a long time (keep_alive_interval) Log_e("Fail to recv MQTT msg. Something wrong with the connection."); rc = _handle_disconnect(pClient); IOT_FUNC_EXIT_RC(rc); } - /* there is no ping outstanding - send one */ + /* there is no ping outstanding - send one */ HAL_MutexLock(pClient->lock_write_buf); rc = serialize_packet_with_zero_payload(pClient->write_buf, pClient->write_buf_size, PINGREQ, &serialized_len); if (QCLOUD_RET_SUCCESS != rc) { @@ -177,25 +176,26 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) /* send the ping packet */ int i = 0; - InitTimer(&timer); + InitTimer(&timer); do { countdown_ms(&timer, pClient->command_timeout_ms); rc = send_mqtt_packet(pClient, serialized_len, &timer); } while (QCLOUD_RET_SUCCESS != rc && (i++ < 3)); - + if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - //If sending a PING fails, propably the connection is not OK and we decide to disconnect and begin reconnection attempts + HAL_MutexUnlock(pClient->lock_write_buf); + // If sending a PING fails, propably the connection is not OK and we decide to disconnect and begin reconnection + // attempts Log_e("Fail to send PING request. Something wrong with the connection."); rc = _handle_disconnect(pClient); IOT_FUNC_EXIT_RC(rc); } HAL_MutexUnlock(pClient->lock_write_buf); - + HAL_MutexLock(pClient->lock_generic); pClient->is_ping_outstanding++; /* start a timer to wait for PINGRESP from server */ - countdown(&pClient->ping_timer, Min(5, pClient->options.keep_alive_interval/2)); + countdown(&pClient->ping_timer, Min(5, pClient->options.keep_alive_interval / 2)); HAL_MutexUnlock(pClient->lock_generic); Log_d("PING request %u has been sent...", pClient->is_ping_outstanding); @@ -208,13 +208,15 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) * @param pClient handle to MQTT client * @param timeout_ms timeout value (unit: ms) for this operation * - * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for failure + * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for + * failure */ -int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { +int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) +{ IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - Timer timer; + int rc = QCLOUD_RET_SUCCESS; + Timer timer; uint8_t packet_type; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -234,8 +236,7 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { countdown_ms(&timer, timeout_ms); // 3. main loop for packet reading/handling and keep alive maintainance - while (!expired(&timer)) { - + while (!expired(&timer)) { if (!get_client_conn_state(pClient)) { if (pClient->current_reconnect_wait_interval > MAX_RECONNECT_WAIT_INTERVAL) { rc = QCLOUD_ERR_MQTT_RECONNECT_TIMEOUT; @@ -244,7 +245,7 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { rc = _handle_reconnect(pClient); continue; - } + } rc = cycle_for_read(pClient, &timer, &packet_type, QOS0); @@ -256,11 +257,10 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { qcloud_iot_mqtt_sub_info_proc(pClient); rc = _mqtt_keep_alive(pClient); - } - else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_SSL_READ || - rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN || rc == QCLOUD_ERR_TCP_READ_FAIL){ - Log_e("network read failed, rc: %d. MQTT Disconnect.", rc); - rc = _handle_disconnect(pClient); + } else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_SSL_READ || + rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN || rc == QCLOUD_ERR_TCP_READ_FAIL) { + Log_e("network read failed, rc: %d. MQTT Disconnect.", rc); + rc = _handle_disconnect(pClient); } if (rc == QCLOUD_ERR_MQTT_NO_CONN) { @@ -283,6 +283,23 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { IOT_FUNC_EXIT_RC(rc); } +// workaround wrapper for qcloud_iot_mqtt_yield for multi-thread mode +int qcloud_iot_mqtt_yield_mt(Qcloud_IoT_Client *mqtt_client, uint32_t timeout_ms) +{ + POINTER_SANITY_CHECK(mqtt_client, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + +#ifdef MULTITHREAD_ENABLED + /* only one instance of yield is allowed in running state*/ + if (mqtt_client->thread_running) { + HAL_SleepMs(timeout_ms); + return QCLOUD_RET_SUCCESS; + } +#endif + + return qcloud_iot_mqtt_yield(mqtt_client, timeout_ms); +} + /** * @brief puback waiting timeout process * @@ -295,7 +312,6 @@ int qcloud_iot_mqtt_pub_info_proc(Qcloud_IoT_Client *pClient) POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - HAL_MutexLock(pClient->lock_list_pub); do { if (0 == pClient->list_pub_wait_ack->len) { @@ -303,8 +319,8 @@ int qcloud_iot_mqtt_pub_info_proc(Qcloud_IoT_Client *pClient) } ListIterator *iter; - ListNode *node = NULL; - ListNode *temp_node = NULL; + ListNode * node = NULL; + ListNode * temp_node = NULL; if (NULL == (iter = list_iterator_new(pClient->list_pub_wait_ack, LIST_TAIL))) { Log_e("new list failed"); @@ -323,7 +339,7 @@ int qcloud_iot_mqtt_pub_info_proc(Qcloud_IoT_Client *pClient) break; /* end of list */ } - QcloudIotPubInfo *repubInfo = (QcloudIotPubInfo *) node->val; + QcloudIotPubInfo *repubInfo = (QcloudIotPubInfo *)node->val; if (NULL == repubInfo) { Log_e("node's value is invalid!"); temp_node = node; @@ -357,7 +373,7 @@ int qcloud_iot_mqtt_pub_info_proc(Qcloud_IoT_Client *pClient) if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; msg.event_type = MQTT_EVENT_PUBLISH_TIMEOUT; - msg.msg = (void *)(uintptr_t)repubInfo->msg_id; + msg.msg = (void *)(uintptr_t)repubInfo->msg_id; pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); } } @@ -393,10 +409,10 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) } ListIterator *iter; - ListNode *node = NULL; - ListNode *temp_node = NULL; - uint16_t packet_id = 0; - MessageTypes msg_type; + ListNode * node = NULL; + ListNode * temp_node = NULL; + uint16_t packet_id = 0; + MessageTypes msg_type; if (NULL == (iter = list_iterator_new(pClient->list_sub_wait_ack, LIST_TAIL))) { Log_e("new list failed"); @@ -416,7 +432,7 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) break; /* end of list */ } - QcloudIotSubInfo *sub_info = (QcloudIotSubInfo *) node->val; + QcloudIotSubInfo *sub_info = (QcloudIotSubInfo *)node->val; if (NULL == sub_info) { Log_e("node's value is invalid!"); temp_node = node; @@ -440,7 +456,7 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) /* When arrive here, it means timeout to wait ACK */ packet_id = sub_info->msg_id; - msg_type = sub_info->type; + msg_type = sub_info->type; /* Wait MQTT SUBSCRIBE ACK timeout */ if (NULL != pClient->event_handle.h_fp) { @@ -449,17 +465,17 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) if (SUBSCRIBE == msg_type) { /* subscribe timeout */ msg.event_type = MQTT_EVENT_SUBCRIBE_TIMEOUT; - msg.msg = (void *)(uintptr_t)packet_id; + msg.msg = (void *)(uintptr_t)packet_id; /* notify this event to topic subscriber */ if (NULL != sub_info->handler.sub_event_handler) - sub_info->handler.sub_event_handler(pClient, - MQTT_EVENT_SUBCRIBE_TIMEOUT, sub_info->handler.handler_user_data); - - } else { + sub_info->handler.sub_event_handler(pClient, MQTT_EVENT_SUBCRIBE_TIMEOUT, + sub_info->handler.handler_user_data); + + } else { /* unsubscribe timeout */ msg.event_type = MQTT_EVENT_UNSUBCRIBE_TIMEOUT; - msg.msg = (void *)(uintptr_t)packet_id; + msg.msg = (void *)(uintptr_t)packet_id; } pClient->event_handle.h_fp(pClient, pClient->event_handle.context, &msg); @@ -467,7 +483,7 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) if (NULL != sub_info->handler.topic_filter) HAL_Free((void *)(sub_info->handler.topic_filter)); - + temp_node = node; } diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/dynreg/dynreg.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/dynreg/dynreg.c new file mode 100644 index 00000000..585f2910 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/dynreg/dynreg.c @@ -0,0 +1,496 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#include "lite-utils.h" +#include "qcloud_iot_ca.h" +#include "qcloud_iot_common.h" +#include "qcloud_iot_device.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "utils_aes.h" +#include "utils_base64.h" +#include "utils_hmac.h" +#include "utils_httpc.h" + +#define REG_URL_MAX_LEN (128) +#define DYN_REG_SIGN_LEN (64) +#define DYN_BUFF_DATA_MORE (10) +#define BASE64_ENCODE_OUT_LEN(x) (((x + 3) * 4) / 3) +#define DYN_REG_RES_HTTP_TIMEOUT_MS (2000) + +#ifdef AUTH_MODE_CERT +#define DYN_RESPONSE_BUFF_LEN (5 * 1024) +#define DECODE_BUFF_LEN (5 * 1024) +#else +#define DYN_RESPONSE_BUFF_LEN (256) +#define DECODE_BUFF_LEN (256) +#endif + +/* Knuth's TAOCP section 3.6 */ +#define M ((1U << 31) - 1) +#define A 48271 +#define Q 44488 // M/A +#define R 3399 // M%A; R < Q !!! + +#define CODE_RESAULT "code" +#define ENCRYPT_TYPE "encryptionType" +#define PSK_DATA "psk" +#define CERT_DATA "clientCert" +#define KEY_DATA "clientKey" + +typedef enum { + eCERT_TYPE = 1, + ePSK_TYPE = 2, +} eAuthType; + +/*Global value*/ +static unsigned int _seed = 1; + +int rand_r(unsigned int *seed) +{ + int32_t X; + + X = *seed; + X = A * (X % Q) - R * (int32_t)(X / Q); + if (X < 0) + X += M; + + *seed = X; + return X; +} + +int rand_d(void) +{ + return rand_r(&_seed); +} + +void srand_d(unsigned int i) +{ + _seed = i; +} + +static int _get_json_resault_code(char *json) +{ + int resault = -1; + char *v = LITE_json_value_of(CODE_RESAULT, json); + + if (v == NULL) { + Log_e("Invalid json content: %s", json); + return -1; + } + + if (LITE_get_int32(&resault, v) != QCLOUD_RET_SUCCESS) { + Log_e("Invalid json content: %s", json); + HAL_Free(v); + return -1; + } + + HAL_Free(v); + + return resault; +} + +static int _get_json_encry_type(char *json) +{ + int type = -1; + char *v = LITE_json_value_of(ENCRYPT_TYPE, json); + + if (v == NULL) { + Log_e("Get encry type fail, %s", json); + return -1; + } + + if (LITE_get_int32(&type, v) != QCLOUD_RET_SUCCESS) { + Log_e("Invalid json content: %s", json); + HAL_Free(v); + return -1; + } + + HAL_Free(v); + + return type; +} + +#ifndef AUTH_MODE_CERT + +static char *_get_json_psk(char *json) +{ + char *psk = LITE_json_value_of(PSK_DATA, json); + + if (psk == NULL) { + Log_e("Get psk fail: %s", json); + } + + return psk; +} + +#else +static char *_get_json_cert_data(char *json) +{ + char *cert = LITE_json_value_of(CERT_DATA, json); + + if (cert == NULL) { + Log_e("Get clientCert fail: %s", json); + } + + return cert; +} + +static char *_get_json_key_data(char *json) +{ + char *key = LITE_json_value_of(KEY_DATA, json); + + if (key == NULL) { + Log_e("Get clientCert fail: %s", json); + } + + return key; +} + +/*\\n in data change to '\n'*/ +static void _deal_transfer(char *data, uint32_t dataLen) +{ + int i; + + for (i = 0; i < dataLen; i++) { + if ((data[i] == '\\') && (data[i + 1] == 'n')) { + data[i] = ' '; + data[i + 1] = '\n'; + } + } +} + +static int _cert_file_save(const char *fileName, char *data, uint32_t dataLen) +{ + FILE * fp; + char filePath[FILE_PATH_MAX_LEN]; + uint32_t len; + int Ret = QCLOUD_ERR_FAILURE; + + memset(filePath, 0, FILE_PATH_MAX_LEN); + HAL_Snprintf(filePath, FILE_PATH_MAX_LEN, "./certs/%s", fileName); + + if ((fp = fopen(filePath, "w+")) == NULL) { + Log_e("fail to open file %s", fileName); + goto exit; + } + + _deal_transfer(data, dataLen); + len = fprintf(fp, "%s", data); + fclose(fp); + + if (len == dataLen) { + Log_d("save %s file succes", fileName); + Ret = QCLOUD_RET_SUCCESS; + } + +exit: + return Ret; +} + +#endif + +static int _parse_devinfo(char *jdoc, DeviceInfo *pDevInfo) +{ + int ret = 0; + size_t len; + int datalen; + int enType; + unsigned int keybits; + char key[UTILS_AES_BLOCK_LEN + 1]; + char decodeBuff[DECODE_BUFF_LEN] = {0}; + unsigned char iv[16]; + char * payload = NULL; + +#ifdef AUTH_MODE_CERT + char *clientCert; + char *clientKey; +#else + char *psk; +#endif + + Log_d("recv: %s", jdoc); + + ret = _get_json_resault_code(jdoc); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("response err, ret:%d", ret); + goto exit; + } + + payload = LITE_json_value_of("payload", jdoc); + if (payload == NULL) { + Log_e("Invalid json content: %s", jdoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } else { + Log_d("payload:%s", payload); + } + + ret = qcloud_iot_utils_base64decode((uint8_t *)decodeBuff, sizeof(decodeBuff), &len, (uint8_t *)payload, + strlen(payload)); + if (ret != QCLOUD_RET_SUCCESS) { + Log_e("Response decode err, response:%s", payload); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + datalen = len + (UTILS_AES_BLOCK_LEN - len % UTILS_AES_BLOCK_LEN); + keybits = AES_KEY_BITS_128; + memset(key, 0, UTILS_AES_BLOCK_LEN); + strncpy(key, pDevInfo->product_secret, UTILS_AES_BLOCK_LEN); + memset(iv, '0', UTILS_AES_BLOCK_LEN); + ret = utils_aes_cbc((uint8_t *)decodeBuff, datalen, (uint8_t *)decodeBuff, DECODE_BUFF_LEN, UTILS_AES_DECRYPT, + (uint8_t *)key, keybits, iv); + if (QCLOUD_RET_SUCCESS == ret) { + // Log_d("The decrypted data is:%s", decodeBuff); + + } else { + Log_e("data decry err,ret:%d", ret); + goto exit; + } + + enType = _get_json_encry_type(decodeBuff); + if (enType < 0) { + Log_e("invlid encryt type, decrypt maybe faild"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + +#ifdef AUTH_MODE_CERT + if (eCERT_TYPE != enType) { + Log_e("encryt type should be cert type"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + clientCert = _get_json_cert_data(decodeBuff); + if (NULL != clientCert) { + memset(pDevInfo->dev_cert_file_name, 0, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + HAL_Snprintf(pDevInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME, "%s_cert.crt", + pDevInfo->device_name); + if (QCLOUD_RET_SUCCESS != _cert_file_save(pDevInfo->dev_cert_file_name, clientCert, strlen(clientCert))) { + Log_e("save %s file fail", pDevInfo->dev_cert_file_name); + ret = QCLOUD_ERR_FAILURE; + } + + HAL_Free(clientCert); + + } else { + Log_e("Get clientCert data fail"); + ret = QCLOUD_ERR_FAILURE; + } + + clientKey = _get_json_key_data(decodeBuff); + if (NULL != clientKey) { + memset(pDevInfo->dev_key_file_name, 0, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + HAL_Snprintf(pDevInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME, "%s_private.key", + pDevInfo->device_name); + if (QCLOUD_RET_SUCCESS != _cert_file_save(pDevInfo->dev_key_file_name, clientKey, strlen(clientKey))) { + Log_e("save %s file fail", pDevInfo->dev_key_file_name); + ret = QCLOUD_ERR_FAILURE; + } + + HAL_Free(clientKey); + + } else { + Log_e("Get clientCert data fail"); + ret = QCLOUD_ERR_FAILURE; + } + +#else + if (ePSK_TYPE != enType) { + Log_e("encryt type should be psk type"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + psk = _get_json_psk(decodeBuff); + if (NULL != psk) { + if (strlen(psk) > MAX_SIZE_OF_DEVICE_SECRET) { + Log_e("psk exceed max len,%s", psk); + strcpy(pDevInfo->device_secret, psk); + } else { + strncpy(pDevInfo->device_secret, psk, MAX_SIZE_OF_DEVICE_SECRET); + pDevInfo->device_secret[MAX_SIZE_OF_DEVICE_SECRET] = '\0'; + } + HAL_Free(psk); + } else { + Log_e("Get psk data fail"); + } +#endif +exit: + + if (payload) { + HAL_Free(payload); + } + + return ret; +} + +static int _post_reg_request_by_http(char *request_buf, DeviceInfo *pDevInfo) +{ + int Ret = 0; + HTTPClient http_client; /* http client */ + HTTPClientData http_data; /* http client data */ + + const char *url_format = "%s://%s/register/dev"; + char url[REG_URL_MAX_LEN] = {0}; + int port; + const char *ca_crt = NULL; + char respbuff[DYN_RESPONSE_BUFF_LEN]; + + /*format URL*/ +#ifndef AUTH_WITH_NOTLS + HAL_Snprintf(url, REG_URL_MAX_LEN, url_format, "https", DYN_REG_SERVER_URL); + port = DYN_REG_SERVER_PORT_TLS; + ca_crt = iot_ca_get(); +#else + HAL_Snprintf(url, REG_URL_MAX_LEN, url_format, "http", DYN_REG_SERVER_URL); + port = DYN_REG_SERVER_PORT; +#endif + + memset((char *)&http_client, 0, sizeof(HTTPClient)); + memset((char *)&http_data, 0, sizeof(HTTPClientData)); + + http_client.header = "Accept: text/xml,application/json;*/*\r\n"; + + http_data.post_content_type = "application/x-www-form-urlencoded"; + http_data.post_buf = request_buf; + http_data.post_buf_len = strlen(request_buf); + + Ret = qcloud_http_client_common(&http_client, url, port, ca_crt, HTTP_POST, &http_data); + if (QCLOUD_RET_SUCCESS != Ret) { + Log_e("qcloud_http_client_common failed, Ret = %d", Ret); + return Ret; + } + + memset(respbuff, 0, DYN_RESPONSE_BUFF_LEN); + http_data.response_buf_len = DYN_RESPONSE_BUFF_LEN; + http_data.response_buf = respbuff; + + Ret = qcloud_http_recv_data(&http_client, DYN_REG_RES_HTTP_TIMEOUT_MS, &http_data); + if (QCLOUD_RET_SUCCESS != Ret) { + Log_e("dynamic register response fail, Ret = %d", Ret); + } else { + /*Parse dev info*/ + Ret = _parse_devinfo(http_data.response_buf, pDevInfo); + if (QCLOUD_RET_SUCCESS != Ret) { + Log_e("parse device info err"); + } + } + + qcloud_http_client_close(&http_client); + + return Ret; +} + +static int _cal_dynreg_sign(DeviceInfo *pDevInfo, char *signout, int max_signlen, int nonce, uint32_t timestamp) +{ + int sign_len; + size_t olen = 0; + char * pSignSource = NULL; + const char *sign_fmt = "deviceName=%s&nonce=%d&productId=%s×tamp=%d"; + char sign[DYN_REG_SIGN_LEN] = {0}; + + /*format sign data*/ + sign_len = strlen(sign_fmt) + strlen(pDevInfo->device_name) + strlen(pDevInfo->product_id) + sizeof(int) + + sizeof(uint32_t) + DYN_BUFF_DATA_MORE; + pSignSource = HAL_Malloc(sign_len); + if (pSignSource == NULL) { + Log_e("malloc sign source buff fail"); + return QCLOUD_ERR_FAILURE; + } + memset(pSignSource, 0, sign_len); + HAL_Snprintf((char *)pSignSource, sign_len, sign_fmt, pDevInfo->device_name, nonce, pDevInfo->product_id, + timestamp); + + /*cal hmac sha1*/ + utils_hmac_sha1(pSignSource, strlen(pSignSource), sign, pDevInfo->product_secret, strlen(pDevInfo->product_secret)); + + /*base64 encode*/ + qcloud_iot_utils_base64encode((uint8_t *)signout, max_signlen, &olen, (const uint8_t *)sign, strlen(sign)); + + HAL_Free(pSignSource); + + return (olen > max_signlen) ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; +} + +int IOT_DynReg_Device(DeviceInfo *pDevInfo) +{ + const char *para_format = + "{\"deviceName\":\"%s\",\"nonce\":%d,\"productId\":\"%s\",\"timestamp\":%d,\"signature\":\"%s\"}"; + int nonce; + int Ret; + uint32_t timestamp; + int len; + char sign[DYN_REG_SIGN_LEN] = {0}; + char * pRequest = NULL; + + if (strlen(pDevInfo->product_secret) < UTILS_AES_BLOCK_LEN) { + Log_e("product key inllegal"); + return QCLOUD_ERR_FAILURE; + } + + srand_d(HAL_GetTimeMs()); + nonce = rand_d(); + timestamp = time(0); + + /*cal sign*/ + if (QCLOUD_RET_SUCCESS == _cal_dynreg_sign(pDevInfo, sign, DYN_REG_SIGN_LEN, nonce, timestamp)) { + Log_d("sign:%s", sign); + } else { + Log_e("cal sign fail"); + return QCLOUD_ERR_FAILURE; + } + + /*format http request*/ + len = strlen(para_format) + strlen(pDevInfo->product_id) + strlen(pDevInfo->device_name) + sizeof(int) + + sizeof(uint32_t) + strlen(sign) + DYN_BUFF_DATA_MORE; + pRequest = HAL_Malloc(len); + if (!pRequest) { + Log_e("malloc request memory fail"); + return QCLOUD_ERR_FAILURE; + } + memset(pRequest, 0, len); + HAL_Snprintf(pRequest, len, para_format, pDevInfo->device_name, nonce, pDevInfo->product_id, timestamp, sign); + Log_d("request:%s", pRequest); + + Log_d("resbuff len:%d", DYN_RESPONSE_BUFF_LEN); + /*post request*/ + Ret = _post_reg_request_by_http(pRequest, pDevInfo); + if (QCLOUD_RET_SUCCESS == Ret) { + Log_d("request dev info success"); + } else { + Log_e("request dev info fail"); + } + + HAL_Free(pRequest); + + return Ret; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c new file mode 100644 index 00000000..0ec94690 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_api.c @@ -0,0 +1,318 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include + +#include "gateway_common.h" +#include "mqtt_client.h" +#include "utils_param_check.h" + +void _gateway_event_handler(void *client, void *context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + Gateway * gateway = (Gateway *)context; + + POINTER_SANITY_CHECK_RTN(context); + POINTER_SANITY_CHECK_RTN(msg); + MQTTMessage *topic_info = (MQTTMessage *)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_d("gateway sub|unsub(%d) success, packet-id=%u", msg->event_type, (unsigned int)packet_id); + if (gateway->gateway_data.sync_status == packet_id) { + gateway->gateway_data.sync_status = 0; + return; + } + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_d("gateway timeout|nack(%d) event, packet-id=%u", msg->event_type, (unsigned int)packet_id); + if (gateway->gateway_data.sync_status == packet_id) { + gateway->gateway_data.sync_status = -1; + return; + } + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_d("gateway topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + topic_info->topic_len, topic_info->ptopic, topic_info->payload_len, topic_info->payload); + break; + + default: + break; + } + + if (gateway->event_handle.h_fp != NULL) { + gateway->event_handle.h_fp(client, gateway->event_handle.context, msg); + } + + return; +} + +void *IOT_Gateway_Construct(GatewayInitParam *init_param) +{ + int rc = 0; + GatewayParam param = DEFAULT_GATEWAY_PARAMS; + POINTER_SANITY_CHECK(init_param, NULL); + + Gateway *gateway = (Gateway *)HAL_Malloc(sizeof(Gateway)); + if (gateway == NULL) { + Log_e("gateway malloc failed"); + IOT_FUNC_EXIT_RC(NULL); + } + + memset(gateway, 0, sizeof(Gateway)); + + /* replace user event handle */ + gateway->event_handle.h_fp = init_param->init_param.event_handle.h_fp; + gateway->event_handle.context = init_param->init_param.event_handle.context; + + /* set _gateway_event_handler as mqtt event handle */ + init_param->init_param.event_handle.h_fp = _gateway_event_handler; + init_param->init_param.event_handle.context = gateway; + + /* construct MQTT client */ + gateway->mqtt = IOT_MQTT_Construct(&init_param->init_param); + if (NULL == gateway->mqtt) { + Log_e("construct MQTT failed"); + HAL_Free(gateway); + IOT_FUNC_EXIT_RC(NULL); + } + + /* subscribe default topic */ + param.product_id = init_param->init_param.product_id; + param.device_name = init_param->init_param.device_name; + rc = gateway_subscribe_unsubscribe_default(gateway, ¶m); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("subscribe default topic failed"); + IOT_Gateway_Destroy((void *)gateway); + IOT_FUNC_EXIT_RC(NULL); + } + + return (void *)gateway; +} + +int IOT_Gateway_Subdev_Online(void *client, GatewayParam *param) +{ + int rc = 0; + char topic[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + char payload[GATEWAY_PAYLOAD_BUFFER_LEN + 1] = {0}; + int size = 0; + SubdevSession *session = NULL; + PublishParams params = DEFAULT_PUB_PARAMS; + Gateway * gateway = (Gateway *)client; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); + + session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_d("there is no session, create a new session"); + + /* create subdev session */ + session = subdev_add_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_e("create session error!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_CREATE_SESSION_FAIL); + } + } else { + if (SUBDEV_SEESION_STATUS_ONLINE == session->session_status) { + Log_i("device have online"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_ONLINE); + } + } + + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, + param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN + 1, GATEWAY_PAYLOAD_STATUS_FMT, "online", + param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) { + Log_e("buf size < payload length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(gateway->gateway_data.online.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, + param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("buf size < client_id length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + gateway->gateway_data.online.result = -1; + + params.qos = QOS0; + params.payload_len = strlen(payload); + params.payload = (char *)payload; + + /* publish packet */ + rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.online.result); + if (QCLOUD_RET_SUCCESS != rc) { + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + IOT_FUNC_EXIT_RC(rc); + } + + session->session_status = SUBDEV_SEESION_STATUS_ONLINE; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int IOT_Gateway_Subdev_Offline(void *client, GatewayParam *param) +{ + int rc = 0; + char topic[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + char payload[GATEWAY_PAYLOAD_BUFFER_LEN + 1] = {0}; + int size = 0; + SubdevSession *session = NULL; + Gateway * gateway = (Gateway *)client; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); + + session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_d("no session, can not offline"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_NO_EXIST); + } + if (SUBDEV_SEESION_STATUS_OFFLINE == session->session_status) { + Log_i("device have offline"); + /* free session */ + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_OFFLINE); + } + + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, + param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN + 1, GATEWAY_PAYLOAD_STATUS_FMT, "offline", + param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) { + Log_e("buf size < payload length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(gateway->gateway_data.offline.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, + param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("buf size < client_id length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + gateway->gateway_data.offline.result = -1; + + PublishParams params = DEFAULT_PUB_PARAMS; + params.qos = QOS0; + params.payload_len = strlen(payload); + params.payload = (char *)payload; + + /* publish packet */ + rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.offline.result); + if (QCLOUD_RET_SUCCESS != rc) { + IOT_FUNC_EXIT_RC(rc); + } + + session->session_status = SUBDEV_SEESION_STATUS_OFFLINE; + + /* free session */ + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +void *IOT_Gateway_Get_Mqtt_Client(void *handle) +{ + POINTER_SANITY_CHECK(handle, NULL); + + Gateway *gateway = (Gateway *)handle; + + return gateway->mqtt; +} + +int IOT_Gateway_Destroy(void *client) +{ + Gateway *gateway = (Gateway *)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + SubdevSession *cur_session = gateway->session_list; + while (cur_session) { + SubdevSession *session = cur_session; + cur_session = cur_session->next; + HAL_Free(session); + } + + IOT_MQTT_Destroy(&gateway->mqtt); + HAL_Free(client); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int IOT_Gateway_Yield(void *client, uint32_t timeout_ms) +{ + Gateway *gateway = (Gateway *)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Yield(gateway->mqtt, timeout_ms); +} + +int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params) +{ + Gateway *gateway = (Gateway *)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); +} + +int IOT_Gateway_Unsubscribe(void *client, char *topic_filter) +{ + Gateway *gateway = (Gateway *)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); +} + +int IOT_Gateway_IsSubReady(void *client, char *topic_filter) +{ + Gateway *gateway = (Gateway *)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_IsSubReady(gateway->mqtt, topic_filter); +} + +int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params) +{ + Gateway *gateway = (Gateway *)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Publish(gateway->mqtt, topic_name, params); +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c new file mode 100644 index 00000000..9dc0d8d0 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/gateway/gateway_common.c @@ -0,0 +1,353 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include "gateway_common.h" + +#include "lite-utils.h" +#include "mqtt_client.h" + +static bool get_json_type(char *json, char **v) +{ + *v = LITE_json_value_of("type", json); + return *v == NULL ? false : true; +} + +static bool get_json_devices(char *json, char **v) +{ + *v = LITE_json_value_of("payload.devices", json); + return *v == NULL ? false : true; +} + +static bool get_json_result(char *json, int32_t *res) +{ + char *v = LITE_json_value_of("result", json); + if (v == NULL) { + return false; + } + if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { + HAL_Free(v); + return false; + } + HAL_Free(v); + return true; +} + +static bool get_json_product_id(char *json, char **v) +{ + *v = LITE_json_value_of("product_id", json); + return *v == NULL ? false : true; +} + +static bool get_json_device_name(char *json, char **v) +{ + *v = LITE_json_value_of("device_name", json); + return *v == NULL ? false : true; +} + +static void _gateway_message_handler(void *client, MQTTMessage *message, void *user_data) +{ + Qcloud_IoT_Client *mqtt = NULL; + Gateway * gateway = NULL; + char * topic = NULL; + size_t topic_len = 0; + int cloud_rcv_len = 0; + char * type = NULL; + char * devices = NULL, *devices_strip = NULL; + char * product_id = NULL; + char * device_name = NULL; + int32_t result = 0; + char client_id[MAX_SIZE_OF_CLIENT_ID + 1] = {0}; + int size = 0; + + POINTER_SANITY_CHECK_RTN(client); + POINTER_SANITY_CHECK_RTN(message); + + mqtt = (Qcloud_IoT_Client *)client; + gateway = (Gateway *)mqtt->event_handle.context; + POINTER_SANITY_CHECK_RTN(gateway); + + topic = (char *)message->ptopic; + topic_len = message->topic_len; + if (NULL == topic || topic_len == 0) { + Log_e("topic == NULL or topic_len == 0."); + return; + } + + if (message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN) { + Log_e("message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN."); + return; + } + + cloud_rcv_len = Min(GATEWAY_RECEIVE_BUFFER_LEN - 1, message->payload_len); + char *json_buf = gateway->recv_buf; + memcpy(gateway->recv_buf, message->payload, cloud_rcv_len); + json_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string + + if (!get_json_type(json_buf, &type)) { + Log_e("Fail to parse type from msg: %s", json_buf); + return; + } + + if (!get_json_devices(json_buf, &devices)) { + Log_e("Fail to parse devices from msg: %s", json_buf); + HAL_Free(type); + return; + } + + if (devices[0] == '[') { + devices_strip = devices + 1; + } else { + devices_strip = devices; + } + + if (!get_json_result(devices_strip, &result)) { + Log_e("Fail to parse result from msg: %s", json_buf); + HAL_Free(type); + HAL_Free(devices); + return; + } + if (!get_json_product_id(devices_strip, &product_id)) { + Log_e("Fail to parse product_id from msg: %s", json_buf); + HAL_Free(type); + HAL_Free(devices); + return; + } + if (!get_json_device_name(devices_strip, &device_name)) { + Log_e("Fail to parse device_name from msg: %s", json_buf); + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + return; + } + + size = HAL_Snprintf(client_id, MAX_SIZE_OF_CLIENT_ID + 1, GATEWAY_CLIENT_ID_FMT, product_id, device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("generate client_id fail."); + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + HAL_Free(device_name); + return; + } + + if (strncmp(type, "online", sizeof("online") - 1) == 0) { + if (strncmp(client_id, gateway->gateway_data.online.client_id, size) == 0) { + Log_i("client_id(%s), online success. result %d", client_id, result); + gateway->gateway_data.online.result = result; + } + } else if (strncmp(type, "offline", sizeof("offline") - 1) == 0) { + if (strncmp(client_id, gateway->gateway_data.offline.client_id, size) == 0) { + Log_i("client_id(%s), offline success. result %d", client_id, result); + gateway->gateway_data.offline.result = result; + } + } + + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + HAL_Free(device_name); + return; +} + +int gateway_subscribe_unsubscribe_topic(Gateway *gateway, char *topic_filter, SubscribeParams *params, int is_subscribe) +{ + int rc = 0; + int loop_count = 0; + uint32_t status = -1; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(params, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(topic_filter, QCLOUD_ERR_INVAL); + + params->qos = QOS1; + gateway->gateway_data.sync_status = status; + + if (is_subscribe) { + /* subscribe */ + rc = IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); + } else { + /* unsubscribe */ + rc = IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); + } + + if (rc < 0) { + Log_e("subscribe or un(%d), result(%d)", is_subscribe, rc); + IOT_FUNC_EXIT_RC(rc); + } + + gateway->gateway_data.sync_status = status = rc; + while (status == gateway->gateway_data.sync_status) { + if (loop_count > GATEWAY_LOOP_MAX_COUNT) { + Log_i("loop max count, time out"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_Gateway_Yield(gateway, 200); + loop_count++; + } + + if (gateway->gateway_data.sync_status != 0) { + Log_e("gateway->gateway_data.sync_status(%u) != 0", gateway->gateway_data.sync_status); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int gateway_subscribe_unsubscribe_default(Gateway *gateway, GatewayParam *param) +{ + int rc = 0; + int size = 0; + char topic_filter[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; + + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + + // subscribe online/offline operation reslut + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_RESULT_FMT, + param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + subscribe_params.on_message_handler = _gateway_message_handler; + rc = gateway_subscribe_unsubscribe_topic(gateway, topic_filter, &subscribe_params, IOT_TRUE); + if (QCLOUD_RET_SUCCESS != rc) { + IOT_FUNC_EXIT_RC(rc); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +SubdevSession *subdev_find_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession *session = NULL; + + POINTER_SANITY_CHECK(gateway, NULL); + STRING_PTR_SANITY_CHECK(product_id, NULL); + STRING_PTR_SANITY_CHECK(device_name, NULL); + + session = gateway->session_list; + + /* session is exist */ + while (session) { + if (0 == strncmp(session->product_id, product_id, strlen(product_id)) && + 0 == strncmp(session->device_name, device_name, strlen(device_name))) { + IOT_FUNC_EXIT_RC(session); + } + session = session->next; + } + + IOT_FUNC_EXIT_RC(NULL); +} + +SubdevSession *subdev_add_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession *session = NULL; + + POINTER_SANITY_CHECK(gateway, NULL); + STRING_PTR_SANITY_CHECK(product_id, NULL); + STRING_PTR_SANITY_CHECK(device_name, NULL); + + session = HAL_Malloc(sizeof(SubdevSession)); + if (session == NULL) { + Log_e("Not enough memory"); + IOT_FUNC_EXIT_RC(NULL); + } + + memset(session, 0, sizeof(SubdevSession)); + /* add session to list */ + session->next = gateway->session_list; + gateway->session_list = session; + + int size = strlen(product_id); + strncpy(session->product_id, product_id, size); + session->product_id[size] = '\0'; + size = strlen(device_name); + strncpy(session->device_name, device_name, size); + session->device_name[size] = '\0'; + session->session_status = SUBDEV_SEESION_STATUS_INIT; + + IOT_FUNC_EXIT_RC(session); +} + +int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession *cur_session = NULL; + SubdevSession *pre_session = NULL; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_FAILURE); + STRING_PTR_SANITY_CHECK(product_id, QCLOUD_ERR_FAILURE); + STRING_PTR_SANITY_CHECK(device_name, QCLOUD_ERR_FAILURE); + + pre_session = cur_session = gateway->session_list; + + if (NULL == cur_session) { + Log_e("session list is empty"); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + + /* session is exist */ + while (cur_session) { + if (0 == strncmp(cur_session->product_id, product_id, strlen(product_id)) && + 0 == strncmp(cur_session->device_name, device_name, strlen(device_name))) { + if (cur_session == gateway->session_list) { + gateway->session_list = cur_session->next; + } else { + pre_session->next = cur_session->next; + } + HAL_Free(cur_session); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + pre_session = cur_session; + cur_session = cur_session->next; + } + + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); +} + +int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, int32_t *result) +{ + int rc = 0; + int loop_count = 0; + int32_t res = *result; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + rc = IOT_Gateway_Publish(gateway, topic, params); + if (rc < 0) { + Log_e("publish fail."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + /* wait for response */ + while (res == *result) { + if (loop_count > GATEWAY_LOOP_MAX_COUNT) { + Log_i("loop max count, time out."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT); + } + + IOT_Gateway_Yield(gateway, 200); + loop_count++; + } + + if (*result != 0) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_mqtt.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_mqtt.c new file mode 100644 index 00000000..ec1cd7fa --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_mqtt.c @@ -0,0 +1,240 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "config.h" +#ifdef LOG_UPLOAD + +#include + +#include "lite-utils.h" +#include "log_upload.h" +#include "mqtt_client.h" +#include "qcloud_iot_device.h" + +typedef struct _log_mqtt_state { + bool topic_sub_ok; + bool result_recv_ok; + int log_level; +} LogMQTTState; + +static LogMQTTState sg_state = {.topic_sub_ok = false, .result_recv_ok = false, .log_level = eLOG_ERROR}; + +static bool _get_json_log_level(char *json, int32_t *res) +{ + char *v = LITE_json_value_of("log_level", json); + if (v == NULL) { + Log_e("Invalid log level from JSON: %s", json); + return false; + } + if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { + Log_e("Invalid log level from JSON: %s", json); + HAL_Free(v); + return false; + } + HAL_Free(v); + return true; +} + +static void _log_level_sub_cb(void *pClient, MQTTMessage *message, void *pUserData) +{ +#define LOG_JSON_LENGTH 128 + char json_buf[LOG_JSON_LENGTH] = {0}; + int32_t json_buf_len = 0; + if (message == NULL) { + return; + } + LogMQTTState *state = (LogMQTTState *)pUserData; + + json_buf_len = Min(LOG_JSON_LENGTH - 1, message->payload_len); + memcpy(json_buf, message->payload, json_buf_len); + json_buf[json_buf_len] = '\0'; // json_parse relies on a string + + Log_d("Recv Msg Topic:%s, payload:%s", message->ptopic, json_buf); + int log_level; + if (!_get_json_log_level(json_buf, &log_level)) { + return; + } + + switch (log_level) { + case eLOG_DISABLE: + Log_w("Upload log level change to: %d", log_level); + clear_upload_buffer(); + set_log_upload_in_comm_err(true); + IOT_Log_Set_Upload_Level(eLOG_ERROR); + break; + case eLOG_ERROR: + case eLOG_WARN: + case eLOG_INFO: + case eLOG_DEBUG: + if (log_level < IOT_Log_Get_Upload_Level()) + clear_upload_buffer(); + IOT_Log_Set_Upload_Level((LOG_LEVEL)log_level); + Log_w("Upload log level change to: %d", log_level); + set_log_upload_in_comm_err(false); + break; + default: + Log_e("Invalid log level: %d", log_level); + break; + } + + state->log_level = log_level; + state->result_recv_ok = true; +} + +static void _log_mqtt_sub_event_handler(void *pclient, MQTTEventType event_type, void *pUserData) +{ + LogMQTTState *state = (LogMQTTState *)pUserData; + + switch (event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_d("mqtt log topic subscribe success"); + state->topic_sub_ok = true; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("mqtt log topic subscribe timeout"); + state->topic_sub_ok = false; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("mqtt log topic subscribe NACK"); + state->topic_sub_ok = false; + break; + case MQTT_EVENT_UNSUBSCRIBE: + Log_i("mqtt log topic has been unsubscribed"); + state->topic_sub_ok = false; + ; + break; + case MQTT_EVENT_CLIENT_DESTROY: + Log_i("mqtt client has been destroyed"); + state->topic_sub_ok = false; + ; + break; + default: + return; + } +} + +static int _iot_log_level_get_publish(void *pClient) +{ + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + static unsigned int sg_client_token = 1; + + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + DeviceInfo * dev_info = &mqtt_client->device_info; + + char topic_name[128] = {0}; + char payload_content[128] = {0}; + + HAL_Snprintf(topic_name, sizeof(topic_name), "$log/operation/%s/%s", dev_info->product_id, dev_info->device_name); + HAL_Snprintf(payload_content, sizeof(payload_content), + "{\"type\": \"get_log_level\", " + "\"clientToken\": \"%s-%u\"}", + dev_info->product_id, sg_client_token++); + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = QOS0; + pub_params.payload = payload_content; + pub_params.payload_len = strlen(payload_content); + + return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); +} + +int qcloud_log_topic_subscribe(void *client) +{ + /* subscribe the log topic: "$log/operation/result/${productId}/${deviceName}" */ + char topic_name[128] = {0}; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)client; + DeviceInfo * dev_info = &mqtt_client->device_info; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$log/operation/result/%s/%s", dev_info->product_id, + dev_info->device_name); + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content buf not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _log_level_sub_cb; + sub_params.on_sub_event_handler = _log_mqtt_sub_event_handler; + sub_params.user_data = (void *)&sg_state; + sub_params.qos = QOS0; + + return IOT_MQTT_Subscribe(client, topic_name, &sub_params); +} + +int qcloud_get_log_level(void *pClient, int *log_level) +{ + int ret = 0; + int cntSub = 0; + int cntRev = 0; + + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + + // subscribe log topic: $log/operation/get/${productid}/${devicename} + // skip this if the subscription is done and valid + if (!sg_state.topic_sub_ok) { + for (cntSub = 0; cntSub < 3; cntSub++) { + ret = qcloud_log_topic_subscribe(mqtt_client); + if (ret < 0) { + Log_w("qcloud_log_topic_subscribe failed: %d, cnt: %d", ret, cntSub); + continue; + } + + /* wait for sub ack */ + ret = qcloud_iot_mqtt_yield_mt((Qcloud_IoT_Client *)pClient, 100); + if (sg_state.topic_sub_ok) { + break; + } + } + } + + // return failure if subscribe failed + if (!sg_state.topic_sub_ok) { + Log_e("Subscribe log topic failed!"); + return QCLOUD_ERR_FAILURE; + } + + sg_state.result_recv_ok = false; + // publish msg to get log level + ret = _iot_log_level_get_publish(mqtt_client); + if (ret < 0) { + Log_e("client publish log topic failed :%d", ret); + return ret; + } + + do { + ret = qcloud_iot_mqtt_yield_mt((Qcloud_IoT_Client *)pClient, 100); + cntRev++; + } while (!ret && !sg_state.result_recv_ok && cntRev < 20); + + *log_level = sg_state.log_level; + if (sg_state.result_recv_ok) + ret = QCLOUD_RET_SUCCESS; + else + ret = QCLOUD_ERR_FAILURE; + + return ret; +} + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_upload.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_upload.c similarity index 66% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_upload.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_upload.c index 601e90e7..164586b4 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/log/log_upload.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/log/log_upload.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,95 +17,91 @@ extern "C" { #endif +#include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#include "qcloud_iot_export.h" #ifdef LOG_UPLOAD +#include +#include #include #include -#include #include -#include -#include "qcloud_iot_common.h" +#include "lite-utils.h" #include "log_upload.h" +#include "qcloud_iot_common.h" +#include "utils_hmac.h" #include "utils_httpc.h" #include "utils_timer.h" -#include "utils_hmac.h" -#include "lite-utils.h" - - /* log post header format */ -#define TIMESTAMP_SIZE 10 -#define SIGNATURE_SIZE 40 +#define TIMESTAMP_SIZE 10 +#define SIGNATURE_SIZE 40 #define CTRL_BYTES_SIZE 4 -//LOG_BUF_FIXED_HEADER_SIZE = 112 -#define LOG_BUF_FIXED_HEADER_SIZE (SIGNATURE_SIZE + CTRL_BYTES_SIZE + MAX_SIZE_OF_PRODUCT_ID + MAX_SIZE_OF_DEVICE_NAME + TIMESTAMP_SIZE) +// LOG_BUF_FIXED_HEADER_SIZE = 112 +#define LOG_BUF_FIXED_HEADER_SIZE \ + (SIGNATURE_SIZE + CTRL_BYTES_SIZE + MAX_SIZE_OF_PRODUCT_ID + MAX_SIZE_OF_DEVICE_NAME + TIMESTAMP_SIZE) /* do immediate log update if buffer is lower than this threshold (about two max log item) */ -#define LOG_LOW_BUFFER_THRESHOLD (LOG_UPLOAD_BUFFER_SIZE/4) +#define LOG_LOW_BUFFER_THRESHOLD (LOG_UPLOAD_BUFFER_SIZE / 4) /* log upload buffer */ -static char *sg_log_buffer = NULL; +static char * sg_log_buffer = NULL; static uint32_t sg_write_index = LOG_BUF_FIXED_HEADER_SIZE; #define SIGN_KEY_SIZE 24 -static char sg_sign_key[SIGN_KEY_SIZE+1] = {0}; +static char sg_sign_key[SIGN_KEY_SIZE + 1] = {0}; /* Log upload feature switch */ /* To check log http server return msg or not */ #define LOG_CHECK_HTTP_RET_CODE - typedef struct { - - const char *url; - const char *ca_crt; - int port; - HTTPClient http; /* http client */ - HTTPClientData http_data; /* http client data */ + const char * url; + const char * ca_crt; + int port; + HTTPClient http; /* http client */ + HTTPClientData http_data; /* http client data */ } LogHTTPStruct; -static LogHTTPStruct *sg_http_c; +static LogHTTPStruct *sg_http_c = NULL; typedef struct { - const char *product_id; const char *device_name; - void *mqtt_client; - bool upload_only_in_comm_err; + void * mqtt_client; + bool upload_only_in_comm_err; void *lock_buf; Timer upload_timer; -#ifndef LOG_UPDATE_TIME_WHEN_UPLOAD +#ifndef LOG_UPDATE_TIME_WHEN_UPLOAD Timer time_update_timer; #endif long system_time; - LogSaveFunc save_func; - LogReadFunc read_func; - LogDelFunc del_func; - LogGetSizeFunc get_size_func; - bool log_save_enabled; + LogSaveFunc save_func; + LogReadFunc read_func; + LogDelFunc del_func; + LogGetSizeFunc get_size_func; + bool log_save_enabled; bool uploader_init_done; } LogUploaderStruct; -static LogUploaderStruct *sg_uploader; -static bool sg_log_uploader_init_done = false; +static LogUploaderStruct *sg_uploader = NULL; +static bool sg_log_uploader_init_done = false; #ifdef AUTH_MODE_CERT -static int _gen_key_from_file( const char *file_path) +static int _gen_key_from_file(const char *file_path) { FILE *fp; - int len; - char line_buf[128] = {0}; + int len; + char line_buf[128] = {0}; - if( ( fp = fopen( file_path, "r" ) ) == NULL ) { + if ((fp = fopen(file_path, "r")) == NULL) { UPLOAD_ERR("fail to open cert file %s", file_path); return -1; } @@ -122,119 +118,118 @@ static int _gen_key_from_file( const char *file_path) UPLOAD_ERR("invalid cert file %s", file_path); return -1; } - + if (NULL == fgets(line_buf, sizeof(line_buf), fp)) { UPLOAD_ERR("fail to fgets file %s", file_path); return -1; } - + len = strlen(line_buf); - memcpy(sg_sign_key, line_buf, len>SIGN_KEY_SIZE?SIGN_KEY_SIZE:len); + memcpy(sg_sign_key, line_buf, len > SIGN_KEY_SIZE ? SIGN_KEY_SIZE : len); UPLOAD_DBG("sign key %s", sg_sign_key); - + fclose(fp); return 0; } #endif - static long _get_system_time(void) { #ifdef SYSTEM_COMM if (sg_uploader->mqtt_client == NULL) return 0; - + long sys_time = 0; - int rc = IOT_Get_SysTime(sg_uploader->mqtt_client, &sys_time); + int rc = IOT_Get_SysTime(sg_uploader->mqtt_client, &sys_time); if (rc == QCLOUD_RET_SUCCESS) return sys_time; else return 0; #else - return 0; -#endif + return 0; +#endif } static void _update_system_time(void) { -/* to avoid frequent get_system_time */ + /* to avoid frequent get_system_time */ #define LOG_TIME_UPDATE_INTERVAL 2 - - if(!expired(&sg_uploader->time_update_timer)) + + if (!expired(&sg_uploader->time_update_timer)) return; - sg_uploader->system_time = _get_system_time(); + sg_uploader->system_time = _get_system_time(); countdown(&sg_uploader->time_update_timer, LOG_TIME_UPDATE_INTERVAL); } - static int _check_server_connection() { int rc; rc = qcloud_http_client_connect(&sg_http_c->http, sg_http_c->url, sg_http_c->port, sg_http_c->ca_crt); - if (rc != QCLOUD_RET_SUCCESS) + if (rc != QCLOUD_RET_SUCCESS) return rc; qcloud_http_client_close(&sg_http_c->http); - + return QCLOUD_RET_SUCCESS; } #ifdef LOG_CHECK_HTTP_RET_CODE -static bool _get_json_ret_code(char *json, int32_t* res) { - char *v = LITE_json_value_of("Retcode", json); - if (v == NULL) { +static bool _get_json_ret_code(char *json, int32_t *res) +{ + char *v = LITE_json_value_of("Retcode", json); + if (v == NULL) { UPLOAD_ERR("Invalid json content: %s", json); - return false; - } - if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { + return false; + } + if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { UPLOAD_ERR("Invalid json content: %s", json); HAL_Free(v); - return false; - } + return false; + } HAL_Free(v); - return true; + return true; } #endif static int _post_one_http_to_server(char *post_buf, size_t post_size) -{ +{ int rc = 0; - if(sg_http_c == NULL) + if (sg_http_c == NULL) return QCLOUD_ERR_INVAL; sg_http_c->http_data.post_content_type = "text/plain;charset=utf-8"; - sg_http_c->http_data.post_buf = post_buf; - sg_http_c->http_data.post_buf_len = post_size; + sg_http_c->http_data.post_buf = post_buf; + sg_http_c->http_data.post_buf_len = post_size; - rc = qcloud_http_client_common(&sg_http_c->http, sg_http_c->url, sg_http_c->port, sg_http_c->ca_crt, - HTTP_POST, &sg_http_c->http_data); + rc = qcloud_http_client_common(&sg_http_c->http, sg_http_c->url, sg_http_c->port, sg_http_c->ca_crt, HTTP_POST, + &sg_http_c->http_data); if (rc != QCLOUD_RET_SUCCESS) { UPLOAD_ERR("qcloud_http_client_common failed, rc = %d", rc); return rc; - } + } UPLOAD_DBG("Log client POST size: %d", post_size); -#ifdef LOG_CHECK_HTTP_RET_CODE +#ifdef LOG_CHECK_HTTP_RET_CODE /* TODO: handle recv data from log server */ - #define HTTP_RET_JSON_LENGTH 256 - #define HTTP_WAIT_RET_TIMEOUT_MS 1000 - char buf[HTTP_RET_JSON_LENGTH] = {0}; - sg_http_c->http_data.response_buf = buf; - sg_http_c->http_data.response_buf_len = sizeof(buf); - +#define HTTP_RET_JSON_LENGTH 256 +#define HTTP_WAIT_RET_TIMEOUT_MS 1000 + char buf[HTTP_RET_JSON_LENGTH] = {0}; + sg_http_c->http_data.response_buf = buf; + sg_http_c->http_data.response_buf_len = sizeof(buf); + rc = qcloud_http_recv_data(&sg_http_c->http, HTTP_WAIT_RET_TIMEOUT_MS, &sg_http_c->http_data); if (QCLOUD_RET_SUCCESS != rc) { - UPLOAD_ERR("qcloud_http_recv_data failed, rc = %d", rc); + UPLOAD_ERR("qcloud_http_recv_data failed, rc = %d", rc); } else { int32_t ret = -1; - - buf[HTTP_RET_JSON_LENGTH - 1] = '\0'; // json_parse relies on a string - if (strlen(buf)>0 && _get_json_ret_code(buf, &ret) && ret == 0) { + + buf[HTTP_RET_JSON_LENGTH - 1] = '\0'; // json_parse relies on a string + if (strlen(buf) > 0 && _get_json_ret_code(buf, &ret) && ret == 0) { UPLOAD_DBG("Log server return SUCCESS: %s", buf); } else { UPLOAD_ERR("Log server return FAIL(%d): %s", ret, buf); @@ -246,25 +241,23 @@ static int _post_one_http_to_server(char *post_buf, size_t post_size) qcloud_http_client_close(&sg_http_c->http); return rc; - } static void _update_time_and_signature(char *log_buf, size_t log_size) { - char timestamp[TIMESTAMP_SIZE+1] = {0}; - char signature[SIGNATURE_SIZE+1] = {0}; + char timestamp[TIMESTAMP_SIZE + 1] = {0}; + char signature[SIGNATURE_SIZE + 1] = {0}; /* get system time from IoT hub first */ _update_system_time(); /* record the timestamp for this log uploading */ - HAL_Snprintf(timestamp, TIMESTAMP_SIZE+1, "%010ld", sg_uploader->system_time); - memcpy(log_buf+LOG_BUF_FIXED_HEADER_SIZE-TIMESTAMP_SIZE, timestamp, strlen(timestamp)); + HAL_Snprintf(timestamp, TIMESTAMP_SIZE + 1, "%010ld", sg_uploader->system_time); + memcpy(log_buf + LOG_BUF_FIXED_HEADER_SIZE - TIMESTAMP_SIZE, timestamp, strlen(timestamp)); /* signature of this log uploading */ - utils_hmac_sha1(log_buf+SIGNATURE_SIZE, log_size - SIGNATURE_SIZE, signature, sg_sign_key, strlen(sg_sign_key)); + utils_hmac_sha1(log_buf + SIGNATURE_SIZE, log_size - SIGNATURE_SIZE, signature, sg_sign_key, strlen(sg_sign_key)); memcpy(log_buf, signature, SIGNATURE_SIZE); - } static int _post_log_to_server(char *post_buf, size_t post_size, size_t *actual_post_payload) @@ -282,75 +275,73 @@ static int _post_log_to_server(char *post_buf, size_t post_size, size_t *actual_ *actual_post_payload = 0; } return ret; - } - - /* Log size is larger than one HTTP post size */ - /* Fragment the log and upload multi-times */ - UPLOAD_DBG("to post large log size %d", post_size); - *actual_post_payload = 0; - size_t delimiter_len = strlen(LOG_DELIMITER); + } + + /* Log size is larger than one HTTP post size */ + /* Fragment the log and upload multi-times */ + UPLOAD_DBG("to post large log size %d", post_size); + *actual_post_payload = 0; + size_t delimiter_len = strlen(LOG_DELIMITER); size_t orig_post_size = post_size; size_t post_payload, upload_size, possible_size; do { - char *next_log_buf = NULL; - possible_size = 0; - while (possible_size < MAX_HTTP_LOG_POST_SIZE){ + char *next_log_buf = NULL; + possible_size = 0; + while (possible_size < MAX_HTTP_LOG_POST_SIZE) { /*remember last valid position */ upload_size = possible_size; /* locate the delimiter */ next_log_buf = strstr(post_buf + upload_size, LOG_DELIMITER); - if (next_log_buf == NULL) { - UPLOAD_ERR("Invalid log delimiter. Total sent: %d. Left: %d", - *actual_post_payload+LOG_BUF_FIXED_HEADER_SIZE, post_size); + if (next_log_buf == NULL) { + UPLOAD_ERR("Invalid log delimiter. Total sent: %d. Left: %d", + *actual_post_payload + LOG_BUF_FIXED_HEADER_SIZE, post_size); return QCLOUD_ERR_INVAL; - } possible_size = (size_t)(next_log_buf - post_buf + delimiter_len); /* end of log */ - if (next_log_buf[delimiter_len] == 0 && possible_size < MAX_HTTP_LOG_POST_SIZE) { + if (next_log_buf[delimiter_len] == 0 && possible_size < MAX_HTTP_LOG_POST_SIZE) { upload_size = possible_size; break; } } if (upload_size == 0) { - UPLOAD_ERR("Upload size should not be 0! Total sent: %d. Left: %d", - *actual_post_payload+LOG_BUF_FIXED_HEADER_SIZE, post_size); + UPLOAD_ERR("Upload size should not be 0! Total sent: %d. Left: %d", + *actual_post_payload + LOG_BUF_FIXED_HEADER_SIZE, post_size); return QCLOUD_ERR_FAILURE; } - + _update_time_and_signature(post_buf, upload_size); ret = _post_one_http_to_server(post_buf, upload_size); - if (QCLOUD_RET_SUCCESS != ret) { - UPLOAD_ERR("Send log failed. Total sent: %d. Left: %d", - *actual_post_payload+LOG_BUF_FIXED_HEADER_SIZE, post_size); + if (QCLOUD_RET_SUCCESS != ret) { + UPLOAD_ERR("Send log failed. Total sent: %d. Left: %d", *actual_post_payload + LOG_BUF_FIXED_HEADER_SIZE, + post_size); return QCLOUD_ERR_FAILURE; } - + /* move the left log forward and do next upload */ - memmove(post_buf+LOG_BUF_FIXED_HEADER_SIZE, post_buf+upload_size, post_size-upload_size); + memmove(post_buf + LOG_BUF_FIXED_HEADER_SIZE, post_buf + upload_size, post_size - upload_size); post_payload = upload_size - LOG_BUF_FIXED_HEADER_SIZE; post_size -= post_payload; *actual_post_payload += post_payload; - memset(post_buf+post_size, 0, orig_post_size - post_size); - UPLOAD_DBG("post log %d OK. Total sent: %d. Left: %d", - upload_size, *actual_post_payload+LOG_BUF_FIXED_HEADER_SIZE, post_size); - } while(post_size>LOG_BUF_FIXED_HEADER_SIZE); + memset(post_buf + post_size, 0, orig_post_size - post_size); + UPLOAD_DBG("post log %d OK. Total sent: %d. Left: %d", upload_size, + *actual_post_payload + LOG_BUF_FIXED_HEADER_SIZE, post_size); + } while (post_size > LOG_BUF_FIXED_HEADER_SIZE); - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } - static void _reset_log_buffer(void) -{ +{ sg_write_index = LOG_BUF_FIXED_HEADER_SIZE; - memset(sg_log_buffer+LOG_BUF_FIXED_HEADER_SIZE, 0, LOG_UPLOAD_BUFFER_SIZE - LOG_BUF_FIXED_HEADER_SIZE); + memset(sg_log_buffer + LOG_BUF_FIXED_HEADER_SIZE, 0, LOG_UPLOAD_BUFFER_SIZE - LOG_BUF_FIXED_HEADER_SIZE); } static int _save_log(char *log_buf, size_t log_size) { - int rc = 0; - size_t write_size, current_size = sg_uploader->get_size_func(); + int rc = 0; + size_t write_size, current_size = sg_uploader->get_size_func(); /* overwrite the previous saved log to avoid too many saved logs */ if ((current_size + log_size) > MAX_LOG_SAVE_SIZE) { @@ -360,33 +351,33 @@ static int _save_log(char *log_buf, size_t log_size) Log_e("fail to delete previous log"); } } - + write_size = sg_uploader->save_func(log_buf, log_size); if (write_size != log_size) { Log_e("fail to save log. RC %d - log size %d", write_size, log_size); rc = -1; - } else + } else { rc = 0; + } return rc; - } static int _handle_saved_log(void) -{ - int rc = QCLOUD_RET_SUCCESS; +{ + int rc = QCLOUD_RET_SUCCESS; size_t whole_log_size = sg_uploader->get_size_func(); if (whole_log_size > 0) { /* only do the job when connection is OK */ if (_check_server_connection() != QCLOUD_RET_SUCCESS) return QCLOUD_ERR_FAILURE; - + size_t buf_size = whole_log_size + LOG_BUF_FIXED_HEADER_SIZE + 1; - char *log_buf = HAL_Malloc(buf_size); + char * log_buf = HAL_Malloc(buf_size); if (log_buf != NULL) { /* read the whole log to buffer */ size_t read_len = sg_uploader->read_func(log_buf + LOG_BUF_FIXED_HEADER_SIZE, whole_log_size); - if (read_len == whole_log_size) { + if (read_len == whole_log_size) { size_t upload_size = whole_log_size + LOG_BUF_FIXED_HEADER_SIZE; /* copy header from global log buffer */ @@ -398,14 +389,14 @@ static int _handle_saved_log(void) if (rc == QCLOUD_RET_SUCCESS || rc == QCLOUD_ERR_INVAL) { Log_d("handle saved log done! Size: %d. upload paylod: %d", whole_log_size, actual_post_payload); sg_uploader->del_func(); - } - HAL_Free(log_buf); + } + HAL_Free(log_buf); } else { Log_e("fail to read whole saved log. Size: %u - read: %u", whole_log_size, read_len); HAL_Free(log_buf); return QCLOUD_ERR_FAILURE; - } - + } + } else { Log_e("Malloc failed, size: %u", buf_size); return QCLOUD_ERR_FAILURE; @@ -413,174 +404,179 @@ static int _handle_saved_log(void) } return rc; - } - void set_log_mqtt_client(void *client) { if (!sg_log_uploader_init_done) - return ; - + return; + sg_uploader->mqtt_client = client; } void set_log_upload_in_comm_err(bool value) { if (!sg_log_uploader_init_done) - return ; - + return; + sg_uploader->upload_only_in_comm_err = value; } - int append_to_upload_buffer(const char *log_content, size_t log_size) { if (!sg_log_uploader_init_done) return -1; - - if (log_content == NULL || log_size <= 0) { + + if (log_content == NULL || log_size == 0) { UPLOAD_ERR("invalid log content!"); return -1; } if (HAL_MutexTryLock(sg_uploader->lock_buf) != 0) { - UPLOAD_ERR("trylock buffer failed!"); + UPLOAD_ERR("trylock buffer failed!"); return -1; } - - if ((sg_write_index + log_size + 1) > LOG_UPLOAD_BUFFER_SIZE) { + + if ((sg_write_index + log_size + 1) > LOG_UPLOAD_BUFFER_SIZE) { countdown_ms(&sg_uploader->upload_timer, 0); HAL_MutexUnlock(sg_uploader->lock_buf); UPLOAD_ERR("log upload buffer is not enough!"); return -1; } - memcpy(sg_log_buffer+sg_write_index, log_content, log_size); - + memcpy(sg_log_buffer + sg_write_index, log_content, log_size); + sg_write_index += log_size; /* replace \r\n to \n\f as delimiter */ sg_log_buffer[sg_write_index - 1] = '\f'; - sg_log_buffer[sg_write_index - 2] = '\n'; + sg_log_buffer[sg_write_index - 2] = '\n'; HAL_MutexUnlock(sg_uploader->lock_buf); return 0; } - void clear_upload_buffer(void) { if (!sg_log_uploader_init_done) - return ; + return; HAL_MutexLock(sg_uploader->lock_buf); _reset_log_buffer(); HAL_MutexUnlock(sg_uploader->lock_buf); - } - int init_log_uploader(LogUploadInitParams *init_params) { if (sg_log_uploader_init_done) return QCLOUD_RET_SUCCESS; - if (init_params == NULL || init_params->product_id == NULL || - init_params->device_name == NULL || init_params->sign_key == NULL) { + if (init_params == NULL || init_params->product_id == NULL || init_params->device_name == NULL || + init_params->sign_key == NULL) { UPLOAD_ERR("invalid init parameters"); return QCLOUD_ERR_INVAL; } int key_len = strlen(init_params->sign_key); if (key_len == 0) { - UPLOAD_ERR("invalid key length"); + UPLOAD_ERR("invalid key length"); return QCLOUD_ERR_INVAL; } sg_log_buffer = HAL_Malloc(LOG_UPLOAD_BUFFER_SIZE); if (sg_log_buffer == NULL) { - UPLOAD_ERR("malloc log buffer failed"); + UPLOAD_ERR("malloc log buffer failed"); return QCLOUD_ERR_FAILURE; } int i; - for(i = 0; isign_key) != 0) { - UPLOAD_ERR("gen_key_from_file failed"); - return QCLOUD_ERR_FAILURE; + UPLOAD_ERR("gen_key_from_file failed"); + goto err_exit; } sg_log_buffer[SIGNATURE_SIZE] = 'C'; -#else - memcpy(sg_sign_key, init_params->sign_key, key_len>SIGN_KEY_SIZE?SIGN_KEY_SIZE:key_len); +#else + memcpy(sg_sign_key, init_params->sign_key, key_len > SIGN_KEY_SIZE ? SIGN_KEY_SIZE : key_len); sg_log_buffer[SIGNATURE_SIZE] = 'P'; -#endif +#endif - memcpy(sg_log_buffer+SIGNATURE_SIZE+CTRL_BYTES_SIZE, init_params->product_id, MAX_SIZE_OF_PRODUCT_ID); - memcpy(sg_log_buffer+SIGNATURE_SIZE+CTRL_BYTES_SIZE+MAX_SIZE_OF_PRODUCT_ID, init_params->device_name, strlen(init_params->device_name)); + memcpy(sg_log_buffer + SIGNATURE_SIZE + CTRL_BYTES_SIZE, init_params->product_id, MAX_SIZE_OF_PRODUCT_ID); + memcpy(sg_log_buffer + SIGNATURE_SIZE + CTRL_BYTES_SIZE + MAX_SIZE_OF_PRODUCT_ID, init_params->device_name, + strlen(init_params->device_name)); - if (NULL == (sg_uploader = HAL_Malloc(sizeof(LogUploaderStruct)))) { + if (NULL == (sg_uploader = HAL_Malloc(sizeof(LogUploaderStruct)))) { UPLOAD_ERR("allocate for LogUploaderStruct failed"); - return QCLOUD_ERR_FAILURE; + goto err_exit; } memset(sg_uploader, 0, sizeof(LogUploaderStruct)); - sg_uploader->product_id = init_params->product_id; - sg_uploader->device_name = init_params->device_name; - sg_uploader->mqtt_client = NULL; - sg_uploader->system_time = 0; + sg_uploader->product_id = init_params->product_id; + sg_uploader->device_name = init_params->device_name; + sg_uploader->mqtt_client = NULL; + sg_uploader->system_time = 0; sg_uploader->upload_only_in_comm_err = false; /* all the call back functions are necessary to handle log save and re-upload */ - if (init_params->save_func != NULL && init_params->read_func != NULL && - init_params->del_func != NULL && init_params->get_size_func) { - sg_uploader->save_func = init_params->save_func; - sg_uploader->read_func = init_params->read_func; - sg_uploader->del_func = init_params->del_func; - sg_uploader->get_size_func = init_params->get_size_func; + if (init_params->save_func != NULL && init_params->read_func != NULL && init_params->del_func != NULL && + init_params->get_size_func) { + sg_uploader->save_func = init_params->save_func; + sg_uploader->read_func = init_params->read_func; + sg_uploader->del_func = init_params->del_func; + sg_uploader->get_size_func = init_params->get_size_func; sg_uploader->log_save_enabled = true; - } else + } else { sg_uploader->log_save_enabled = false; - + } + InitTimer(&sg_uploader->upload_timer); InitTimer(&sg_uploader->time_update_timer); if ((sg_uploader->lock_buf = HAL_MutexCreate()) == NULL) { UPLOAD_ERR("mutex create failed"); - return QCLOUD_ERR_FAILURE; + goto err_exit; } - + if (NULL == (sg_http_c = HAL_Malloc(sizeof(LogHTTPStruct)))) { - HAL_MutexDestroy(sg_uploader->lock_buf); - HAL_Free(sg_uploader); UPLOAD_ERR("allocate for LogHTTPStruct failed"); - return QCLOUD_ERR_FAILURE; + goto err_exit; } memset(sg_http_c, 0, sizeof(LogHTTPStruct)); /* set http request-header parameter */ sg_http_c->http.header = "Accept:application/json;*/*\r\n"; - sg_http_c->url = LOG_UPLOAD_SERVER_URL; - sg_http_c->port = LOG_UPLOAD_SERVER_PORT; - sg_http_c->ca_crt = NULL; + sg_http_c->url = LOG_UPLOAD_SERVER_URL; + sg_http_c->port = LOG_UPLOAD_SERVER_PORT; + sg_http_c->ca_crt = NULL; _reset_log_buffer(); sg_log_uploader_init_done = true; return QCLOUD_RET_SUCCESS; - +err_exit: + HAL_Free(sg_log_buffer); + sg_log_buffer = NULL; + + if (sg_uploader && sg_uploader->lock_buf) { + HAL_MutexDestroy(sg_uploader->lock_buf); + sg_uploader->lock_buf = NULL; + } + HAL_Free(sg_uploader); + sg_uploader = NULL; + HAL_Free(sg_http_c); + sg_http_c = NULL; + return QCLOUD_ERR_FAILURE; } void fini_log_uploader(void) { if (!sg_log_uploader_init_done) - return ; - + return; + HAL_MutexLock(sg_uploader->lock_buf); - sg_log_uploader_init_done = false; + sg_log_uploader_init_done = false; if (sg_log_buffer) { _reset_log_buffer(); HAL_Free(sg_log_buffer); @@ -602,40 +598,40 @@ bool is_log_uploader_init(void) } static bool _check_force_upload(bool force_upload) -{ +{ if (!force_upload) { /* Double check if the buffer is low */ HAL_MutexLock(sg_uploader->lock_buf); bool is_low_buffer = (LOG_UPLOAD_BUFFER_SIZE - sg_write_index) < LOG_LOW_BUFFER_THRESHOLD ? true : false; /* force_upload is false and upload_only_in_comm_err is true */ - if(sg_uploader->upload_only_in_comm_err) { + if (sg_uploader->upload_only_in_comm_err) { /* buffer is low but we couldn't upload now, reset buffer */ if (is_low_buffer) _reset_log_buffer(); HAL_MutexUnlock(sg_uploader->lock_buf); countdown_ms(&sg_uploader->upload_timer, LOG_UPLOAD_INTERVAL_MS); - return false; + return false; } HAL_MutexUnlock(sg_uploader->lock_buf); - + if (is_low_buffer) { /* buffer is low, handle it right now */ - return true; + return true; } else { return expired(&sg_uploader->upload_timer); } - }else + } else { return true; - + } } int do_log_upload(bool force_upload) { - int rc; - int upload_log_size = 0; + int rc; + int upload_log_size = 0; static bool unhandle_saved_log = true; if (!sg_log_uploader_init_done) @@ -651,7 +647,7 @@ int do_log_upload(bool force_upload) if (rc == QCLOUD_RET_SUCCESS) unhandle_saved_log = false; } - + /* no more log in buffer */ if (sg_write_index == LOG_BUF_FIXED_HEADER_SIZE) return QCLOUD_RET_SUCCESS; @@ -659,9 +655,9 @@ int do_log_upload(bool force_upload) HAL_MutexLock(sg_uploader->lock_buf); upload_log_size = sg_write_index; HAL_MutexUnlock(sg_uploader->lock_buf); - + size_t actual_post_payload; - rc = _post_log_to_server(sg_log_buffer, upload_log_size, &actual_post_payload); + rc = _post_log_to_server(sg_log_buffer, upload_log_size, &actual_post_payload); if (rc != QCLOUD_RET_SUCCESS) { /* save log via user callbacks when log upload fail */ if (sg_uploader->log_save_enabled) { @@ -670,31 +666,32 @@ int do_log_upload(bool force_upload) /* parts of log were uploaded succesfully. Need to move the new logs forward */ if (actual_post_payload) { UPLOAD_DBG("move the new log %d forward", actual_post_payload); - memmove(sg_log_buffer+upload_log_size-actual_post_payload, - sg_log_buffer+upload_log_size, sg_write_index-upload_log_size); + memmove(sg_log_buffer + upload_log_size - actual_post_payload, sg_log_buffer + upload_log_size, + sg_write_index - upload_log_size); sg_write_index = sg_write_index - actual_post_payload; - memset(sg_log_buffer+sg_write_index, 0, LOG_UPLOAD_BUFFER_SIZE - sg_write_index); + memset(sg_log_buffer + sg_write_index, 0, LOG_UPLOAD_BUFFER_SIZE - sg_write_index); } upload_log_size = sg_write_index; HAL_MutexUnlock(sg_uploader->lock_buf); - _save_log(sg_log_buffer+LOG_BUF_FIXED_HEADER_SIZE, upload_log_size-LOG_BUF_FIXED_HEADER_SIZE); + _save_log(sg_log_buffer + LOG_BUF_FIXED_HEADER_SIZE, upload_log_size - LOG_BUF_FIXED_HEADER_SIZE); unhandle_saved_log = true; - } + } } - + /* move the new log during send_log_to_server */ HAL_MutexLock(sg_uploader->lock_buf); if (upload_log_size == sg_write_index) { _reset_log_buffer(); } else { - memmove(sg_log_buffer+LOG_BUF_FIXED_HEADER_SIZE, sg_log_buffer+upload_log_size, sg_write_index-upload_log_size); + memmove(sg_log_buffer + LOG_BUF_FIXED_HEADER_SIZE, sg_log_buffer + upload_log_size, + sg_write_index - upload_log_size); sg_write_index = sg_write_index - upload_log_size + LOG_BUF_FIXED_HEADER_SIZE; - memset(sg_log_buffer+sg_write_index, 0, LOG_UPLOAD_BUFFER_SIZE - sg_write_index); + memset(sg_log_buffer + sg_write_index, 0, LOG_UPLOAD_BUFFER_SIZE - sg_write_index); } HAL_MutexUnlock(sg_uploader->lock_buf); - + countdown_ms(&sg_uploader->upload_timer, LOG_UPLOAD_INTERVAL_MS); - + return QCLOUD_RET_SUCCESS; } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_client.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_client.c similarity index 74% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_client.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_client.c index 416b3e6d..4541f5cb 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_client.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_client.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,74 +17,71 @@ extern "C" { #endif +#include "ota_client.h" + #include #include #include -#include "ota_client.h" - +#include "ota_fetch.h" +#include "ota_lib.h" #include "qcloud_iot_export.h" #include "utils_param_check.h" - -#include "ota_lib.h" -#include "ota_fetch.h" - #include "utils_timer.h" -#define OTA_VERSION_STR_LEN_MIN (1) -#define OTA_VERSION_STR_LEN_MAX (32) +#define OTA_VERSION_STR_LEN_MIN (1) +#define OTA_VERSION_STR_LEN_MAX (32) -typedef struct { - const char *product_id; /* point to product id */ - const char *device_name; /* point to device name */ +typedef struct { + const char *product_id; /* point to product id */ + const char *device_name; /* point to device name */ - uint32_t id; /* message id */ - IOT_OTA_State_Code state; /* OTA state */ - uint32_t size_last_fetched; /* size of last downloaded */ - uint32_t size_fetched; /* size of already downloaded */ - uint32_t size_file; /* size of file */ + uint32_t id; /* message id */ + IOT_OTA_State_Code state; /* OTA state */ + uint32_t size_last_fetched; /* size of last downloaded */ + uint32_t size_fetched; /* size of already downloaded */ + uint32_t size_file; /* size of file */ - char *purl; /* point to URL */ - char *version; /* point to string */ - char md5sum[33]; /* MD5 string */ + char *purl; /* point to URL */ + char *version; /* point to string */ + char md5sum[33]; /* MD5 string */ - void *md5; /* MD5 handle */ - void *ch_signal; /* channel handle of signal exchanged with OTA server */ - void *ch_fetch; /* channel handle of download */ + void *md5; /* MD5 handle */ + void *ch_signal; /* channel handle of signal exchanged with OTA server */ + void *ch_fetch; /* channel handle of download */ - int err; /* last error code */ + int err; /* last error code */ - short current_signal_type; + short current_signal_type; Timer report_timer; } OTA_Struct_t; - /* check ota progress */ /* return: true, valid progress state; false, invalid progress state. */ static int _ota_check_progress(IOT_OTA_Progress_Code progress) { - return ((progress >= IOT_OTAP_BURN_FAILED) - && (progress <= IOT_OTAP_FETCH_PERCENTAGE_MAX)); + return ((progress >= IOT_OTAP_BURN_FAILED) && (progress <= IOT_OTAP_FETCH_PERCENTAGE_MAX)); } /* callback when OTA topic msg is received */ -static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { +static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) +{ #define OTA_JSON_TYPE_VALUE_LENGTH 64 char *json_type = NULL; - OTA_Struct_t *h_ota = (OTA_Struct_t *) pcontext; + OTA_Struct_t *h_ota = (OTA_Struct_t *)pcontext; if (h_ota->state >= IOT_OTAS_FETCHING) { Log_i("In downloading or downloaded state"); goto End; } - if (msg == NULL || msg_len <= 0) { - Log_e("OTA response message is NULL"); - return; + if (msg == NULL || msg_len == 0) { + Log_e("OTA response message is NULL"); + return; } if (qcloud_otalib_get_firmware_type(msg, &json_type) != QCLOUD_RET_SUCCESS) { @@ -93,29 +90,27 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } if (!strcmp(json_type, REPORT_VERSION_RSP)) { - if (qcloud_otalib_get_report_version_result(msg) < QCLOUD_RET_SUCCESS) { + if (qcloud_otalib_get_report_version_result(msg) < QCLOUD_RET_SUCCESS) { Log_e("Report version failed!"); - h_ota->err = IOT_OTA_ERR_REPORT_VERSION; + h_ota->err = IOT_OTA_ERR_REPORT_VERSION; h_ota->state = IOT_OTAS_FETCHED; - } - else { - Log_i("Report version success!"); - } - goto End; - } - else { + } else { + Log_i("Report version success!"); + } + goto End; + } else { if (strcmp(json_type, UPDATE_FIRMWARE) != 0) { - Log_e("Netheir Report version result nor update firmware! type: %s", json_type); + Log_e("Netheir Report version result nor update firmware! type: %s", json_type); goto End; } - if(NULL != json_type) { + if (NULL != json_type) { HAL_Free(json_type); json_type = NULL; } - if (0 != qcloud_otalib_get_params(msg, &json_type, &h_ota->purl, &h_ota->version, - h_ota->md5sum, &h_ota->size_file)) { + if (0 != qcloud_otalib_get_params(msg, &json_type, &h_ota->purl, &h_ota->version, h_ota->md5sum, + &h_ota->size_file)) { Log_e("Get firmware parameter failed"); goto End; } @@ -124,18 +119,25 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } End: - if (json_type != NULL) HAL_Free(json_type); + if (json_type != NULL) + HAL_Free(json_type); #undef OTA_JSON_TYPE_VALUE_LENGTH } +static void IOT_OTA_ResetStatus(void *handle) +{ + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; + h_ota->state = IOT_OTAS_INITED; +} + static int IOT_OTA_ReportProgress(void *handle, IOT_OTA_Progress_Code progress, IOT_OTAReportType reportType) { -#define MSG_REPORT_LEN (256) +#define MSG_REPORT_LEN (256) - int ret = QCLOUD_ERR_FAILURE; - char *msg_reported; - OTA_Struct_t * h_ota = (OTA_Struct_t *) handle; + int ret = QCLOUD_ERR_FAILURE; + char * msg_reported; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; if (NULL == handle) { Log_e("handle is NULL"); @@ -149,7 +151,7 @@ static int IOT_OTA_ReportProgress(void *handle, IOT_OTA_Progress_Code progress, } if (!_ota_check_progress(progress)) { - Log_e("progress is a invalid parameter"); + Log_e("progress is a invalid parameter: %d", progress); h_ota->err = IOT_OTA_ERR_INVALID_PARAM; return QCLOUD_ERR_FAILURE; } @@ -187,13 +189,13 @@ do_exit: static int IOT_OTA_ReportUpgradeResult(void *handle, const char *version, IOT_OTAReportType reportType) { -#define MSG_UPGPGRADE_LEN (256) +#define MSG_UPGPGRADE_LEN (256) POINTER_SANITY_CHECK(handle, IOT_OTA_ERR_INVALID_PARAM); POINTER_SANITY_CHECK(version, IOT_OTA_ERR_INVALID_PARAM); - - int ret, len; - char *msg_upgrade; + + int ret, len; + char * msg_upgrade; OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; if (IOT_OTAS_UNINITED == h_ota->state) { @@ -219,7 +221,7 @@ static int IOT_OTA_ReportUpgradeResult(void *handle, const char *version, IOT_OT if (ret != 0) { Log_e("generate inform message failed"); h_ota->err = ret; - ret = QCLOUD_ERR_FAILURE; + ret = QCLOUD_ERR_FAILURE; goto do_exit; } @@ -227,10 +229,12 @@ static int IOT_OTA_ReportUpgradeResult(void *handle, const char *version, IOT_OT if (0 > ret) { Log_e("Report version failed"); h_ota->err = ret; - ret = QCLOUD_ERR_FAILURE; + ret = QCLOUD_ERR_FAILURE; goto do_exit; } + IOT_OTA_ResetStatus(h_ota); + do_exit: if (NULL != msg_upgrade) { HAL_Free(msg_upgrade); @@ -240,14 +244,13 @@ do_exit: #undef MSG_UPGPGRADE_LEN } - /* Init OTA handle */ void *IOT_OTA_Init(const char *product_id, const char *device_name, void *ch_signal) { POINTER_SANITY_CHECK(product_id, NULL); POINTER_SANITY_CHECK(device_name, NULL); POINTER_SANITY_CHECK(ch_signal, NULL); - + OTA_Struct_t *h_ota = NULL; if (NULL == (h_ota = HAL_Malloc(sizeof(OTA_Struct_t)))) { @@ -269,9 +272,9 @@ void *IOT_OTA_Init(const char *product_id, const char *device_name, void *ch_sig goto do_exit; } - h_ota->product_id = product_id; + h_ota->product_id = product_id; h_ota->device_name = device_name; - h_ota->state = IOT_OTAS_INITED; + h_ota->state = IOT_OTAS_INITED; #ifdef OTA_MQTT_CHANNEL h_ota->current_signal_type = MQTT_CHANNEL; #else @@ -298,11 +301,10 @@ do_exit: #undef AOM_INFO_MSG_LEN } - /* Destroy OTA handle and resource */ int IOT_OTA_Destroy(void *handle) { - OTA_Struct_t *h_ota = (OTA_Struct_t*) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; if (NULL == h_ota) { Log_e("handle is NULL"); @@ -334,42 +336,55 @@ int IOT_OTA_Destroy(void *handle) /*support continuous transmission of breakpoints*/ int IOT_OTA_StartDownload(void *handle, uint32_t offset, uint32_t size) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int Ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; + int Ret; - h_ota->size_fetched += offset; - h_ota->ch_fetch = ofc_Init(h_ota->purl, offset, size); + Log_d("to download FW from offset: %u, size: %u", offset, size); + h_ota->size_fetched = offset; + h_ota->ch_fetch = ofc_Init(h_ota->purl, offset, size); if (NULL == h_ota->ch_fetch) { Log_e("Initialize fetch module failed"); - return QCLOUD_ERR_FAILURE; + return QCLOUD_ERR_FAILURE; } - Ret = qcloud_ofc_connect(h_ota->ch_fetch); + Ret = qcloud_ofc_connect(h_ota->ch_fetch); if (QCLOUD_RET_SUCCESS != Ret) { Log_e("Connect fetch module failed"); - h_ota->state = IOT_OTAS_DISCONNECTED; + h_ota->state = IOT_OTAS_DISCONNECTED; } - - return Ret; + + return Ret; } /*support continuous transmission of breakpoints*/ -void IOT_OTA_UpdateClientMd5(void *handle, char * buff, uint32_t size) +void IOT_OTA_UpdateClientMd5(void *handle, char *buff, uint32_t size) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; - qcloud_otalib_md5_update(h_ota->md5, buff, size); + qcloud_otalib_md5_update(h_ota->md5, buff, size); } +/*support continuous transmission of breakpoints*/ +int IOT_OTA_ResetClientMD5(void *handle) +{ + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; + qcloud_otalib_md5_deinit(h_ota->md5); + h_ota->md5 = qcloud_otalib_md5_init(); + if (NULL == h_ota->md5) { + return QCLOUD_ERR_FAILURE; + } + + return QCLOUD_RET_SUCCESS; +} int IOT_OTA_ReportVersion(void *handle, const char *version) { -#define MSG_INFORM_LEN (128) +#define MSG_INFORM_LEN (128) - int ret, len; - char *msg_informed; - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int ret, len; + char * msg_informed; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; POINTER_SANITY_CHECK(handle, IOT_OTA_ERR_INVALID_PARAM); POINTER_SANITY_CHECK(version, IOT_OTA_ERR_INVALID_PARAM); @@ -387,6 +402,8 @@ int IOT_OTA_ReportVersion(void *handle, const char *version) return QCLOUD_ERR_FAILURE; } + IOT_OTA_ResetStatus(h_ota); + if (NULL == (msg_informed = HAL_Malloc(MSG_INFORM_LEN))) { Log_e("allocate for msg_informed failed"); h_ota->err = IOT_OTA_ERR_NOMEM; @@ -397,7 +414,7 @@ int IOT_OTA_ReportVersion(void *handle, const char *version) if (ret != 0) { Log_e("generate inform message failed"); h_ota->err = ret; - ret = QCLOUD_ERR_FAILURE; + ret = QCLOUD_ERR_FAILURE; goto do_exit; } @@ -405,7 +422,7 @@ int IOT_OTA_ReportVersion(void *handle, const char *version) if (0 > ret) { Log_e("Report version failed"); h_ota->err = ret; - ret = QCLOUD_ERR_FAILURE; + ret = QCLOUD_ERR_FAILURE; goto do_exit; } @@ -420,40 +437,38 @@ do_exit: int IOT_OTA_ReportUpgradeBegin(void *handle) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; return IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_BEGIN); } int IOT_OTA_ReportUpgradeSuccess(void *handle, const char *version) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; + int ret; - if(NULL == version){ - ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_SUCCESS); - }else{ - ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_SUCCESS); - } - - return ret; + if (NULL == version) { + ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_SUCCESS); + } else { + ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_SUCCESS); + } + + return ret; } - int IOT_OTA_ReportUpgradeFail(void *handle, const char *version) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; + int ret; - if(NULL == version){ - ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_FAIL); - }else{ - ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_FAIL); - } - - return ret; + if (NULL == version) { + ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_FAIL); + } else { + ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_FAIL); + } + + return ret; } - /* check whether is downloading */ int IOT_OTA_IsFetching(void *handle) { @@ -473,11 +488,10 @@ int IOT_OTA_IsFetching(void *handle) return (IOT_OTAS_FETCHING == h_ota->state); } - /* check whether fetch over */ int IOT_OTA_IsFetchFinish(void *handle) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; if (NULL == handle) { Log_e("handle is NULL"); @@ -493,11 +507,10 @@ int IOT_OTA_IsFetchFinish(void *handle) return (IOT_OTAS_FETCHED == h_ota->state); } - int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeout_ms) { - int ret; - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; POINTER_SANITY_CHECK(handle, IOT_OTA_ERR_INVALID_PARAM); POINTER_SANITY_CHECK(buf, IOT_OTA_ERR_INVALID_PARAM); @@ -511,19 +524,19 @@ int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeo ret = qcloud_ofc_fetch(h_ota->ch_fetch, buf, buf_len, timeout_ms); if (ret < 0) { h_ota->state = IOT_OTAS_FETCHED; - h_ota->err = IOT_OTA_ERR_FETCH_FAILED; + h_ota->err = IOT_OTA_ERR_FETCH_FAILED; - if (ret == IOT_OTA_ERR_FETCH_AUTH_FAIL) { // OTA auth failed + if (ret == IOT_OTA_ERR_FETCH_AUTH_FAIL) { // OTA auth failed IOT_OTA_ReportUpgradeResult(h_ota, h_ota->version, IOT_OTAR_AUTH_FAIL); h_ota->err = ret; - } else if (ret == IOT_OTA_ERR_FETCH_NOT_EXIST) { // fetch not existed + } else if (ret == IOT_OTA_ERR_FETCH_NOT_EXIST) { // fetch not existed IOT_OTA_ReportUpgradeResult(h_ota, h_ota->version, IOT_OTAR_FILE_NOT_EXIST); h_ota->err = ret; - } else if (ret == IOT_OTA_ERR_FETCH_TIMEOUT) { // fetch timeout + } else if (ret == IOT_OTA_ERR_FETCH_TIMEOUT) { // fetch timeout IOT_OTA_ReportUpgradeResult(h_ota, h_ota->version, IOT_OTAR_DOWNLOAD_TIMEOUT); h_ota->err = ret; - } - + } + return ret; } else if (0 == h_ota->size_fetched) { /* force report status in the first */ @@ -554,10 +567,9 @@ int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeo return ret; } - int IOT_OTA_Ioctl(void *handle, IOT_OTA_CmdType type, void *buf, size_t buf_len) { - OTA_Struct_t * h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; POINTER_SANITY_CHECK(handle, IOT_OTA_ERR_INVALID_PARAM); POINTER_SANITY_CHECK(buf, IOT_OTA_ERR_INVALID_PARAM); @@ -611,7 +623,7 @@ int IOT_OTA_Ioctl(void *handle, IOT_OTA_CmdType type, void *buf, size_t buf_len) } else { char md5_str[33]; qcloud_otalib_md5_finalize(h_ota->md5, md5_str); - Log_d("origin=%s, now=%s", h_ota->md5sum, md5_str); + Log_i("FW MD5 check: origin=%s, now=%s", h_ota->md5sum, md5_str); if (0 == strcmp(h_ota->md5sum, md5_str)) { *((uint32_t *)buf) = 1; } else { @@ -631,15 +643,14 @@ int IOT_OTA_Ioctl(void *handle, IOT_OTA_CmdType type, void *buf, size_t buf_len) return 0; } - /* Get last error code */ int IOT_OTA_GetLastError(void *handle) { - OTA_Struct_t * h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; if (NULL == handle) { Log_e("handle is NULL"); - return IOT_OTA_ERR_INVALID_PARAM; + return IOT_OTA_ERR_INVALID_PARAM; } return h_ota->err; diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_coap.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_coap.c new file mode 100644 index 00000000..f4bf0ef1 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_coap.c @@ -0,0 +1,201 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#ifndef OTA_MQTT_CHANNEL + +#include + +#include "ota_client.h" + +typedef struct { + void *coap; + + const char *product_id; + const char *device_name; + + char topic_upgrade[OTA_MAX_TOPIC_LEN]; + + OnOTAMessageCallback msg_callback; + + void *context; +} OTA_CoAP_Struct_t; + +static void _otacoap_upgrage_cb(void *coap_message, void *pcontext) +{ + int ret_code = IOT_COAP_GetMessageCode(coap_message); + + switch (ret_code) { + case COAP_EVENT_RECEIVE_ACK: + Log_i("received OTA message ACK, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_RECEIVE_RESPCONTENT: { + Log_i("received OTA message respconetent."); + char *payload = NULL; + int payload_len = 0; + int ret = -1; + ret = IOT_COAP_GetMessagePayload(coap_message, &payload, &payload_len); + if (ret == QCLOUD_RET_SUCCESS) { + OTA_CoAP_Struct_t *handle = (OTA_CoAP_Struct_t *)pcontext; + if (NULL != handle->msg_callback) { + handle->msg_callback(handle->context, payload, payload_len); + } + } else { + Log_e("message received response, content error."); + } + } break; + case COAP_EVENT_UNAUTHORIZED: + Log_e("coap client auth token expired or invalid, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_FORBIDDEN: + Log_e("coap URI is invalid for this device, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_INTERNAL_SERVER_ERROR: + Log_e("coap server internal error, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_ACK_TIMEOUT: + Log_e("message receive ACK timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + case COAP_EVENT_SEPRESP_TIMEOUT: + Log_i("message received ACK but receive response timeout, msgid: %d", IOT_COAP_GetMessageId(coap_message)); + break; + default: + break; + } +} + +/* Generate topic name according to @OTATopicType, @productId, @deviceName */ +/* and then copy to @buf. */ +/* 0, successful; -1, failed */ +static int _otacoap_gen_topic_name(char *buf, size_t bufLen, const char *OTATopicType, const char *productId, + const char *deviceName) +{ + IOT_FUNC_ENTRY; + + int ret; + + ret = HAL_Snprintf(buf, bufLen, "$ota/%s/%s/%s", OTATopicType, productId, deviceName); + + if (ret >= bufLen) + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + + if (ret < 0) { + Log_e("HAL_Snprintf failed"); + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +/* report progress of OTA */ +static int _otacoap_publish(OTA_CoAP_Struct_t *handle, const char *topicType, const char *msg, bool needResp) +{ + IOT_FUNC_ENTRY; + + int ret; + char topic_name[OTA_MAX_TOPIC_LEN]; + + SendMsgParams send_params = DEFAULT_SENDMSG_PARAMS; + send_params.pay_load = (void *)msg; + send_params.pay_load_len = strlen(msg); + send_params.resp_callback = _otacoap_upgrage_cb; + send_params.need_resp = needResp; + send_params.user_context = handle; + + /* inform OTA to topic: "/ota/device/progress/$(product_id)/$(device_name)" */ + ret = _otacoap_gen_topic_name(topic_name, OTA_MAX_TOPIC_LEN, topicType, handle->product_id, handle->device_name); + if (ret < 0) { + Log_e("generate topic name of info failed"); + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + } + + ret = IOT_COAP_SendMessage(handle->coap, topic_name, &send_params); + if (ret < 0) { + Log_e("publish failed"); + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_OSC_FAILED); + } + + IOT_FUNC_EXIT_RC(ret); +} + +void *qcloud_osc_init(const char *productId, const char *deviceName, void *channel, OnOTAMessageCallback callback, + void *context) +{ + OTA_CoAP_Struct_t *h_osc = NULL; + + if (NULL == (h_osc = HAL_Malloc(sizeof(OTA_CoAP_Struct_t)))) { + Log_e("allocate for h_osc failed"); + goto do_exit; + } + + memset(h_osc, 0, sizeof(OTA_CoAP_Struct_t)); + + h_osc->coap = channel; + h_osc->product_id = productId; + h_osc->device_name = deviceName; + h_osc->msg_callback = callback; + h_osc->context = context; + + return h_osc; + +do_exit: + if (NULL != h_osc) { + HAL_Free(h_osc); + } + + return NULL; +} + +int qcloud_osc_deinit(void *handle) +{ + IOT_FUNC_ENTRY; + + if (NULL != handle) { + HAL_Free(handle); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +/* report progress of OTA */ +int qcloud_osc_report_progress(void *handle, const char *msg) +{ + return _otacoap_publish(handle, "report", msg, false); +} + +/* report version of OTA firmware */ +int qcloud_osc_report_version(void *handle, const char *msg) +{ + return _otacoap_publish(handle, "report", msg, true); +} + +/* report upgrade begin of OTA firmware */ +int qcloud_osc_report_upgrade_result(void *handle, const char *msg) +{ + return _otacoap_publish(handle, "report", msg, false); +} + +/* OSC, OTA signal channel */ +#endif + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_fetch.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c similarity index 66% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_fetch.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c index be163be4..bd5bb782 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_fetch.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_fetch.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -21,41 +21,36 @@ extern "C" { #include +#include "qcloud_iot_ca.h" #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" - -#include "qcloud_iot_ca.h" #include "utils_httpc.h" - - -#define OTA_HTTP_HEAD_CONTENT_LEN 256 +#define OTA_HTTP_HEAD_CONTENT_LEN 256 /* ofc, OTA fetch channel */ typedef struct { - - const char *url; - HTTPClient http; /* http client */ - HTTPClientData http_data; /* http client data */ + const char * url; + HTTPClient http; /* http client */ + HTTPClientData http_data; /* http client data */ } OTAHTTPStruct; #ifdef OTA_USE_HTTPS -static int is_begin_with(const char * str1,char *str2) +static int is_begin_with(const char *str1, char *str2) { - if(str1 == NULL || str2 == NULL) + if (str1 == NULL || str2 == NULL) return -1; int len1 = strlen(str1); int len2 = strlen(str2); - if((len1 < len2) || (len1 == 0 || len2 == 0)) + if ((len1 < len2) || (len1 == 0 || len2 == 0)) return -1; char *p = str2; - int i = 0; - while(*p != '\0') - { - if(*p != str1[i]) - return 0; + int i = 0; + while (*p != '\0') { + if (*p != str1[i]) + return 0; p++; i++; } @@ -64,8 +59,8 @@ static int is_begin_with(const char * str1,char *str2) #endif static char sg_head_content[OTA_HTTP_HEAD_CONTENT_LEN]; -void *ofc_Init(const char *url, uint32_t offset, uint32_t size) -{ +void * ofc_Init(const char *url, uint32_t offset, uint32_t size) +{ OTAHTTPStruct *h_odc; if (NULL == (h_odc = HAL_Malloc(sizeof(OTAHTTPStruct)))) { @@ -74,17 +69,17 @@ void *ofc_Init(const char *url, uint32_t offset, uint32_t size) } memset(h_odc, 0, sizeof(OTAHTTPStruct)); - memset(sg_head_content, 0, OTA_HTTP_HEAD_CONTENT_LEN); - HAL_Snprintf(sg_head_content, OTA_HTTP_HEAD_CONTENT_LEN,\ - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"\ - "Accept-Encoding: gzip, deflate\r\n"\ - "Range: bytes=%d-%d\r\n", - offset, size); + memset(sg_head_content, 0, OTA_HTTP_HEAD_CONTENT_LEN); + HAL_Snprintf(sg_head_content, OTA_HTTP_HEAD_CONTENT_LEN, + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n" + "Accept-Encoding: gzip, deflate\r\n" + "Range: bytes=%d-%d\r\n", + offset, size); - Log_d("head_content:%s", sg_head_content); + Log_d("head_content:%s", sg_head_content); /* set http request-header parameter */ h_odc->http.header = sg_head_content; - h_odc->url = url; + h_odc->url = url; return h_odc; } @@ -93,15 +88,14 @@ int32_t qcloud_ofc_connect(void *handle) { IOT_FUNC_ENTRY; - OTAHTTPStruct * h_odc = (OTAHTTPStruct *)handle; + OTAHTTPStruct *h_odc = (OTAHTTPStruct *)handle; - int port = 80; + int port = 80; const char *ca_crt = NULL; #ifdef OTA_USE_HTTPS - if (is_begin_with(h_odc->url, "https")) - { - port = 443; + if (is_begin_with(h_odc->url, "https")) { + port = 443; ca_crt = iot_https_ca_get(); } #endif @@ -111,36 +105,34 @@ int32_t qcloud_ofc_connect(void *handle) IOT_FUNC_EXIT_RC(rc); } - int32_t qcloud_ofc_fetch(void *handle, char *buf, uint32_t bufLen, uint32_t timeout_s) { IOT_FUNC_ENTRY; - int diff; - OTAHTTPStruct * h_odc = (OTAHTTPStruct *)handle; + int diff; + OTAHTTPStruct *h_odc = (OTAHTTPStruct *)handle; - h_odc->http_data.response_buf = buf; + h_odc->http_data.response_buf = buf; h_odc->http_data.response_buf_len = bufLen; - diff = h_odc->http_data.response_content_len - h_odc->http_data.retrieve_len; - + diff = h_odc->http_data.response_content_len - h_odc->http_data.retrieve_len; + int rc = qcloud_http_recv_data(&h_odc->http, timeout_s * 1000, &h_odc->http_data); if (QCLOUD_RET_SUCCESS != rc) { if (rc == QCLOUD_ERR_HTTP_NOT_FOUND) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_NOT_EXIST); - + if (rc == QCLOUD_ERR_HTTP_AUTH) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_AUTH_FAIL); - + if (rc == QCLOUD_ERR_HTTP_TIMEOUT) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_TIMEOUT); - + IOT_FUNC_EXIT_RC(rc); } IOT_FUNC_EXIT_RC(h_odc->http_data.response_content_len - h_odc->http_data.retrieve_len - diff); } - int qcloud_ofc_deinit(void *handle) { IOT_FUNC_ENTRY; diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_lib.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_lib.c similarity index 57% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_lib.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_lib.c index 5d2cb6d7..53abd0c6 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_lib.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_lib.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -19,74 +19,68 @@ extern "C" { #include "ota_lib.h" -#include #include +#include +#include "lite-utils.h" +#include "ota_client.h" #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" - -#include "ota_client.h" - #include "utils_md5.h" -#include "lite-utils.h" /* Get the specific @key value, and copy to @dest */ /* 0, successful; -1, failed */ -static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const char *key, - char *dest, size_t dest_len) +static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const char *key, char *dest, size_t dest_len) { IOT_FUNC_ENTRY; int ret = QCLOUD_RET_SUCCESS; - char* key_bak = HAL_Malloc(strlen(key) + 1); + char *key_bak = HAL_Malloc(strlen(key) + 1); if (key_bak == NULL) { - Log_e("not enough memory for malloc key"); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc key"); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } - char* json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); + char *json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); if (json_doc_bak == NULL) { - Log_e("not enough memory for malloc json"); - HAL_Free(key_bak); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc json"); + HAL_Free(key_bak); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } strcpy(key_bak, key); strcpy(json_doc_bak, json_doc); - char* value = LITE_json_value_of(key_bak, json_doc_bak); + char *value = LITE_json_value_of(key_bak, json_doc_bak); if (value == NULL) { - Log_e("Not '%s' key in json doc of OTA", key); - ret = IOT_OTA_ERR_FAIL; - } - else { - uint32_t val_len = strlen(value); - if (val_len > dest_len) { - Log_e("value length of the key is too long"); - ret = IOT_OTA_ERR_FAIL; - } - else { - memcpy(dest, value, val_len); - ret = QCLOUD_RET_SUCCESS; - } + Log_e("Not '%s' key in json doc of OTA", key); + ret = IOT_OTA_ERR_FAIL; + } else { + uint32_t val_len = strlen(value); + if (val_len > dest_len) { + Log_e("value length of the key is too long"); + ret = IOT_OTA_ERR_FAIL; + } else { + memcpy(dest, value, val_len); + ret = QCLOUD_RET_SUCCESS; + } - HAL_Free(value); + HAL_Free(value); } - if (key_bak != NULL) { - HAL_Free(key_bak); - } - if (json_doc_bak != NULL) { - HAL_Free(json_doc_bak); - } + if (key_bak != NULL) { + HAL_Free(key_bak); + } + if (json_doc_bak != NULL) { + HAL_Free(json_doc_bak); + } IOT_FUNC_EXIT_RC(ret); } - /* Get variant length parameter of firmware, and copy to @dest */ /* 0, successful; -1, failed */ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const char *key, char **dest) @@ -97,19 +91,19 @@ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const c int ret = QCLOUD_RET_SUCCESS; - char* key_bak = HAL_Malloc(strlen(key) + 1); + char *key_bak = HAL_Malloc(strlen(key) + 1); if (key_bak == NULL) { - Log_e("not enough memory for malloc key"); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc key"); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } - char* json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); + char *json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); if (json_doc_bak == NULL) { - Log_e("not enough memory for malloc json"); - HAL_Free(key_bak); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc json"); + HAL_Free(key_bak); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } strcpy(key_bak, key); @@ -117,16 +111,16 @@ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const c *dest = LITE_json_value_of(key_bak, json_doc_bak); if (*dest == NULL) { - Log_e("Not '%s' key in json '%s' doc of OTA", key_bak, json_doc_bak); - ret = IOT_OTA_ERR_FAIL; + Log_e("Not '%s' key in json '%s' doc of OTA", key_bak, json_doc_bak); + ret = IOT_OTA_ERR_FAIL; } - if (key_bak != NULL) { - HAL_Free(key_bak); - } - if (json_doc_bak != NULL) { - HAL_Free(json_doc_bak); - } + if (key_bak != NULL) { + HAL_Free(key_bak); + } + if (json_doc_bak != NULL) { + HAL_Free(json_doc_bak); + } IOT_FUNC_EXIT_RC(ret); @@ -153,12 +147,12 @@ void qcloud_otalib_md5_update(void *md5, const char *buf, size_t buf_len) void qcloud_otalib_md5_finalize(void *md5, char *output_str) { - int i; + int i; unsigned char buf_out[16]; utils_md5_finish(md5, buf_out); for (i = 0; i < 16; ++i) { - output_str[i * 2] = utils_hb2hex(buf_out[i] >> 4); + output_str[i * 2] = utils_hb2hex(buf_out[i] >> 4); output_str[i * 2 + 1] = utils_hb2hex(buf_out[i]); } output_str[32] = '\0'; @@ -183,19 +177,20 @@ int qcloud_otalib_get_report_version_result(const char *json) char *result_code = NULL; int rc = _qcloud_otalib_get_firmware_varlen_para(json, RESULT_FIELD, &result_code); - if ( rc != QCLOUD_RET_SUCCESS || strcmp(result_code, "0") != 0) { - if(NULL != result_code) HAL_Free(result_code); + if (rc != QCLOUD_RET_SUCCESS || strcmp(result_code, "0") != 0) { + if (NULL != result_code) + HAL_Free(result_code); IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); } - if(NULL != result_code) HAL_Free(result_code); + if (NULL != result_code) + HAL_Free(result_code); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_otalib_get_params(const char *json, char **type, char **url, char **version, char *md5, - uint32_t *fileSize) +int qcloud_otalib_get_params(const char *json, char **type, char **url, char **version, char *md5, uint32_t *fileSize) { -#define OTA_FILESIZE_STR_LEN (16) +#define OTA_FILESIZE_STR_LEN (16) IOT_FUNC_ENTRY; @@ -232,7 +227,7 @@ int qcloud_otalib_get_params(const char *json, char **type, char **url, char **v } file_size_str[OTA_FILESIZE_STR_LEN] = '\0'; - *fileSize = atoi(file_size_str); + *fileSize = atoi(file_size_str); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); @@ -244,10 +239,7 @@ int qcloud_otalib_gen_info_msg(char *buf, size_t bufLen, uint32_t id, const char IOT_FUNC_ENTRY; int ret; - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_version\", \"report\":{\"version\":\"%s\"}}", - version); + ret = HAL_Snprintf(buf, bufLen, "{\"type\": \"report_version\", \"report\":{\"version\":\"%s\"}}", version); if (ret < 0) { Log_e("HAL_Snprintf failed"); @@ -257,7 +249,8 @@ int qcloud_otalib_gen_info_msg(char *buf, size_t bufLen, uint32_t id, const char IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const char *version, int progress, IOT_OTAReportType reportType) +int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const char *version, int progress, + IOT_OTAReportType reportType) { IOT_FUNC_ENTRY; @@ -266,47 +259,48 @@ int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const ch switch (reportType) { /* report OTA download begin */ case IOT_OTAR_DOWNLOAD_BEGIN: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"0\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", version); - break; + ret = HAL_Snprintf(buf, bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", " + "\"percent\":\"0\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", + version); + break; /* report OTA download progress */ case IOT_OTAR_DOWNLOADING: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"%d\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", - progress, version); - break; + ret = HAL_Snprintf(buf, bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", " + "\"percent\":\"%d\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", + progress, version); + break; case IOT_OTAR_DOWNLOAD_TIMEOUT: case IOT_OTAR_FILE_NOT_EXIST: case IOT_OTAR_MD5_NOT_MATCH: case IOT_OTAR_AUTH_FAIL: case IOT_OTAR_UPGRADE_FAIL: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"fail\", \"result_code\":\"%d\", \"result_msg\":\"time_out\"}, \"version\": \"%s\"}}", reportType, version); - break; + ret = HAL_Snprintf(buf, bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"fail\", " + "\"result_code\":\"%d\", \"result_msg\":\"time_out\"}, \"version\": \"%s\"}}", + reportType, version); + break; /* report OTA upgrade begin */ case IOT_OTAR_UPGRADE_BEGIN: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"burning\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", - version); - break; + ret = HAL_Snprintf(buf, bufLen, + "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"burning\", " + "\"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", + version); + break; /* report OTA upgrade finish */ case IOT_OTAR_UPGRADE_SUCCESS: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"done\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", - version); - break; - - default: - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); - break; - } + ret = HAL_Snprintf(buf, bufLen, + "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"done\", " + "\"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", + version); + break; + default: + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + break; + } if (ret < 0) { Log_e("HAL_Snprintf failed"); diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_mqtt.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c similarity index 60% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_mqtt.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c index c3d06a4a..b6f7fb26 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/ota/ota_mqtt.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/ota/ota_mqtt.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -22,27 +22,29 @@ extern "C" { #ifdef OTA_MQTT_CHANNEL -#include "ota_client.h" - #include +#include "ota_client.h" + /* OSC, OTA signal channel */ -typedef struct { - void *mqtt; //MQTT cient +typedef struct { + void *mqtt; // MQTT cient - const char *product_id; - const char *device_name; + const char *product_id; + const char *device_name; - char topic_upgrade[OTA_MAX_TOPIC_LEN]; //OTA MQTT Topic - OnOTAMessageCallback msg_callback; + char topic_upgrade[OTA_MAX_TOPIC_LEN]; // OTA MQTT Topic + OnOTAMessageCallback msg_callback; void *context; + bool topic_ready; } OTA_MQTT_Struct_t; /* Generate topic name according to @OTATopicType, @productId, @deviceName */ /* and then copy to @buf. */ /* 0, successful; -1, failed */ -static int _otamqtt_gen_topic_name(char *buf, size_t bufLen, const char *OTATopicType, const char *productId, const char *deviceName) +static int _otamqtt_gen_topic_name(char *buf, size_t bufLen, const char *OTATopicType, const char *productId, + const char *deviceName) { IOT_FUNC_ENTRY; @@ -50,7 +52,8 @@ static int _otamqtt_gen_topic_name(char *buf, size_t bufLen, const char *OTATopi ret = HAL_Snprintf(buf, bufLen, "$ota/%s/%s/%s", OTATopicType, productId, deviceName); - if(ret >= bufLen) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + if (ret >= bufLen) + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); if (ret < 0) { Log_e("HAL_Snprintf failed"); @@ -65,8 +68,8 @@ static int _otamqtt_publish(OTA_MQTT_Struct_t *handle, const char *topicType, in { IOT_FUNC_ENTRY; - int ret; - char topic_name[OTA_MAX_TOPIC_LEN]; + int ret; + char topic_name[OTA_MAX_TOPIC_LEN]; PublishParams pub_params = DEFAULT_PUB_PARAMS; if (0 == qos) { @@ -74,14 +77,14 @@ static int _otamqtt_publish(OTA_MQTT_Struct_t *handle, const char *topicType, in } else { pub_params.qos = QOS1; } - pub_params.payload = (void *)msg; + pub_params.payload = (void *)msg; pub_params.payload_len = strlen(msg); /* inform OTA to topic: "/ota/device/progress/$(product_id)/$(device_name)" */ ret = _otamqtt_gen_topic_name(topic_name, OTA_MAX_TOPIC_LEN, topicType, handle->product_id, handle->device_name); if (ret < 0) { - Log_e("generate topic name of info failed"); - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + Log_e("generate topic name of info failed"); + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); } ret = IOT_MQTT_Publish(handle->mqtt, topic_name, &pub_params); @@ -97,7 +100,7 @@ static int _otamqtt_publish(OTA_MQTT_Struct_t *handle, const char *topicType, in /* Parse firmware info (version/URL/file size/MD5) from JSON text */ static void _otamqtt_upgrage_cb(void *pClient, MQTTMessage *message, void *pcontext) { - OTA_MQTT_Struct_t *handle = (OTA_MQTT_Struct_t *) pcontext; + OTA_MQTT_Struct_t *handle = (OTA_MQTT_Struct_t *)pcontext; Log_d("topic=%.*s", message->topic_len, message->ptopic); Log_i("len=%u, topic_msg=%.*s", message->payload_len, message->payload_len, (char *)message->payload); @@ -107,9 +110,44 @@ static void _otamqtt_upgrage_cb(void *pClient, MQTTMessage *message, void *pcont } } -void *qcloud_osc_init(const char *productId, const char *deviceName, void *channel, OnOTAMessageCallback callback, void *context) +static void _otamqtt_event_callback(void *pclient, MQTTEventType event_type, void *user_data) { - int ret; + OTA_MQTT_Struct_t *h_osc = (OTA_MQTT_Struct_t *)user_data; + + switch (event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_d("OTA topic subscribe success"); + h_osc->topic_ready = true; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("OTA topic subscribe timeout"); + h_osc->topic_ready = false; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("OTA topic subscribe NACK"); + h_osc->topic_ready = false; + break; + case MQTT_EVENT_UNSUBSCRIBE: + Log_i("OTA topic has been unsubscribed"); + h_osc->topic_ready = false; + ; + break; + case MQTT_EVENT_CLIENT_DESTROY: + Log_i("mqtt client has been destroyed"); + h_osc->topic_ready = false; + ; + break; + default: + return; + } +} + +void *qcloud_osc_init(const char *productId, const char *deviceName, void *channel, OnOTAMessageCallback callback, + void *context) +{ + int ret; OTA_MQTT_Struct_t *h_osc = NULL; if (NULL == (h_osc = HAL_Malloc(sizeof(OTA_MQTT_Struct_t)))) { @@ -126,10 +164,11 @@ void *qcloud_osc_init(const char *productId, const char *deviceName, void *chann goto do_exit; } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _otamqtt_upgrage_cb; - sub_params.qos = QOS1; - sub_params.user_data = h_osc; + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _otamqtt_upgrage_cb; + sub_params.on_sub_event_handler = _otamqtt_event_callback; + sub_params.qos = QOS1; + sub_params.user_data = h_osc; ret = IOT_MQTT_Subscribe(channel, h_osc->topic_upgrade, &sub_params); if (ret < 0) { @@ -137,17 +176,29 @@ void *qcloud_osc_init(const char *productId, const char *deviceName, void *chann goto do_exit; } - h_osc->mqtt = channel; - h_osc->product_id = productId; - h_osc->device_name = deviceName; + int wait_cnt = 10; + while (!h_osc->topic_ready && (wait_cnt > 0)) { + // wait for subscription result + IOT_MQTT_Yield(channel, 200); + wait_cnt--; + } + + if (wait_cnt == 0) { + Log_e("ota mqtt subscribe timeout!"); + goto do_exit; + } + + h_osc->mqtt = channel; + h_osc->product_id = productId; + h_osc->device_name = deviceName; h_osc->msg_callback = callback; - h_osc->context = context; + h_osc->context = context; return h_osc; do_exit: if (NULL != h_osc) { - HAL_Free(h_osc); + HAL_Free(h_osc); } return NULL; @@ -158,6 +209,8 @@ int qcloud_osc_deinit(void *handle) IOT_FUNC_ENTRY; if (NULL != handle) { + OTA_MQTT_Struct_t *h_osc = (OTA_MQTT_Struct_t *)handle; + IOT_MQTT_Unsubscribe(h_osc->mqtt, h_osc->topic_upgrade); HAL_Free(handle); } @@ -182,7 +235,7 @@ int qcloud_osc_report_upgrade_result(void *handle, const char *msg) return _otamqtt_publish(handle, "report", QOS1, msg); } -#endif +#endif #ifdef __cplusplus } diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client.c new file mode 100644 index 00000000..9192c647 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client.c @@ -0,0 +1,897 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "shadow_client.h" + +#include +#include +#include + +#include "shadow_client_common.h" +#include "shadow_client_json.h" +#include "utils_param_check.h" + +static void _init_request_params(RequestParams *pParams, Method method, OnRequestCallback callback, void *userContext, + uint8_t timeout_sec) +{ + pParams->method = method; + pParams->user_context = userContext; + pParams->timeout_sec = timeout_sec; + pParams->request_callback = callback; +} + +/** + * @brief check return value of snprintf + * + * @param returnCode return value of snprintf + * @param maxSizeOfWrite max size of write buffer + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +static inline int _check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) +{ + if (returnCode >= maxSizeOfWrite) { + return QCLOUD_ERR_JSON_BUFFER_TRUNCATED; + } else if (returnCode < 0) { + return QCLOUD_ERR_JSON; + } + + return QCLOUD_RET_SUCCESS; +} + +static void _shadow_event_handler(void *pclient, void *context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + Qcloud_IoT_Shadow *shadow_client = (Qcloud_IoT_Shadow *)context; + MQTTMessage * topic_info = (MQTTMessage *)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_d("shadow subscribe success, packet-id=%u", (unsigned int)packet_id); + if (shadow_client->inner_data.sync_status > 0) + shadow_client->inner_data.sync_status = 0; + break; + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_d("shadow subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + if (shadow_client->inner_data.sync_status > 0) + shadow_client->inner_data.sync_status = -1; + break; + case MQTT_EVENT_SUBCRIBE_NACK: + Log_d("shadow subscribe nack, packet-id=%u", (unsigned int)packet_id); + if (shadow_client->inner_data.sync_status > 0) + shadow_client->inner_data.sync_status = -1; + break; + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_d("shadow topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + topic_info->topic_len, topic_info->ptopic, topic_info->payload_len, topic_info->payload); + break; + default: + /* Log_i("Should NOT arrive here."); */ + break; + } + if (shadow_client->event_handle.h_fp != NULL) { + shadow_client->event_handle.h_fp(shadow_client, shadow_client->event_handle.context, msg); + } +} + +static void _copy_shadow_init_params_to_mqtt(MQTTInitParams *pMqttInitParams, ShadowInitParams *shadowInitParams) +{ + pMqttInitParams->device_name = shadowInitParams->device_name; + pMqttInitParams->product_id = shadowInitParams->product_id; + +#ifdef AUTH_MODE_CERT + memcpy(pMqttInitParams->cert_file, shadowInitParams->cert_file, FILE_PATH_MAX_LEN); + memcpy(pMqttInitParams->key_file, shadowInitParams->key_file, FILE_PATH_MAX_LEN); +#else + pMqttInitParams->device_secret = shadowInitParams->device_secret; +#endif + + pMqttInitParams->command_timeout = shadowInitParams->command_timeout; + pMqttInitParams->keep_alive_interval_ms = shadowInitParams->keep_alive_interval_ms; + pMqttInitParams->clean_session = shadowInitParams->clean_session; + pMqttInitParams->auto_connect_enable = shadowInitParams->auto_connect_enable; +} + +static void _update_ack_cb(void *pClient, Method method, RequestAck requestAck, const char *pReceivedJsonDocument, + void *pUserdata) +{ + Log_d("requestAck=%d", requestAck); + + if (NULL != pReceivedJsonDocument) { + Log_d("Received Json Document=%s", pReceivedJsonDocument); + } else { + Log_d("Received Json Document is NULL"); + } + + *((RequestAck *)pUserdata) = requestAck; +} + +void *IOT_Shadow_Construct(ShadowInitParams *pParams) +{ + POINTER_SANITY_CHECK(pParams, NULL); + + Qcloud_IoT_Shadow *shadow_client = NULL; + if ((shadow_client = (Qcloud_IoT_Shadow *)HAL_Malloc(sizeof(Qcloud_IoT_Shadow))) == NULL) { + Log_e("memory not enough to malloc ShadowClient"); + return NULL; + } + + MQTTInitParams mqtt_init_params; + _copy_shadow_init_params_to_mqtt(&mqtt_init_params, pParams); + + mqtt_init_params.event_handle.h_fp = _shadow_event_handler; + mqtt_init_params.event_handle.context = shadow_client; + + void *mqtt_client = NULL; + if ((mqtt_client = IOT_MQTT_Construct(&mqtt_init_params)) == NULL) { + HAL_Free(shadow_client); + goto End; + } + + memset(shadow_client, 0, sizeof(Qcloud_IoT_Shadow)); + shadow_client->mqtt = mqtt_client; + shadow_client->shadow_type = pParams->shadow_type; + shadow_client->event_handle = pParams->event_handle; + shadow_client->inner_data.result_topic = NULL; + shadow_client->inner_data.token_num = 0; + + int rc; + + rc = qcloud_iot_shadow_init(shadow_client); + if (rc != QCLOUD_RET_SUCCESS) { + IOT_Shadow_Destroy(shadow_client); + goto End; + } + + rc = subscribe_operation_result_to_cloud(shadow_client); + if (rc < 0) { + Log_e("Subcribe $shadow/operation/results fail!"); + } else { + shadow_client->inner_data.sync_status = rc; + while (rc == shadow_client->inner_data.sync_status) { + IOT_Shadow_Yield(shadow_client, 100); + } + if (0 == shadow_client->inner_data.sync_status) { + Log_i("Sync device data successfully"); + } else { + Log_e("Sync device data failed"); + } + } + + return shadow_client; + +End: + return NULL; +} + +void *IOT_Shadow_Get_Mqtt_Client(void *handle) +{ + POINTER_SANITY_CHECK(handle, NULL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + return shadow->mqtt; +} + +int IOT_Shadow_Publish(void *handle, char *topicName, PublishParams *pParams) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + return qcloud_iot_mqtt_publish(shadow->mqtt, topicName, pParams); +} + +int IOT_Shadow_Subscribe(void *handle, char *topicFilter, SubscribeParams *pParams) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + return qcloud_iot_mqtt_subscribe(shadow->mqtt, topicFilter, pParams); +} + +int IOT_Shadow_Unsubscribe(void *handle, char *topicFilter) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + return qcloud_iot_mqtt_unsubscribe(shadow->mqtt, topicFilter); +} + +bool IOT_Shadow_IsConnected(void *handle) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + + IOT_FUNC_EXIT_RC(IOT_MQTT_IsConnected(pshadow->mqtt)) +} + +int IOT_Shadow_Destroy(void *handle) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow_client = (Qcloud_IoT_Shadow *)handle; + qcloud_iot_shadow_reset(handle); + + IOT_MQTT_Destroy(&shadow_client->mqtt); + + if (NULL != shadow_client->mutex) { + HAL_MutexDestroy(shadow_client->mutex); + } + + if (NULL != shadow_client->inner_data.result_topic) { + HAL_Free(shadow_client->inner_data.result_topic); + shadow_client->inner_data.result_topic = NULL; + } + + HAL_Free(handle); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + +int IOT_Shadow_Yield(void *handle, uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY; + int rc; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); + + handle_expired_request(pshadow); + + rc = IOT_MQTT_Yield(pshadow->mqtt, timeout_ms); + + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Shadow_Register_Property(void *handle, DeviceProperty *pProperty, OnPropRegCallback callback) +{ + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + int rc; + + if (IOT_MQTT_IsConnected(pshadow->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + if (shadow_common_check_property_existence(pshadow, pProperty)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_SHADOW_PROPERTY_EXIST); + + rc = shadow_common_register_property_on_delta(pshadow, pProperty, callback); + + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Shadow_UnRegister_Property(void *handle, DeviceProperty *pProperty) +{ + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + + if (IOT_MQTT_IsConnected(pshadow->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + if (!shadow_common_check_property_existence(pshadow, pProperty)) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_SHADOW_NOT_PROPERTY_EXIST); + } + int rc = shadow_common_remove_property(pshadow, pProperty); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Shadow_Update(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnRequestCallback callback, void *userContext, + uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY; + int rc; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { + Log_e("shadow is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + // subscribe topic $shadow/operation/result if not subscribed yet + if (shadow->inner_data.sync_status < 0) { + subscribe_operation_result_to_cloud(shadow); + } + + Log_d("UPDATE Request Document: %s", pJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, UPDATE, callback, userContext, timeout_ms / 1000); + + rc = do_shadow_request(shadow, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Shadow_Update_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { + Log_e("shadow is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + RequestAck ack_update = ACK_NONE; + rc = IOT_Shadow_Update(handle, pJsonDoc, sizeOfBuffer, _update_ack_cb, &ack_update, timeout_ms); + if (rc != QCLOUD_RET_SUCCESS) + IOT_FUNC_EXIT_RC(rc); + + while (ACK_NONE == ack_update) { + IOT_Shadow_Yield(handle, 200); + } + + if (ACK_ACCEPTED == ack_update) { + rc = QCLOUD_RET_SUCCESS; + } else if (ACK_TIMEOUT == ack_update) { + rc = QCLOUD_ERR_SHADOW_UPDATE_TIMEOUT; + } else if (ACK_REJECTED == ack_update) { + rc = QCLOUD_ERR_SHADOW_UPDATE_REJECTED; + } + + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Shadow_Get(void *handle, OnRequestCallback callback, void *userContext, uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY; + int rc; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + // subscribe topic $shadow/operation/result if not subscribed yet + if (shadow->inner_data.sync_status < 0) { + subscribe_operation_result_to_cloud(shadow); + } + + char getRequestJsonDoc[MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN]; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)shadow->mqtt; + build_empty_json(&(shadow->inner_data.token_num), getRequestJsonDoc, mqtt_client->device_info.product_id); + Log_d("GET Request Document: %s", getRequestJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, GET, callback, userContext, timeout_ms / 1000); + + rc = do_shadow_request(shadow, &request_params, getRequestJsonDoc, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN); + IOT_FUNC_EXIT_RC(rc); +} + +int IOT_Shadow_Get_Sync(void *handle, uint32_t timeout_ms) +{ + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + if (IOT_MQTT_IsConnected(shadow->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + RequestAck ack_update = ACK_NONE; + rc = IOT_Shadow_Get(handle, _update_ack_cb, &ack_update, timeout_ms); + if (rc != QCLOUD_RET_SUCCESS) + IOT_FUNC_EXIT_RC(rc); + + while (ACK_NONE == ack_update) { + IOT_Shadow_Yield(handle, 200); + } + + if (ACK_ACCEPTED == ack_update) { + rc = QCLOUD_RET_SUCCESS; + } else if (ACK_TIMEOUT == ack_update) { + rc = QCLOUD_ERR_SHADOW_GET_TIMEOUT; + } else if (ACK_REJECTED == ack_update) { + rc = QCLOUD_ERR_SHADOW_GET_REJECTED; + } + + IOT_FUNC_EXIT_RC(rc); +} + +/** + * @brief Init a shadow JSON string, add the initial field of "{\"state\":{" + * + * @param jsonBuffer JSON string buffer + * @param sizeOfBuffer buffer size + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +static int IOT_Shadow_JSON_Init(Qcloud_IoT_Shadow *pShadow, char *jsonBuffer, size_t sizeOfBuffer, bool overwrite) +{ + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + int32_t rc_of_snprintf = 0; + if (overwrite) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"overwriteUpdate\":true, \"state\":{"); + } else { + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"state\":{"); + } + + return _check_snprintf_return(rc_of_snprintf, sizeOfBuffer); +} + +/** + * @brief Finish a shadow JSON string, append the tail fields of clientToken and version + * + * @param jsonBuffer JSON string buffer + * @param sizeOfBuffer buffer size + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +static int IOT_Shadow_JSON_Finalize(Qcloud_IoT_Shadow *pShadow, char *jsonBuffer, size_t sizeOfBuffer) +{ + int rc; + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}, \"%s\":\"", CLIENT_TOKEN_FIELD); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pShadow->mqtt; + rc_of_snprintf = generate_client_token(jsonBuffer + strlen(jsonBuffer), remain_size, + &(pShadow->inner_data.token_num), mqtt_client->device_info.product_id); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"}"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + return rc; +} + +int IOT_Shadow_JSON_ConstructReport(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) +{ + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); + + int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, false); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json init failed: %d", rc); + return rc; + } + + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + int8_t i; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + va_list pArgs; + va_start(pArgs, count); + + for (i = 0; i < count; i++) { + DeviceProperty *pJsonNode; + pJsonNode = va_arg(pArgs, DeviceProperty *); + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + va_end(pArgs); + return rc; + } + } else { + va_end(pArgs); + return QCLOUD_ERR_INVAL; + } + } + + va_end(pArgs); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json add report failed: %d", rc); + return rc; + } + + rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json finalize failed: %d", rc); + } + + return rc; +} + +int IOT_Shadow_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, + DeviceProperty *pDeviceProperties[]) +{ + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pDeviceProperties, QCLOUD_ERR_INVAL); + + int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, false); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json init failed: %d", rc); + return rc; + } + + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + int8_t i; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + for (i = 0; i < count; i++) { + DeviceProperty *pJsonNode = pDeviceProperties[i]; + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + return QCLOUD_ERR_INVAL; + } + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json add report failed: %d", rc); + return rc; + } + + rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json finalize failed: %d", rc); + } + + return rc; +} + +int IOT_Shadow_JSON_Construct_OverwriteReport(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) +{ + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + POINTER_SANITY_CHECK(pshadow, QCLOUD_ERR_INVAL); + + int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, true); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json init failed: %d", rc); + return rc; + } + + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + int8_t i; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + va_list pArgs; + va_start(pArgs, count); + + for (i = 0; i < count; i++) { + DeviceProperty *pJsonNode; + pJsonNode = va_arg(pArgs, DeviceProperty *); + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + va_end(pArgs); + return rc; + } + } else { + va_end(pArgs); + return QCLOUD_ERR_INVAL; + } + } + + va_end(pArgs); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json add report failed: %d", rc); + return rc; + } + + rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json finalize failed: %d", rc); + } + + return rc; +} + +int IOT_Shadow_JSON_ConstructReportAndDesireAllNull(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, + ...) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Shadow *pshadow = (Qcloud_IoT_Shadow *)handle; + + int rc = IOT_Shadow_JSON_Init(pshadow, jsonBuffer, sizeOfBuffer, false); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json init failed: %d", rc); + return rc; + } + + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + int8_t i; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"reported\":{"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + va_list pArgs; + va_start(pArgs, count); + + for (i = 0; i < count; i++) { + DeviceProperty *pJsonNode; + pJsonNode = va_arg(pArgs, DeviceProperty *); + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + va_end(pArgs); + return rc; + } + } else { + va_end(pArgs); + return QCLOUD_ERR_INVAL; + } + } + + va_end(pArgs); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json add report failed: %d", rc); + return rc; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"desired\": null "); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + rc = IOT_Shadow_JSON_Finalize(pshadow, jsonBuffer, sizeOfBuffer); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json finalize failed: %d", rc); + } + + return rc; +} + +int IOT_Shadow_JSON_ConstructDesireAllNull(void *handle, char *jsonBuffer, size_t sizeOfBuffer) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + int rc = IOT_Shadow_JSON_Init(shadow, jsonBuffer, sizeOfBuffer, false); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json init failed: %d", rc); + return rc; + } + + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"desired\": null "); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + rc = IOT_Shadow_JSON_Finalize(shadow, jsonBuffer, sizeOfBuffer); + return rc; +} + +int IOT_Shadow_JSON_ConstructDesirePropNull(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, ...) +{ + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Shadow *shadow = (Qcloud_IoT_Shadow *)handle; + + int rc = IOT_Shadow_JSON_Init(shadow, jsonBuffer, sizeOfBuffer, false); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json init failed: %d", rc); + return rc; + } + + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + int8_t i; + + if (jsonBuffer == NULL) { + return QCLOUD_ERR_INVAL; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"desired\":{"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + va_list pArgs; + va_start(pArgs, count); + + for (i = 0; i < count; i++) { + DeviceProperty *pJsonNode; + pJsonNode = va_arg(pArgs, DeviceProperty *); + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + if (rc != QCLOUD_RET_SUCCESS) { + va_end(pArgs); + return rc; + } + } else { + va_end(pArgs); + return QCLOUD_ERR_INVAL; + } + } + + va_end(pArgs); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + // strlen(jsonBuffer) - 1 to remove last comma + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("shadow json add desired failed: %d", rc); + return rc; + } + + rc = IOT_Shadow_JSON_Finalize(shadow, jsonBuffer, sizeOfBuffer); + return rc; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_common.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_common.c similarity index 88% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_common.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_common.c index f75c0aca..3acab0f6 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_common.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_common.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -18,16 +18,16 @@ extern "C" { #endif #include "shadow_client_common.h" + #include "qcloud_iot_import.h" - -static int _add_property_handle_to_list(Qcloud_IoT_Shadow *pShadow, DeviceProperty *pProperty, OnPropRegCallback callback) +static int _add_property_handle_to_list(Qcloud_IoT_Shadow *pShadow, DeviceProperty *pProperty, + OnPropRegCallback callback) { IOT_FUNC_ENTRY; PropertyHandler *property_handle = (PropertyHandler *)HAL_Malloc(sizeof(PropertyHandler)); - if (NULL == property_handle) - { + if (NULL == property_handle) { Log_e("run memory malloc is error!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -38,6 +38,7 @@ static int _add_property_handle_to_list(Qcloud_IoT_Shadow *pShadow, DeviceProper ListNode *node = list_node_new(property_handle); if (NULL == node) { Log_e("run list_node_new is error!"); + HAL_Free(property_handle); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } list_rpush(pShadow->inner_data.property_handle_list, node); @@ -70,11 +71,12 @@ int shadow_common_remove_property(Qcloud_IoT_Shadow *pshadow, DeviceProperty *pP list_remove(pshadow->inner_data.property_handle_list, node); } HAL_MutexUnlock(pshadow->mutex); - + return rc; } -int shadow_common_register_property_on_delta(Qcloud_IoT_Shadow *pShadow, DeviceProperty *pProperty, OnPropRegCallback callback) +int shadow_common_register_property_on_delta(Qcloud_IoT_Shadow *pShadow, DeviceProperty *pProperty, + OnPropRegCallback callback) { IOT_FUNC_ENTRY; diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_json.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_json.c new file mode 100644 index 00000000..ef8929af --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_json.c @@ -0,0 +1,324 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "shadow_client_json.h" + +#include +#include +#include +#include +#include + +#include "lite-utils.h" +#include "qcloud_iot_device.h" +#include "shadow_client.h" + +static int _direct_update_value(char *value, DeviceProperty *pProperty) +{ + int rc = QCLOUD_RET_SUCCESS; + + if (pProperty->type == JBOOL) { + rc = LITE_get_boolean(pProperty->data, value); + } else if (pProperty->type == JINT32) { + rc = LITE_get_int32(pProperty->data, value); + } else if (pProperty->type == JINT16) { + rc = LITE_get_int16(pProperty->data, value); + } else if (pProperty->type == JINT8) { + rc = LITE_get_int8(pProperty->data, value); + } else if (pProperty->type == JUINT32) { + rc = LITE_get_uint32(pProperty->data, value); + } else if (pProperty->type == JUINT16) { + rc = LITE_get_uint16(pProperty->data, value); + } else if (pProperty->type == JUINT8) { + rc = LITE_get_uint8(pProperty->data, value); + } else if (pProperty->type == JFLOAT) { + rc = LITE_get_float(pProperty->data, value); + } else if (pProperty->type == JDOUBLE) { + rc = LITE_get_double(pProperty->data, value); + } else if (pProperty->type == JSTRING) { + // Log_d("string type wait to be deal,%s",value); + } else if (pProperty->type == JOBJECT) { + // Log_d("Json type wait to be deal,%s",value); + } else { + Log_e("pProperty type unknow,%d", pProperty->type); + } + + return rc; +} + +/** + * @brief check return value of snprintf + * + * @param returnCode return value of snprintf + * @param maxSizeOfWrite max size of write buffer + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +static inline int _check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) +{ + if (returnCode >= maxSizeOfWrite) { + return QCLOUD_ERR_JSON_BUFFER_TRUNCATED; + } else if (returnCode < 0) { + return QCLOUD_ERR_JSON; + } + + return QCLOUD_RET_SUCCESS; +} + +int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) +{ + int rc; + int32_t rc_of_snprintf = 0; + size_t remain_size = 0; + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\":", pKey); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + if (pData == NULL) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "null,"); + } else { + if (type == JINT32) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIi32 ",", *(int32_t *)(pData)); + } else if (type == JINT16) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIi16 ",", *(int16_t *)(pData)); + } else if (type == JINT8) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIi8 ",", *(int8_t *)(pData)); + } else if (type == JUINT32) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIu32 ",", *(uint32_t *)(pData)); + } else if (type == JUINT16) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIu16 ",", *(uint16_t *)(pData)); + } else if (type == JUINT8) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIu8 ",", *(uint8_t *)(pData)); + } else if (type == JDOUBLE) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *)(pData)); + } else if (type == JFLOAT) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *)(pData)); + } else if (type == JBOOL) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", *(bool *)(pData) ? "true" : "false"); + } else if (type == JSTRING) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *)(pData)); + } else if (type == JOBJECT) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", (char *)(pData)); + } + } + + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + return rc; +} + +int event_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) +{ + int rc; + int32_t rc_of_snprintf = 0; + size_t remain_size = 0; + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\":", pKey); + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + if (pData == NULL) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "null,"); + } else { + if (type == JINT32) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIi32 ",", *(int32_t *)(pData)); + } else if (type == JINT16) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIi16 ",", *(int16_t *)(pData)); + } else if (type == JINT8) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIi8 ",", *(int8_t *)(pData)); + } else if (type == JUINT32) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIu32 ",", *(uint32_t *)(pData)); + } else if (type == JUINT16) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIu16 ",", *(uint16_t *)(pData)); + } else if (type == JUINT8) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" PRIu8 ",", *(uint8_t *)(pData)); + } else if (type == JDOUBLE) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *)(pData)); + } else if (type == JFLOAT) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *)(pData)); + } else if (type == JBOOL) { + rc_of_snprintf = + HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%u,", *(bool *)(pData) ? 1 : 0); + } else if (type == JSTRING) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *)(pData)); + } else if (type == JOBJECT) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", (char *)(pData)); + } + } + + rc = _check_snprintf_return(rc_of_snprintf, remain_size); + + return rc; +} + +int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber, char *product_id) +{ + return HAL_Snprintf(pStrBuffer, sizeOfBuffer, "%s-%u", product_id, (*tokenNumber)++); +} + +void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer, char *product_id) +{ + HAL_Snprintf(pJsonBuffer, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN, "{\"clientToken\":\"%s-%u\"}", product_id, + (*tokenNumber)++); +} + +bool parse_client_token(char *pJsonDoc, char **pClientToken) +{ + *pClientToken = LITE_json_value_of(CLIENT_TOKEN_FIELD, pJsonDoc); + return *pClientToken == NULL ? false : true; +} + +bool parse_version_num(char *pJsonDoc, uint32_t *pVersionNumber) +{ + bool ret = false; + + char *version_num = LITE_json_value_of(PAYLOAD_VERSION, pJsonDoc); + if (version_num == NULL) + return false; + + if (sscanf(version_num, "%" SCNu32, pVersionNumber) != 1) { + Log_e("parse shadow version failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } + + HAL_Free(version_num); + + return ret; +} + +bool parse_shadow_state(char *pJsonDoc, char **pState) +{ + *pState = LITE_json_value_of(PAYLOAD_VERSION, pJsonDoc); + return *pState == NULL ? false : true; +} + +bool parse_code_return(char *pJsonDoc, int32_t *pCode) +{ + bool ret = false; + + char *code = LITE_json_value_of(REPLY_CODE, pJsonDoc); + if (code == NULL) + return false; + + if (sscanf(code, "%" SCNi32, pCode) != 1) { + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } + + HAL_Free(code); + + return ret; +} + +bool parse_status_return(char *pJsonDoc, char **pStatus) +{ + *pStatus = LITE_json_value_of(REPLY_STATUS, pJsonDoc); + return *pStatus == NULL ? false : true; +} + +bool parse_shadow_operation_type(char *pJsonDoc, char **pType) +{ + *pType = LITE_json_value_of(TYPE_FIELD, pJsonDoc); + return *pType == NULL ? false : true; +} + +bool parse_shadow_operation_result_code(char *pJsonDoc, int16_t *pResultCode) +{ + bool ret = false; + + char *result_code = LITE_json_value_of(RESULT_FIELD, pJsonDoc); + if (result_code == NULL) + return false; + + if (sscanf(result_code, "%" SCNi16, pResultCode) != 1) { + Log_e("parse shadow result_code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } + + HAL_Free(result_code); + + return ret; +} + +bool parse_shadow_operation_delta(char *pJsonDoc, char **pDelta) +{ + *pDelta = LITE_json_value_of(PAYLOAD_STATE, pJsonDoc); + return *pDelta == NULL ? false : true; +} + +bool parse_shadow_operation_get(char *pJsonDoc, char **pDelta) +{ + *pDelta = LITE_json_value_of(PAYLOAD_STATE_DELTA, pJsonDoc); + return *pDelta == NULL ? false : true; +} + +bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty) +{ + bool ret = false; + + char *property_data = LITE_json_value_of(pProperty->key, pJsonDoc); + if ((property_data == NULL) || !(strncmp(property_data, "null", 4)) || !(strncmp(property_data, "NULL", 4))) { + } else { + _direct_update_value(property_data, pProperty); + ret = true; + HAL_Free(property_data); + } + + return ret; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_manager.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_manager.c similarity index 62% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_manager.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_manager.c index 6e2ccec0..38061780 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/shadow/shadow_client_manager.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/shadow/shadow_client_manager.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,46 +17,36 @@ extern "C" { #endif -#include -#include #include #include +#include +#include -#include "shadow_client.h" - -#include "utils_param_check.h" #include "qcloud_iot_import.h" - +#include "shadow_client.h" #include "shadow_client_json.h" - #include "utils_list.h" - - +#include "utils_param_check.h" /** * @brief type for document request */ typedef struct { - char client_token[MAX_SIZE_OF_CLIENT_TOKEN]; // clientToken - Method method; // method type + char client_token[MAX_SIZE_OF_CLIENT_TOKEN]; // clientToken + Method method; // method type - void *user_context; // user context - Timer timer; // timer for timeout + void *user_context; // user context + Timer timer; // timer for timeout - OnRequestCallback callback; // request response callback + OnRequestCallback callback; // request response callback } Request; - - -static char cloud_rcv_buf[CLOUD_IOT_JSON_RX_BUF_LEN]; - -bool discard_old_delta_flag = true; - -typedef void (*TraverseHandle)(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, const char *pType); +typedef void (*TraverseHandle)(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, + const char *pType); static void _on_operation_result_handler(void *pClient, MQTTMessage *message, void *pUserdata); -static void _handle_delta(Qcloud_IoT_Shadow *pShadow, char* delta_str); +static void _handle_delta(Qcloud_IoT_Shadow *pShadow, char *delta_str); static int _set_shadow_json_type(char *pJsonDoc, size_t sizeOfBuffer, Method method); @@ -64,16 +54,20 @@ static int _publish_operation_to_cloud(Qcloud_IoT_Shadow *pShadow, Method method static int _add_request_to_list(Qcloud_IoT_Shadow *pShadow, const char *pClientToken, RequestParams *pParams); -static int _unsubscribe_operation_result_to_cloud(void *pClient); +static int _unsubscribe_operation_result_to_cloud(Qcloud_IoT_Shadow *pShadow); -static void _traverse_list(Qcloud_IoT_Shadow *pShadow, List *list, const char *pClientToken, const char *pType, TraverseHandle traverseHandle); +static void _traverse_list(Qcloud_IoT_Shadow *pShadow, List *list, const char *pClientToken, const char *pType, + TraverseHandle traverseHandle); -static void _handle_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, const char *pType); +static void _handle_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, + const char *pType); -static void _handle_expired_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, const char *pType); +static void _handle_expired_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, + const char *pClientToken, const char *pType); -int qcloud_iot_shadow_init(Qcloud_IoT_Shadow *pShadow) { - IOT_FUNC_ENTRY; +int qcloud_iot_shadow_init(Qcloud_IoT_Shadow *pShadow) +{ + IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pShadow, QCLOUD_ERR_INVAL); @@ -82,28 +76,26 @@ int qcloud_iot_shadow_init(Qcloud_IoT_Shadow *pShadow) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); pShadow->inner_data.property_handle_list = list_new(); - if (pShadow->inner_data.property_handle_list) - { + if (pShadow->inner_data.property_handle_list) { pShadow->inner_data.property_handle_list->free = HAL_Free; - } - else { - Log_e("no memory to allocate property_handle_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } else { + Log_e("no memory to allocate property_handle_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - pShadow->inner_data.request_list = list_new(); - if (pShadow->inner_data.request_list) - { - pShadow->inner_data.request_list->free = HAL_Free; - } else { - Log_e("no memory to allocate request_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } + pShadow->inner_data.request_list = list_new(); + if (pShadow->inner_data.request_list) { + pShadow->inner_data.request_list->free = HAL_Free; + } else { + Log_e("no memory to allocate request_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -void qcloud_iot_shadow_reset(void *pClient) { +void qcloud_iot_shadow_reset(void *pClient) +{ POINTER_SANITY_CHECK_RTN(pClient); Qcloud_IoT_Shadow *shadow_client = (Qcloud_IoT_Shadow *)pClient; @@ -111,15 +103,15 @@ void qcloud_iot_shadow_reset(void *pClient) { list_destroy(shadow_client->inner_data.property_handle_list); } - _unsubscribe_operation_result_to_cloud(shadow_client->mqtt); + _unsubscribe_operation_result_to_cloud(shadow_client); - if (shadow_client->inner_data.request_list) - { + if (shadow_client->inner_data.request_list) { list_destroy(shadow_client->inner_data.request_list); } } -void handle_expired_request(Qcloud_IoT_Shadow *pShadow) { +void handle_expired_request(Qcloud_IoT_Shadow *pShadow) +{ IOT_FUNC_ENTRY; _traverse_list(pShadow, pShadow->inner_data.request_list, NULL, NULL, _handle_expired_request_callback); @@ -136,7 +128,7 @@ int do_shadow_request(Qcloud_IoT_Shadow *pShadow, RequestParams *pParams, char * POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); - char* client_token = NULL; + char *client_token = NULL; if (!parse_client_token(pJsonDoc, &client_token)) { Log_e("fail to parse client token!"); @@ -168,20 +160,23 @@ int subscribe_operation_result_to_cloud(Qcloud_IoT_Shadow *pShadow) IOT_FUNC_ENTRY; int rc; - int size; - + int size; + if (pShadow->inner_data.result_topic == NULL) { char *operation_result_topic = (char *)HAL_Malloc(MAX_SIZE_OF_CLOUD_TOPIC * sizeof(char)); - if (operation_result_topic == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + if (operation_result_topic == NULL) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); memset(operation_result_topic, 0x0, MAX_SIZE_OF_CLOUD_TOPIC); - if(eTEMPLATE == pShadow->shadow_type){ - size = HAL_Snprintf(operation_result_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$template/operation/result/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - }else{ - size = HAL_Snprintf(operation_result_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$shadow/operation/result/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - } - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pShadow->mqtt; + if (eTEMPLATE == pShadow->shadow_type) { + size = HAL_Snprintf(operation_result_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$template/operation/result/%s/%s", + mqtt_client->device_info.product_id, mqtt_client->device_info.device_name); + } else { + size = HAL_Snprintf(operation_result_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$shadow/operation/result/%s/%s", + mqtt_client->device_info.product_id, mqtt_client->device_info.device_name); + } + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); HAL_Free(operation_result_topic); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); @@ -189,9 +184,9 @@ int subscribe_operation_result_to_cloud(Qcloud_IoT_Shadow *pShadow) pShadow->inner_data.result_topic = operation_result_topic; } - SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; + SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; subscribe_params.on_message_handler = _on_operation_result_handler; - subscribe_params.qos = QOS0; + subscribe_params.qos = QOS0; rc = IOT_MQTT_Subscribe(pShadow->mqtt, pShadow->inner_data.result_topic, &subscribe_params); if (rc < 0) { @@ -215,24 +210,26 @@ static int _publish_operation_to_cloud(Qcloud_IoT_Shadow *pShadow, Method method int rc = QCLOUD_RET_SUCCESS; char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - int size; - - if(eTEMPLATE == pShadow->shadow_type){ - size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$template/operation/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - }else{ - size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$shadow/operation/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - } + int size; - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pShadow->mqtt; + if (eTEMPLATE == pShadow->shadow_type) { + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$template/operation/%s/%s", + mqtt_client->device_info.product_id, mqtt_client->device_info.device_name); + } else { + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$shadow/operation/%s/%s", + mqtt_client->device_info.product_id, mqtt_client->device_info.device_name); + } + + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } PublishParams pubParams = DEFAULT_PUB_PARAMS; - pubParams.qos = QOS0; - pubParams.payload_len = strlen(pJsonDoc); - pubParams.payload = (char *) pJsonDoc; + pubParams.qos = QOS0; + pubParams.payload_len = strlen(pJsonDoc); + pubParams.payload = (char *)pJsonDoc; rc = IOT_MQTT_Publish(pShadow->mqtt, topic, &pubParams); @@ -249,17 +246,17 @@ static void _on_operation_result_handler(void *pClient, MQTTMessage *message, vo POINTER_SANITY_CHECK_RTN(pClient); POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Shadow *shadow_client = (Qcloud_IoT_Shadow*)mqtt_client->event_handle.context; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + Qcloud_IoT_Shadow *shadow_client = (Qcloud_IoT_Shadow *)mqtt_client->event_handle.context; - const char *topic = message->ptopic; - size_t topic_len = message->topic_len; + const char *topic = message->ptopic; + size_t topic_len = message->topic_len; if (NULL == topic || topic_len <= 0) { IOT_FUNC_EXIT; } char *client_token = NULL; - char *type_str = NULL; + char *type_str = NULL; if (message->payload_len > CLOUD_IOT_JSON_RX_BUF_LEN) { Log_e("The length of the received message exceeds the specified length!"); @@ -267,36 +264,36 @@ static void _on_operation_result_handler(void *pClient, MQTTMessage *message, vo } int cloud_rcv_len = Min(CLOUD_IOT_JSON_RX_BUF_LEN - 1, message->payload_len); - memcpy(cloud_rcv_buf, message->payload, cloud_rcv_len + 1); - cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string - - if (!parse_shadow_operation_type(cloud_rcv_buf, &type_str)) - { + memcpy(shadow_client->shadow_recv_buf, message->payload, cloud_rcv_len + 1); + shadow_client->shadow_recv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string + if (!parse_shadow_operation_type(shadow_client->shadow_recv_buf, &type_str)) { Log_e("Fail to parse type!"); goto End; } - Log_d("type:%s", type_str); + Log_d("type: %s", type_str); + // non-delta msg push is triggered by device side, parse client token first - if (strcmp(type_str, OPERATION_DELTA) && !parse_client_token(cloud_rcv_buf, &client_token)) { - Log_e("Fail to parse client token! Json=%s", cloud_rcv_buf); - goto End; + if (strcmp(type_str, OPERATION_DELTA) && !parse_client_token(shadow_client->shadow_recv_buf, &client_token)) { + Log_e("Fail to parse client token! Json=%s", shadow_client->shadow_recv_buf); + goto End; } if (!strcmp(type_str, OPERATION_DELTA)) { HAL_MutexLock(shadow_client->mutex); - char* delta_str = NULL; - if (parse_shadow_operation_delta(cloud_rcv_buf, &delta_str)) { - Log_d("dlta:%s", delta_str); - _handle_delta(shadow_client, delta_str); - HAL_Free(delta_str); + char *delta_str = NULL; + if (parse_shadow_operation_delta(shadow_client->shadow_recv_buf, &delta_str)) { + Log_d("delta string: %s", delta_str); + _handle_delta(shadow_client, delta_str); + HAL_Free(delta_str); } HAL_MutexUnlock(shadow_client->mutex); goto End; } - + if (shadow_client != NULL) - _traverse_list(shadow_client, shadow_client->inner_data.request_list, client_token, type_str, _handle_request_callback); + _traverse_list(shadow_client, shadow_client->inner_data.request_list, client_token, type_str, + _handle_request_callback); End: HAL_Free(type_str); @@ -305,13 +302,12 @@ End: IOT_FUNC_EXIT; } - -static void _handle_delta(Qcloud_IoT_Shadow *pShadow, char* delta_str) +static void _handle_delta(Qcloud_IoT_Shadow *pShadow, char *delta_str) { IOT_FUNC_ENTRY; if (pShadow->inner_data.property_handle_list->len) { - ListIterator *iter; - ListNode *node = NULL; + ListIterator * iter; + ListNode * node = NULL; PropertyHandler *property_handle = NULL; if (NULL == (iter = list_iterator_new(pShadow->inner_data.property_handle_list, LIST_TAIL))) { @@ -332,17 +328,13 @@ static void _handle_delta(Qcloud_IoT_Shadow *pShadow, char* delta_str) } if (property_handle->property != NULL) { - - if (update_value_if_key_match(delta_str, property_handle->property)) - { - if (property_handle->callback != NULL) - { + if (update_value_if_key_match(delta_str, property_handle->property)) { + if (property_handle->callback != NULL) { property_handle->callback(pShadow, delta_str, strlen(delta_str), property_handle->property); } node = NULL; } } - } list_iterator_destroy(iter); @@ -351,8 +343,9 @@ static void _handle_delta(Qcloud_IoT_Shadow *pShadow, char* delta_str) IOT_FUNC_EXIT; } -static void _insert(char *str, char *pch, int pos) { - int len = strlen(str); +static void _insert(char *str, char *pch, int pos) +{ + int len = strlen(str); int nlen = strlen(pch); int i; for (i = len - 1; i >= pos; --i) { @@ -360,12 +353,10 @@ static void _insert(char *str, char *pch, int pos) { } int n; - for (n = 0; n < nlen; n++) - *(str + pos + n) = *pch++; + for (n = 0; n < nlen; n++) *(str + pos + n) = *pch++; *(str + len + nlen) = 0; } - static int _set_shadow_json_type(char *pJsonDoc, size_t sizeOfBuffer, Method method) { IOT_FUNC_ENTRY; @@ -375,21 +366,21 @@ static int _set_shadow_json_type(char *pJsonDoc, size_t sizeOfBuffer, Method met POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); char *type_str = NULL; switch (method) { - case GET: - type_str = OPERATION_GET; - break; - case UPDATE: - type_str = OPERATION_UPDATE; - break; - default: - Log_e("unexpected method!"); - rc = QCLOUD_ERR_INVAL; - break; + case GET: + type_str = OPERATION_GET; + break; + case UPDATE: + type_str = OPERATION_UPDATE; + break; + default: + Log_e("unexpected method!"); + rc = QCLOUD_ERR_INVAL; + break; } if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - size_t json_len = strlen(pJsonDoc); + size_t json_len = strlen(pJsonDoc); size_t remain_size = sizeOfBuffer - json_len; char json_node_str[64] = {0}; @@ -408,36 +399,28 @@ static int _set_shadow_json_type(char *pJsonDoc, size_t sizeOfBuffer, Method met /** * @brief unsubsribe topic: $shadow/operation/result/{ProductId}/{DeviceName} */ -static int _unsubscribe_operation_result_to_cloud(void* pClient) +static int _unsubscribe_operation_result_to_cloud(Qcloud_IoT_Shadow *pShadow) { IOT_FUNC_ENTRY; int rc = QCLOUD_RET_SUCCESS; - char operation_result_topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - int size = HAL_Snprintf(operation_result_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$shadow/operation/result/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (pShadow->inner_data.result_topic == NULL) + IOT_FUNC_EXIT_RC(rc); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { - Log_e("buf size < topic length!"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - IOT_MQTT_Unsubscribe(pClient, operation_result_topic); + rc = IOT_MQTT_Unsubscribe(pShadow->mqtt, pShadow->inner_data.result_topic); if (rc < 0) { - Log_e("unsubscribe topic: %s failed: %d.", operation_result_topic, rc); + Log_e("unsubscribe topic: %s failed: %d.", pShadow->inner_data.result_topic, rc); } IOT_FUNC_EXIT_RC(rc); } - static int _add_request_to_list(Qcloud_IoT_Shadow *pShadow, const char *pClientToken, RequestParams *pParams) { IOT_FUNC_ENTRY; HAL_MutexLock(pShadow->mutex); - if (pShadow->inner_data.request_list->len >= MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME) - { + if (pShadow->inner_data.request_list->len >= MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME) { HAL_MutexUnlock(pShadow->mutex); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_APPENDING_REQUEST); } @@ -453,7 +436,7 @@ static int _add_request_to_list(Qcloud_IoT_Shadow *pShadow, const char *pClientT strncpy(request->client_token, pClientToken, MAX_SIZE_OF_CLIENT_TOKEN); request->user_context = pParams->user_context; - request->method = pParams->method; + request->method = pParams->method; InitTimer(&(request->timer)); countdown(&(request->timer), pParams->timeout_sec); @@ -462,6 +445,7 @@ static int _add_request_to_list(Qcloud_IoT_Shadow *pShadow, const char *pClientT if (NULL == node) { HAL_MutexUnlock(pShadow->mutex); Log_e("run list_node_new is error!"); + HAL_Free(request); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -475,7 +459,8 @@ static int _add_request_to_list(Qcloud_IoT_Shadow *pShadow, const char *pClientT /** * @brief iterator list and call traverseHandle for each node */ -static void _traverse_list(Qcloud_IoT_Shadow *pShadow, List *list, const char *pClientToken, const char *pType, TraverseHandle traverseHandle) +static void _traverse_list(Qcloud_IoT_Shadow *pShadow, List *list, const char *pClientToken, const char *pType, + TraverseHandle traverseHandle) { IOT_FUNC_ENTRY; @@ -483,7 +468,7 @@ static void _traverse_list(Qcloud_IoT_Shadow *pShadow, List *list, const char *p if (list->len) { ListIterator *iter; - ListNode *node = NULL; + ListNode * node = NULL; if (NULL == (iter = list_iterator_new(list, LIST_TAIL))) { HAL_MutexUnlock(pShadow->mutex); @@ -511,8 +496,8 @@ static void _traverse_list(Qcloud_IoT_Shadow *pShadow, List *list, const char *p IOT_FUNC_EXIT; } - -static void _handle_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, const char *pType) +static void _handle_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, + const char *pType) { IOT_FUNC_ENTRY; @@ -520,50 +505,46 @@ static void _handle_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node if (NULL == request) IOT_FUNC_EXIT; - if (strcmp(request->client_token, pClientToken) == 0) - { + if (strcmp(request->client_token, pClientToken) == 0) { RequestAck status = ACK_NONE; // result field in payload tell us if operation success or not // result = 0 for success, result != 0 for fail int16_t result_code = 0; - - bool parse_success = parse_shadow_operation_result_code(cloud_rcv_buf, &result_code); + + bool parse_success = parse_shadow_operation_result_code(pShadow->shadow_recv_buf, &result_code); if (parse_success) { - if (result_code == 0) { - status = ACK_ACCEPTED; - } else { - status = ACK_REJECTED; - } + if (result_code == 0) { + status = ACK_ACCEPTED; + } else { + status = ACK_REJECTED; + } - if ((strcmp(pType, "get") == 0 && status == ACK_ACCEPTED) || - (strcmp(pType, "update") && status == ACK_REJECTED)) - { - char* delta_str = NULL; - if (parse_shadow_operation_get(cloud_rcv_buf, &delta_str)) { - _handle_delta(pShadow, delta_str); - HAL_Free(delta_str); - } - } + if ((strcmp(pType, "get") == 0 && status == ACK_ACCEPTED) || + (strcmp(pType, "update") && status == ACK_REJECTED)) { + char *delta_str = NULL; + if (parse_shadow_operation_get(pShadow->shadow_recv_buf, &delta_str)) { + _handle_delta(pShadow, delta_str); + HAL_Free(delta_str); + } + } - if (request->callback != NULL) { - request->callback(pShadow, request->method, status, cloud_rcv_buf, request->user_context); - } + if (request->callback != NULL) { + request->callback(pShadow, request->method, status, pShadow->shadow_recv_buf, request->user_context); + } + } else { + Log_e("parse shadow operation result code failed."); } - else { - Log_e("parse shadow operation result code failed."); - } - + list_remove(list, *node); *node = NULL; - } IOT_FUNC_EXIT; } - -static void _handle_expired_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, const char *pClientToken, const char *pType) +static void _handle_expired_request_callback(Qcloud_IoT_Shadow *pShadow, ListNode **node, List *list, + const char *pClientToken, const char *pType) { IOT_FUNC_ENTRY; @@ -571,10 +552,9 @@ static void _handle_expired_request_callback(Qcloud_IoT_Shadow *pShadow, ListNod if (NULL == request) IOT_FUNC_EXIT; - if (expired(&request->timer)) - { + if (expired(&request->timer)) { if (request->callback != NULL) { - request->callback(pShadow, request->method, ACK_TIMEOUT, cloud_rcv_buf, request->user_context); + request->callback(pShadow, request->method, ACK_TIMEOUT, pShadow->shadow_recv_buf, request->user_context); } list_remove(list, *node); diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/system/system_mqtt.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/system/system_mqtt.c similarity index 59% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/system/system_mqtt.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/system/system_mqtt.c index 1608a673..6db1bcd6 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/services/system/system_mqtt.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/services/system/system_mqtt.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,10 +13,6 @@ * */ - - -#include - #ifdef __cplusplus extern "C" { #endif @@ -24,45 +20,33 @@ extern "C" { #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" +#ifdef SYSTEM_COMM +#include -#ifdef SYSTEM_COMM - -#include "qcloud_iot_export_system.h" -#include "mqtt_client.h" #include "lite-utils.h" +#include "mqtt_client.h" #include "qcloud_iot_device.h" - -typedef struct _sys_mqtt_state { - bool topic_sub_ok; - bool result_recv_ok; - long time; -}SysMQTTState; - -static SysMQTTState sg_state = { - .topic_sub_ok = false, - .result_recv_ok = false, - .time = 0}; - +#include "qcloud_iot_export_system.h" static void _system_mqtt_message_callback(void *pClient, MQTTMessage *message, void *pUserData) { #define MAX_RECV_LEN (512) - POINTER_SANITY_CHECK_RTN(message); + POINTER_SANITY_CHECK_RTN(message); static char rcv_buf[MAX_RECV_LEN + 1]; - size_t len = (message->payload_len > MAX_RECV_LEN)?MAX_RECV_LEN:(message->payload_len); + size_t len = (message->payload_len > MAX_RECV_LEN) ? MAX_RECV_LEN : (message->payload_len); - if(message->payload_len > MAX_RECV_LEN){ - Log_e("payload len oversize"); - } + if (message->payload_len > MAX_RECV_LEN) { + Log_e("payload len oversize"); + } memcpy(rcv_buf, message->payload, len); - rcv_buf[len] = '\0'; // jsmn_parse relies on a string + rcv_buf[len] = '\0'; // jsmn_parse relies on a string SysMQTTState *state = (SysMQTTState *)pUserData; Log_d("Recv Msg Topic:%s, payload:%s", message->ptopic, rcv_buf); - char* value = LITE_json_value_of("time", rcv_buf); + char *value = LITE_json_value_of("time", rcv_buf); if (value != NULL) state->time = atol(value); @@ -75,28 +59,30 @@ static void _system_mqtt_sub_event_handler(void *pclient, MQTTEventType event_ty { SysMQTTState *state = (SysMQTTState *)pUserData; - switch(event_type) { + switch (event_type) { case MQTT_EVENT_SUBCRIBE_SUCCESS: Log_d("mqtt sys topic subscribe success"); - state->topic_sub_ok = true; + state->topic_sub_ok = true; break; case MQTT_EVENT_SUBCRIBE_TIMEOUT: Log_i("mqtt sys topic subscribe timeout"); - state->topic_sub_ok = false; + state->topic_sub_ok = false; break; case MQTT_EVENT_SUBCRIBE_NACK: Log_i("mqtt sys topic subscribe NACK"); - state->topic_sub_ok = false; + state->topic_sub_ok = false; break; case MQTT_EVENT_UNSUBSCRIBE: Log_i("mqtt sys topic has been unsubscribed"); - state->topic_sub_ok = false;; + state->topic_sub_ok = false; + ; break; case MQTT_EVENT_CLIENT_DESTROY: Log_i("mqtt client has been destroyed"); - state->topic_sub_ok = false;; + state->topic_sub_ok = false; + ; break; default: return; @@ -107,60 +93,62 @@ static int _iot_system_info_get_publish(void *pClient) { POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - DeviceInfo *dev_info = iot_device_info_get(); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + DeviceInfo * dev_info = &mqtt_client->device_info; POINTER_SANITY_CHECK(dev_info, QCLOUD_ERR_INVAL); - char topic_name[128] = {0}; + char topic_name[128] = {0}; char payload_content[128] = {0}; HAL_Snprintf(topic_name, sizeof(topic_name), "$sys/operation/%s/%s", dev_info->product_id, dev_info->device_name); HAL_Snprintf(payload_content, sizeof(payload_content), "{\"type\": \"get\", \"resource\": [\"time\"]}"); PublishParams pub_params = DEFAULT_PUB_PARAMS; - pub_params.qos = QOS0; - pub_params.payload = payload_content; - pub_params.payload_len = strlen(payload_content); + pub_params.qos = QOS0; + pub_params.payload = payload_content; + pub_params.payload_len = strlen(payload_content); - return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); + return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); } static int _iot_system_info_result_subscribe(void *pClient) { POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - DeviceInfo *dev_info = iot_device_info_get(); - POINTER_SANITY_CHECK(dev_info, QCLOUD_ERR_INVAL); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + DeviceInfo * dev_info = &mqtt_client->device_info; + SysMQTTState * sys_state = &mqtt_client->sys_state; char topic_name[128] = {0}; - int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$sys/operation/result/%s/%s", dev_info->product_id, dev_info->device_name); - if (size < 0 || size > sizeof(topic_name) - 1) - { + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$sys/operation/result/%s/%s", dev_info->product_id, + dev_info->device_name); + if (size < 0 || size > sizeof(topic_name) - 1) { Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); return QCLOUD_ERR_FAILURE; } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _system_mqtt_message_callback; + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _system_mqtt_message_callback; sub_params.on_sub_event_handler = _system_mqtt_sub_event_handler; - sub_params.user_data = (void *)&sg_state; - sub_params.qos = QOS0; + sub_params.user_data = (void *)sys_state; + sub_params.qos = QOS0; return IOT_MQTT_Subscribe(pClient, topic_name, &sub_params); } -int IOT_Get_SysTime(void* pClient, long *time) +int IOT_Get_SysTime(void *pClient, long *time) { - int ret = 0; + int ret = 0; int cntSub = 0; int cntRev = 0; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + SysMQTTState *sys_state = &mqtt_client->sys_state; // subscribe sys topic: $sys/operation/get/${productid}/${devicename} // skip this if the subscription is done and valid - if(!sg_state.topic_sub_ok){ - for(cntSub = 0; cntSub < 3; cntSub++){ + if (!sys_state->topic_sub_ok) { + for (cntSub = 0; cntSub < 3; cntSub++) { ret = _iot_system_info_result_subscribe(mqtt_client); if (ret < 0) { Log_w("_iot_system_info_result_subscribe failed: %d, cnt: %d", ret, cntSub); @@ -168,40 +156,39 @@ int IOT_Get_SysTime(void* pClient, long *time) } /* wait for sub ack */ - ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); - if(sg_state.topic_sub_ok) { + ret = qcloud_iot_mqtt_yield_mt((Qcloud_IoT_Client *)pClient, 100); + if (ret || sys_state->topic_sub_ok) { break; } } } // return failure if subscribe failed - if(!sg_state.topic_sub_ok){ + if (!sys_state->topic_sub_ok) { Log_e("Subscribe sys topic failed!"); return QCLOUD_ERR_FAILURE; } - sg_state.result_recv_ok = false; + sys_state->result_recv_ok = false; // publish msg to get system timestamp - ret = _iot_system_info_get_publish(mqtt_client); - if (ret < 0) { - Log_e("client publish sys topic failed :%d.", ret); + ret = _iot_system_info_get_publish(mqtt_client); + if (ret < 0) { + Log_e("client publish sys topic failed :%d.", ret); return ret; - } + } do { - ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); + ret = qcloud_iot_mqtt_yield_mt((Qcloud_IoT_Client *)pClient, 100); cntRev++; - } while(!sg_state.result_recv_ok && cntRev < 20); + } while (!ret && !sys_state->result_recv_ok && cntRev < 20); - - if (sg_state.result_recv_ok) { - *time = sg_state.time; - ret = QCLOUD_RET_SUCCESS; + if (sys_state->result_recv_ok) { + *time = sys_state->time; + ret = QCLOUD_RET_SUCCESS; } else { *time = 0; - ret = QCLOUD_ERR_FAILURE; - } + ret = QCLOUD_ERR_FAILURE; + } return ret; } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_parser.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_parser.c similarity index 59% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_parser.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_parser.c index 11827e1f..d01b89c9 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/json_parser.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_parser.c @@ -1,30 +1,24 @@ /* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and * limitations under the License. * */ -/** - * Edit by shockcao@tencent.com 2018/3/15 - */ +#include "json_parser.h" + +#include #include #include #include -#include - -#include "json_parser.h" #include "lite-utils.h" #include "qcloud_iot_export_log.h" @@ -32,17 +26,17 @@ #define json_debug Log_d typedef struct JSON_NV { - int nLen; - int vLen; - int vType; - char *pN; - char *pV; + int nLen; + int vLen; + int vType; + char *pN; + char *pV; } JSON_NV; char *json_get_object(int type, char *str) { char *pos = 0; - char ch = (type == JSOBJECT) ? '{' : '['; + char ch = (type == JSOBJECT) ? '{' : '['; while (str != 0 && *str != 0) { if (*str == ' ') { str++; @@ -54,13 +48,12 @@ char *json_get_object(int type, char *str) return pos; } -char *json_get_next_object(int type, char *str, char **key, int *key_len, - char **val, int *val_len, int *val_type) +char *json_get_next_object(int type, char *str, char **key, int *key_len, char **val, int *val_len, int *val_type) { - char JsonMark[JSTYPEMAX][2] = { { '\"', '\"' }, { '{', '}' }, { '[', ']' }, { '0', ' ' } }; - int iMarkDepth = 0, iValueType = JSNONE, iNameLen = 0, iValueLen = 0; - char *p_cName = 0, *p_cValue = 0, *p_cPos = str; - char lastchr = ' '; + char JsonMark[JSTYPEMAX][2] = {{'\"', '\"'}, {'{', '}'}, {'[', ']'}, {'0', ' '}}; + int iMarkDepth = 0, iValueType = JSNONE, iNameLen = 0, iValueLen = 0; + char *p_cName = 0, *p_cValue = 0, *p_cPos = str; + char lastchr = ' '; if (type == JSOBJECT) { /* Get Key */ @@ -69,7 +62,7 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, return 0; } p_cName = ++p_cPos; - p_cPos = strchr(p_cPos, '"'); + p_cPos = strchr(p_cPos, '"'); if (!p_cPos) { return 0; } @@ -81,94 +74,89 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, while (p_cPos && *p_cPos) { if (*p_cPos == '"') { iValueType = JSSTRING; - lastchr = *p_cPos; - p_cValue = ++p_cPos; + lastchr = *p_cPos; + p_cValue = ++p_cPos; break; } else if (*p_cPos == '{') { iValueType = JSOBJECT; - p_cValue = p_cPos++; + p_cValue = p_cPos++; break; } else if (*p_cPos == '[') { iValueType = JSARRAY; - p_cValue = p_cPos++; + p_cValue = p_cPos++; break; } else if ((*p_cPos == '-') || (*p_cPos >= '0' && *p_cPos <= '9')) { iValueType = JSNUMBER; - p_cValue = p_cPos++; + p_cValue = p_cPos++; break; } else if (*p_cPos == 't' || *p_cPos == 'T' || *p_cPos == 'f' || *p_cPos == 'F') { iValueType = JSBOOLEAN; - p_cValue = p_cPos; - break; - }else if (*p_cPos == 'n' || *p_cPos == 'N') { - iValueType = JSNULL; - p_cValue = p_cPos; + p_cValue = p_cPos; break; - } + } else if (*p_cPos == 'n' || *p_cPos == 'N') { + iValueType = JSNULL; + p_cValue = p_cPos; + break; + } p_cPos++; } while (p_cPos && *p_cPos && iValueType > JSNONE) { if (iValueType == JSBOOLEAN) { - int len = strlen(p_cValue); + int len = strlen(p_cValue); - if ((*p_cValue == 't' || *p_cValue == 'T') && len >= 4 - && (!strncmp(p_cValue, "true", 4) - || !strncmp(p_cValue, "TRUE", 4))) { + if ((*p_cValue == 't' || *p_cValue == 'T') && len >= 4 && + (!strncmp(p_cValue, "true", 4) || !strncmp(p_cValue, "TRUE", 4))) { iValueLen = 4; - p_cPos = p_cValue + iValueLen; + // p_cPos = p_cValue + iValueLen; break; - } else if ((*p_cValue == 'f' || *p_cValue == 'F') && len >= 5 - && (!strncmp(p_cValue, "false", 5) - || !strncmp(p_cValue, "FALSE", 5))) { + } else if ((*p_cValue == 'f' || *p_cValue == 'F') && len >= 5 && + (!strncmp(p_cValue, "false", 5) || !strncmp(p_cValue, "FALSE", 5))) { iValueLen = 5; - p_cPos = p_cValue + iValueLen; + // p_cPos = p_cValue + iValueLen; break; } - } else if (iValueType == JSNULL) { //support null/NULL - int nlen = strlen(p_cValue); - - if ((*p_cValue == 'n' || *p_cValue == 'N') && nlen >= 4 - && (!strncmp(p_cValue, "null", 4) - || !strncmp(p_cValue, "NULL", 4))) { + } else if (iValueType == JSNULL) { // support null/NULL + int nlen = strlen(p_cValue); + + if ((*p_cValue == 'n' || *p_cValue == 'N') && nlen >= 4 && + (!strncmp(p_cValue, "null", 4) || !strncmp(p_cValue, "NULL", 4))) { iValueLen = 4; - p_cPos = p_cValue + iValueLen; + // p_cPos = p_cValue + iValueLen; break; - } - } - else if (iValueType == JSNUMBER) { - //if (*p_cPos < '0' || *p_cPos > '9') { - if ((*p_cPos < '0' || *p_cPos > '9')&&(*p_cPos != '.')) { //support float + } + } else if (iValueType == JSNUMBER) { + // if (*p_cPos < '0' || *p_cPos > '9') { + if ((*p_cPos < '0' || *p_cPos > '9') && (*p_cPos != '.')) { // support float iValueLen = p_cPos - p_cValue; break; } - } - else if (*p_cPos == JsonMark[iValueType][1]) { + } else if (*p_cPos == JsonMark[iValueType][1]) { if (iMarkDepth == 0) { - iValueLen = p_cPos - p_cValue + (iValueType == JSSTRING ? 0 : 1); - p_cPos++; - if((iValueType == JSSTRING) && (lastchr == '\\')){ - lastchr = *p_cPos; - continue; - }else{ - break; - } + iValueLen = p_cPos - p_cValue + (iValueType == JSSTRING ? 0 : 1); + p_cPos++; + if ((iValueType == JSSTRING) && (lastchr == '\\')) { + lastchr = *p_cPos; + continue; + } else { + break; + } } else { iMarkDepth--; } } else if (*p_cPos == JsonMark[iValueType][0]) { iMarkDepth++; } - lastchr = *p_cPos; + lastchr = *p_cPos; p_cPos++; } if (type == JSOBJECT) { - *key = p_cName; + *key = p_cName; *key_len = iNameLen; } - *val = p_cValue; - *val_len = iValueLen; + *val = p_cValue; + *val_len = iValueLen; *val_type = iValueType; if (iValueType == JSSTRING) { return p_cValue + iValueLen + 1; @@ -179,10 +167,10 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, int json_parse_name_value(char *p_cJsonStr, int iStrLen, json_parse_cb pfnCB, void *p_CBData) { - char *pos = 0, *key = 0, *val = 0; - int klen = 0, vlen = 0, vtype = 0; - char last_char = 0; - int ret = JSON_RESULT_ERR; + char *pos = 0, *key = 0, *val = 0; + int klen = 0, vlen = 0, vtype = 0; + char last_char = 0; + int ret = JSON_RESULT_ERR; if (p_cJsonStr == NULL || iStrLen == 0 || pfnCB == NULL) { return ret; @@ -193,7 +181,8 @@ int json_parse_name_value(char *p_cJsonStr, int iStrLen, json_parse_cb pfnCB, vo backup_json_str_last_char(p_cJsonStr, iStrLen, last_char); } - json_object_for_each_kv(p_cJsonStr, pos, key, klen, val, vlen, vtype) { + json_object_for_each_kv(p_cJsonStr, pos, key, klen, val, vlen, vtype) + { if (key && klen && val && vlen) { ret = JSON_RESULT_OK; if (JSON_PARSE_FINISH == pfnCB(key, klen, val, vlen, vtype, p_CBData)) { @@ -212,10 +201,10 @@ int json_parse_name_value(char *p_cJsonStr, int iStrLen, json_parse_cb pfnCB, vo int json_get_value_by_name_cb(char *p_cName, int iNameLen, char *p_cValue, int iValueLen, int iValueType, void *p_CBData) { - JSON_NV *p_stNameValue = (JSON_NV *)p_CBData; + JSON_NV *p_stNameValue = (JSON_NV *)p_CBData; #if (JSON_DEBUG == 1) - int i; + int i; if (p_cName) { json_debug("Name:"); @@ -233,9 +222,8 @@ int json_get_value_by_name_cb(char *p_cName, int iNameLen, char *p_cValue, int i #endif if ((iNameLen == p_stNameValue->nLen) && !strncmp(p_cName, p_stNameValue->pN, p_stNameValue->nLen)) { - - p_stNameValue->pV = p_cValue; - p_stNameValue->vLen = iValueLen; + p_stNameValue->pV = p_cValue; + p_stNameValue->vLen = iValueLen; p_stNameValue->vType = iValueType; return JSON_PARSE_FINISH; } else { @@ -245,10 +233,10 @@ int json_get_value_by_name_cb(char *p_cName, int iNameLen, char *p_cValue, int i char *json_get_value_by_name(char *p_cJsonStr, int iStrLen, char *p_cName, int *p_iValueLen, int *p_iValueType) { - JSON_NV stNV; + JSON_NV stNV; memset(&stNV, 0, sizeof(stNV)); - stNV.pN = p_cName; + stNV.pN = p_cName; stNV.nLen = strlen(p_cName); if (JSON_RESULT_OK == json_parse_name_value(p_cJsonStr, iStrLen, json_get_value_by_name_cb, (void *)&stNV)) { if (p_iValueLen) { @@ -256,11 +244,10 @@ char *json_get_value_by_name(char *p_cJsonStr, int iStrLen, char *p_cName, int * } if (p_iValueType) { *p_iValueType = stNV.vType; - if(JSNULL == stNV.vType){ - stNV.pV = NULL; - } + if (JSNULL == stNV.vType) { + stNV.pV = NULL; + } } } return stNV.pV; } - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_token.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_token.c new file mode 100644 index 00000000..ad3a7a0e --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/json_token.c @@ -0,0 +1,208 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "json_parser.h" +#include "lite-utils.h" +#include "qcloud_iot_export_error.h" + +#ifndef SCNi8 +#define SCNi8 "hhi" +#endif + +#ifndef SCNu8 +#define SCNu8 "hhu" +#endif + +char *LITE_json_value_of(char *key, char *src) +{ + char *value = NULL; + int value_len = -1; + char *ret = NULL; + + char *delim = NULL; + char *key_iter; + char *key_next; + int key_len; + char *src_iter; + + src_iter = src; + key_iter = key; + + do { + if ((delim = strchr(key_iter, '.')) != NULL) { + key_len = delim - key_iter; + key_next = HAL_Malloc(key_len + 1); + strncpy(key_next, key_iter, key_len); + key_next[key_len] = '\0'; + value = json_get_value_by_name(src_iter, strlen(src_iter), key_next, &value_len, 0); + + if (value == NULL) { + HAL_Free(key_next); + return NULL; + } + + src_iter = value; + key_iter = delim + 1; + HAL_Free(key_next); + } + } while (delim); + + value = json_get_value_by_name(src_iter, strlen(src_iter), key_iter, &value_len, 0); + if (NULL == value) { + return NULL; + } + ret = HAL_Malloc((value_len + 1) * sizeof(char)); + if (NULL == ret) { + return NULL; + } + HAL_Snprintf(ret, value_len + 1, "%s", value); + return ret; +} + +list_head_t *LITE_json_keys_of(char *src, char *prefix) +{ + static LIST_HEAD(keylist); + + char *pos = 0, *key = 0, *val = 0; + int klen = 0, vlen = 0, vtype = 0; + + if (src == NULL || prefix == NULL) { + return NULL; + } + + if (!strcmp("", prefix)) { + INIT_LIST_HEAD(&keylist); + } + + json_object_for_each_kv(src, pos, key, klen, val, vlen, vtype) + { + if (key && klen && val && vlen) { + json_key_t *entry = NULL; + + entry = HAL_Malloc(sizeof(json_key_t)); + memset(entry, 0, sizeof(json_key_t)); + entry->key = LITE_format_string("%s%.*s", prefix, klen, key); + list_add_tail(&entry->list, &keylist); + + if (JSOBJECT == vtype) { + char *iter_val = LITE_format_string("%.*s", vlen, val); + char *iter_pre = LITE_format_string("%s%.*s.", prefix, klen, key); + LITE_json_keys_of(iter_val, iter_pre); + HAL_Free(iter_val); + HAL_Free(iter_pre); + } + } + } + + if (!strcmp("", prefix)) { + json_key_t *entry = NULL; + + entry = HAL_Malloc(sizeof(json_key_t)); + memset(entry, 0, sizeof(json_key_t)); + list_add_tail(&entry->list, &keylist); + + return &keylist; + } + + return NULL; +} + +void LITE_json_keys_release(list_head_t *keylist) +{ + json_key_t *pos, *tmp; + + list_for_each_entry_safe(pos, tmp, keylist, list, json_key_t) + { + if (pos->key) { + HAL_Free(pos->key); + } + list_del(&pos->list); + HAL_Free(pos); + } +} + +static void _strip_transfer(char *src) +{ + char *end = src + strlen(src) + 1; + + while (*src != '\0') { + if (*src == '\\') { + memmove(src, src + 1, end - src); + end--; + } + src++; + } +} + +char *LITE_json_string_value_strip_transfer(char *key, char *src) +{ + char *str = LITE_json_value_of(key, src); + + if (NULL != str) { + _strip_transfer(str); + } + return str; +} + +int LITE_get_int32(int32_t *value, char *src) +{ + return (sscanf(src, "%" SCNi32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_int16(int16_t *value, char *src) +{ + return (sscanf(src, "%" SCNi16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_int8(int8_t *value, char *src) +{ + return (sscanf(src, "%" SCNi8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_uint32(uint32_t *value, char *src) +{ + return (sscanf(src, "%" SCNu32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_uint16(uint16_t *value, char *src) +{ + return (sscanf(src, "%" SCNu16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_uint8(uint8_t *value, char *src) +{ + return (sscanf(src, "%" SCNu8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_float(float *value, char *src) +{ + return (sscanf(src, "%f", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_double(double *value, char *src) +{ + return (sscanf(src, "%lf", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +int LITE_get_boolean(bool *value, char *src) +{ + if (!strcmp(src, "false")) { + *value = false; + } else { + *value = true; + } + + return QCLOUD_RET_SUCCESS; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_ca.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c similarity index 90% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_ca.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c index a9c9addd..076354ac 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_ca.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_ca.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -18,42 +18,41 @@ extern "C" { #endif #include "qcloud_iot_ca.h" -#include "qcloud_iot_import.h" + #include +#include "qcloud_iot_import.h" + #ifndef AUTH_WITH_NOTLS #if defined(AUTH_MODE_CERT) || defined(DEV_DYN_REG_ENABLED) -static const char *iot_ca_crt = \ -{ +static const char *iot_ca_crt = { "-----BEGIN CERTIFICATE-----\r\n" - "MIIDxTCCAq2gAwIBAgIJALM1winYO2xzMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV\r\n" \ - "BAYTAkNOMRIwEAYDVQQIDAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMRAw\r\n" \ - "DgYDVQQKDAdUZW5jZW50MRcwFQYDVQQLDA5UZW5jZW50IElvdGh1YjEYMBYGA1UE\r\n" \ - "AwwPd3d3LnRlbmNlbnQuY29tMB4XDTE3MTEyNzA0MjA1OVoXDTMyMTEyMzA0MjA1\r\n" \ - "OVoweTELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUd1YW5nRG9uZzERMA8GA1UEBwwI\r\n" \ - "U2hlblpoZW4xEDAOBgNVBAoMB1RlbmNlbnQxFzAVBgNVBAsMDlRlbmNlbnQgSW90\r\n" \ - "aHViMRgwFgYDVQQDDA93d3cudGVuY2VudC5jb20wggEiMA0GCSqGSIb3DQEBAQUA\r\n" \ - "A4IBDwAwggEKAoIBAQDVxwDZRVkU5WexneBEkdaKs4ehgQbzpbufrWo5Lb5gJ3i0\r\n" \ - "eukbOB81yAaavb23oiNta4gmMTq2F6/hAFsRv4J2bdTs5SxwEYbiYU1teGHuUQHO\r\n" \ - "iQsZCdNTJgcikga9JYKWcBjFEnAxKycNsmqsq4AJ0CEyZbo//IYX3czEQtYWHjp7\r\n" \ - "FJOlPPd1idKtFMVNG6LGXEwS/TPElE+grYOxwB7Anx3iC5ZpE5lo5tTioFTHzqbT\r\n" \ - "qTN7rbFZRytAPk/JXMTLgO55fldm4JZTP3GQsPzwIh4wNNKhi4yWG1o2u3hAnZDv\r\n" \ - "UVFV7al2zFdOfuu0KMzuLzrWrK16SPadRDd9eT17AgMBAAGjUDBOMB0GA1UdDgQW\r\n" \ - "BBQrr48jv4FxdKs3r0BkmJO7zH4ALzAfBgNVHSMEGDAWgBQrr48jv4FxdKs3r0Bk\r\n" \ - "mJO7zH4ALzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDRSjXnBc3T\r\n" \ - "d9VmtTCuALXrQELY8KtM+cXYYNgtodHsxmrRMpJofsPGiqPfb82klvswpXxPK8Xx\r\n" \ - "SuUUo74Fo+AEyJxMrRKlbJvlEtnpSilKmG6rO9+bFq3nbeOAfat4lPl0DIscWUx3\r\n" \ - "ajXtvMCcSwTlF8rPgXbOaSXZidRYNqSyUjC2Q4m93Cv+KlyB+FgOke8x4aKAkf5p\r\n" \ - "XR8i1BN1OiMTIRYhGSfeZbVRq5kTdvtahiWFZu9DGO+hxDZObYGIxGHWPftrhBKz\r\n" \ - "RT16Amn780rQLWojr70q7o7QP5tO0wDPfCdFSc6CQFq/ngOzYag0kJ2F+O5U6+kS\r\n" \ - "QVrcRBDxzx/G\r\n" \ - "-----END CERTIFICATE-----" -}; + "MIIDxTCCAq2gAwIBAgIJALM1winYO2xzMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV\r\n" + "BAYTAkNOMRIwEAYDVQQIDAlHdWFuZ0RvbmcxETAPBgNVBAcMCFNoZW5aaGVuMRAw\r\n" + "DgYDVQQKDAdUZW5jZW50MRcwFQYDVQQLDA5UZW5jZW50IElvdGh1YjEYMBYGA1UE\r\n" + "AwwPd3d3LnRlbmNlbnQuY29tMB4XDTE3MTEyNzA0MjA1OVoXDTMyMTEyMzA0MjA1\r\n" + "OVoweTELMAkGA1UEBhMCQ04xEjAQBgNVBAgMCUd1YW5nRG9uZzERMA8GA1UEBwwI\r\n" + "U2hlblpoZW4xEDAOBgNVBAoMB1RlbmNlbnQxFzAVBgNVBAsMDlRlbmNlbnQgSW90\r\n" + "aHViMRgwFgYDVQQDDA93d3cudGVuY2VudC5jb20wggEiMA0GCSqGSIb3DQEBAQUA\r\n" + "A4IBDwAwggEKAoIBAQDVxwDZRVkU5WexneBEkdaKs4ehgQbzpbufrWo5Lb5gJ3i0\r\n" + "eukbOB81yAaavb23oiNta4gmMTq2F6/hAFsRv4J2bdTs5SxwEYbiYU1teGHuUQHO\r\n" + "iQsZCdNTJgcikga9JYKWcBjFEnAxKycNsmqsq4AJ0CEyZbo//IYX3czEQtYWHjp7\r\n" + "FJOlPPd1idKtFMVNG6LGXEwS/TPElE+grYOxwB7Anx3iC5ZpE5lo5tTioFTHzqbT\r\n" + "qTN7rbFZRytAPk/JXMTLgO55fldm4JZTP3GQsPzwIh4wNNKhi4yWG1o2u3hAnZDv\r\n" + "UVFV7al2zFdOfuu0KMzuLzrWrK16SPadRDd9eT17AgMBAAGjUDBOMB0GA1UdDgQW\r\n" + "BBQrr48jv4FxdKs3r0BkmJO7zH4ALzAfBgNVHSMEGDAWgBQrr48jv4FxdKs3r0Bk\r\n" + "mJO7zH4ALzAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDRSjXnBc3T\r\n" + "d9VmtTCuALXrQELY8KtM+cXYYNgtodHsxmrRMpJofsPGiqPfb82klvswpXxPK8Xx\r\n" + "SuUUo74Fo+AEyJxMrRKlbJvlEtnpSilKmG6rO9+bFq3nbeOAfat4lPl0DIscWUx3\r\n" + "ajXtvMCcSwTlF8rPgXbOaSXZidRYNqSyUjC2Q4m93Cv+KlyB+FgOke8x4aKAkf5p\r\n" + "XR8i1BN1OiMTIRYhGSfeZbVRq5kTdvtahiWFZu9DGO+hxDZObYGIxGHWPftrhBKz\r\n" + "RT16Amn780rQLWojr70q7o7QP5tO0wDPfCdFSc6CQFq/ngOzYag0kJ2F+O5U6+kS\r\n" + "QVrcRBDxzx/G\r\n" + "-----END CERTIFICATE-----"}; #endif #ifdef OTA_USE_HTTPS -static const char *iot_https_ca_crt = \ -{ +static const char *iot_https_ca_crt = { "-----BEGIN CERTIFICATE-----\r\n" "MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG\r\n" "A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv\r\n" @@ -100,15 +99,15 @@ static const char *iot_https_ca_crt = \ "30JAZGSGvip2CTFvHST0mdCF/vIhCPnG9vHQWe3WVjwIKANnuvD58ZAWR65n5ryA\r\n" "SOlCdjSXVWkkDoPWoC209fN5ikkodBpBocLTJIg1MGCUF7ThBCIxPTsvFwayuJ2G\r\n" "K1pp74P1S8SqtCr4fKGxhZSM9AyHDPSsQPhZSZg=\r\n" - "-----END CERTIFICATE-----" -}; + "-----END CERTIFICATE-----"}; #endif #endif -const char *iot_ca_get() { +const char *iot_ca_get() +{ #ifndef AUTH_WITH_NOTLS #if defined(AUTH_MODE_CERT) || defined(DEV_DYN_REG_ENABLED) - return iot_ca_crt; + return iot_ca_crt; #else return NULL; #endif @@ -117,11 +116,12 @@ const char *iot_ca_get() { #endif } -const char *iot_https_ca_get() { +const char *iot_https_ca_get() +{ #ifndef AUTH_WITH_NOTLS #ifdef OTA_USE_HTTPS - return iot_https_ca_crt; + return iot_https_ca_crt; #else return NULL; #endif @@ -134,5 +134,3 @@ const char *iot_https_ca_get() { #ifdef __cplusplus } #endif - - diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c new file mode 100644 index 00000000..327ebcac --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_device.c @@ -0,0 +1,56 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif +#include "qcloud_iot_device.h" + +#include +#include + +#include "qcloud_iot_export.h" + +int iot_device_info_set(DeviceInfo *device_info, const char *product_id, const char *device_name) +{ + memset(device_info, 0x0, sizeof(DeviceInfo)); + if ((MAX_SIZE_OF_PRODUCT_ID) < strlen(product_id)) { + Log_e("product name(%s) length:(%lu) exceeding limitation", product_id, strlen(product_id)); + return QCLOUD_ERR_FAILURE; + } + if ((MAX_SIZE_OF_DEVICE_NAME) < strlen(device_name)) { + Log_e("device name(%s) length:(%lu) exceeding limitation", device_name, strlen(device_name)); + return QCLOUD_ERR_FAILURE; + } + + strncpy(device_info->product_id, product_id, MAX_SIZE_OF_PRODUCT_ID); + strncpy(device_info->device_name, device_name, MAX_SIZE_OF_DEVICE_NAME); + + /* construct device-id(@product_id+@device_name) */ + memset(device_info->client_id, 0x0, MAX_SIZE_OF_CLIENT_ID); + int ret = HAL_Snprintf(device_info->client_id, MAX_SIZE_OF_CLIENT_ID, "%s%s", product_id, device_name); + if ((ret < 0) || (ret >= MAX_SIZE_OF_CLIENT_ID)) { + Log_e("set device info failed"); + return QCLOUD_ERR_FAILURE; + } + + Log_i("SDK_Ver: %s, Product_ID: %s, Device_Name: %s", QCLOUD_IOT_DEVICE_SDK_VERSION, device_info->product_id, + device_info->device_name); + return QCLOUD_RET_SUCCESS; +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_log.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c similarity index 67% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_log.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c index ea64fff1..6700b387 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/qcloud_iot_log.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/qcloud_iot_log.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -17,19 +17,15 @@ extern "C" { #endif -#include "qcloud_iot_export_log.h" - #include -#include "qcloud_iot_import.h" #include "log_upload.h" +#include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" +static char *level_str[] = {"DIS", "ERR", "WRN", "INF", "DBG"}; -static char *level_str[] = { - "DIS", "ERR", "WRN", "INF", "DBG" -}; - -static LogMessageHandler sg_log_message_handler= NULL; +static LogMessageHandler sg_log_message_handler = NULL; LOG_LEVEL g_log_print_level = eLOG_INFO; @@ -46,35 +42,37 @@ static const char *_get_filename(const char *p) #else char ch = '/'; #endif - const char *q = strrchr(p,ch); - if(q == NULL) - { + const char *q = strrchr(p, ch); + if (q == NULL) { q = p; - } - else - { + } else { q++; } return q; } -void IOT_Log_Set_Level(LOG_LEVEL logLevel) { +void IOT_Log_Set_Level(LOG_LEVEL logLevel) +{ g_log_print_level = logLevel; } -LOG_LEVEL IOT_Log_Get_Level() { +LOG_LEVEL IOT_Log_Get_Level(void) +{ return g_log_print_level; } -void IOT_Log_Set_MessageHandler(LogMessageHandler handler) { - sg_log_message_handler = handler; +void IOT_Log_Set_MessageHandler(LogMessageHandler handler) +{ + sg_log_message_handler = handler; } -void IOT_Log_Set_Upload_Level(LOG_LEVEL logLevel) { +void IOT_Log_Set_Upload_Level(LOG_LEVEL logLevel) +{ g_log_upload_level = logLevel; } -LOG_LEVEL IOT_Log_Get_Upload_Level() { +LOG_LEVEL IOT_Log_Get_Upload_Level(void) +{ return g_log_upload_level; } @@ -91,9 +89,9 @@ void IOT_Log_Fini_Uploader(void) { #ifdef LOG_UPLOAD fini_log_uploader(); - return; + return; #else - return ; + return; #endif } @@ -108,23 +106,25 @@ int IOT_Log_Upload(bool force_upload) void IOT_Log_Gen(const char *file, const char *func, const int line, const int level, const char *fmt, ...) { - if (level > g_log_print_level && level > g_log_upload_level) { - return; - } + if (level > g_log_print_level && level > g_log_upload_level) { + return; + } /* format log content */ - const char *file_name = _get_filename(file); + const char *file_name = _get_filename(file); - char sg_text_buf[MAX_LOG_MSG_LEN + 1]; - char *tmp_buf = sg_text_buf; - char *o = tmp_buf; + char sg_text_buf[MAX_LOG_MSG_LEN + 1]; + char *tmp_buf = sg_text_buf; + char *o = tmp_buf; memset(tmp_buf, 0, sizeof(sg_text_buf)); + char time_str[TIME_FORMAT_STR_LEN] = {0}; - o += HAL_Snprintf(o, sizeof(sg_text_buf), "%s|%s|%s|%s(%d): ", level_str[level], HAL_Timer_current(), file_name, func, line); + o += HAL_Snprintf(o, sizeof(sg_text_buf), "%s|%s|%s|%s(%d): ", level_str[level], HAL_Timer_current(time_str), + file_name, func, line); - va_list ap; + va_list ap; va_start(ap, fmt); - o += vsnprintf(o, MAX_LOG_MSG_LEN - 2 - strlen(tmp_buf), fmt, ap); + HAL_Vsnprintf(o, MAX_LOG_MSG_LEN - 2 - strlen(tmp_buf), fmt, ap); va_end(ap); strcat(tmp_buf, "\r\n"); @@ -138,9 +138,9 @@ void IOT_Log_Gen(const char *file, const char *func, const int line, const int l if (level <= g_log_print_level) { /* customer defined log print handler */ - if (sg_log_message_handler != NULL && sg_log_message_handler(tmp_buf)) { - return; - } + if (sg_log_message_handler != NULL && sg_log_message_handler(tmp_buf)) { + return; + } /* default log handler: print to console */ HAL_Printf("%s", tmp_buf); diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/string_utils.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/string_utils.c similarity index 57% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/string_utils.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/string_utils.c index 49e9763c..64d16d7f 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/string_utils.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/string_utils.c @@ -1,43 +1,33 @@ /* - * Copyright (c) 2017-2019 Tencent Group. All rights reserved. - * License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and * limitations under the License. * */ -/** - * Edit by shockcao@tencent.com 2018/3/15 - */ #include "lite-utils.h" - -#include "qcloud_iot_import.h" #include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" char *LITE_format_string(const char *fmt, ...) { -#define TEMP_STRING_MAXLEN (512) +#define TEMP_STRING_MAXLEN (512) - va_list ap; - char *tmp = NULL; - char *dst; - int rc = -1; + va_list ap; + char * tmp = NULL; + char * dst; + int rc = -1; va_start(ap, fmt); tmp = HAL_Malloc(TEMP_STRING_MAXLEN); - if (NULL == tmp) { - return NULL; - } memset(tmp, 0, TEMP_STRING_MAXLEN); rc = HAL_Vsnprintf(tmp, TEMP_STRING_MAXLEN, fmt, ap); va_end(ap); @@ -54,18 +44,15 @@ char *LITE_format_string(const char *fmt, ...) char *LITE_format_nstring(const int len, const char *fmt, ...) { - va_list ap; - char *tmp = NULL; - char *dst; - int rc = -1; + va_list ap; + char * tmp = NULL; + char * dst; + int rc = -1; va_start(ap, fmt); - tmp = HAL_Malloc(len+2); - if (NULL == tmp) { - return NULL; - } - memset(tmp, 0, len+2); - rc = HAL_Vsnprintf(tmp, len+1, fmt, ap); + tmp = HAL_Malloc(len + 2); + memset(tmp, 0, len + 2); + rc = HAL_Vsnprintf(tmp, len + 1, fmt, ap); va_end(ap); LITE_ASSERT(tmp); LITE_ASSERT(rc < 1024); @@ -79,8 +66,8 @@ char *LITE_format_nstring(const int len, const char *fmt, ...) char *LITE_strdup(const char *src) { - int len = 0; - char *dst = NULL; + int len = 0; + char *dst = NULL; if (!src) { return NULL; @@ -102,13 +89,13 @@ char *LITE_strdup(const char *src) void LITE_hexbuf_convert(unsigned char *digest, char *out, int in_len, int uppercase) { - static char *zEncode[] = {"0123456789abcdef", "0123456789ABCDEF"}; - int j = 0; - int i = 0; - int idx = uppercase ? 1 : 0; + static char *zEncode[] = {"0123456789abcdef", "0123456789ABCDEF"}; + int j = 0; + int i = 0; + int idx = uppercase ? 1 : 0; - for (i = 0; i < in_len; i ++) { - int a = digest[i]; + for (i = 0; i < in_len; i++) { + int a = digest[i]; out[j++] = zEncode[idx][(a >> 4) & 0xf]; out[j++] = zEncode[idx][a & 0xf]; @@ -132,17 +119,17 @@ static uint8_t _hexval_of_char(char hex) void LITE_hexstr_convert(char *hexstr, uint8_t *out_buf, int in_len) { - int i = 0; - uint8_t ch0, ch1; + int i = 0; + uint8_t ch0, ch1; if (in_len % 2 != 0) { Log_e("hexstr length (%d) is not even", in_len); return; } - while (i < in_len) { - ch0 = _hexval_of_char((char)hexstr[2 * i]); - ch1 = _hexval_of_char((char)hexstr[2 * i + 1]); + while (i < (in_len / 2)) { + ch0 = _hexval_of_char((char)hexstr[2 * i]); + ch1 = _hexval_of_char((char)hexstr[2 * i + 1]); out_buf[i] = (ch0 << 4 | ch1); i++; } @@ -150,16 +137,16 @@ void LITE_hexstr_convert(char *hexstr, uint8_t *out_buf, int in_len) void LITE_replace_substr(char originalString[], char key[], char swap[]) { - int lengthOfOriginalString, lengthOfKey, lengthOfSwap, i, j, flag; - char tmp[512]; + int lengthOfOriginalString, lengthOfKey, lengthOfSwap, i, j, flag; + char tmp[512]; lengthOfOriginalString = strlen(originalString); - lengthOfKey = strlen(key); - lengthOfSwap = strlen(swap); + lengthOfKey = strlen(key); + lengthOfSwap = strlen(swap); for (i = 0; i <= lengthOfOriginalString - lengthOfKey; i++) { flag = 1; - for (j = 0; j < lengthOfKey; j++) { + for (j = 0; j < lengthOfKey; j++) { if (originalString[i + j] != key[j]) { flag = 0; break; @@ -169,7 +156,7 @@ void LITE_replace_substr(char originalString[], char key[], char swap[]) if (flag) { strcpy(tmp, originalString); strcpy(&tmp[i], swap); - strcpy(&tmp[i + lengthOfSwap], &originalString[i + lengthOfKey]); + strcpy(&tmp[i + lengthOfSwap], &originalString[i + lengthOfKey]); strcpy(originalString, tmp); i += lengthOfSwap - 1; lengthOfOriginalString = strlen(originalString); diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_aes.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_aes.c new file mode 100644 index 00000000..2226b179 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_aes.c @@ -0,0 +1,1326 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif +#include "utils_aes.h" + +#include +#include + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#if defined(UTILS_AES_C) + +#include + +#if defined(UTILS_SELF_TEST) +#include +#define utils_printf Log_d +#endif /* UTILS_SELF_TEST */ + +//====================================// +#if !defined(UTILS_PLATFORM_ZEROIZE_ALT) +/* + * This implementation should never be optimized out by the compiler + * + * This implementation for utils_platform_zeroize() was inspired from Colin + * Percival's blog article at: + * + * http://www.daemonology.net/blog/2014-09-04-how-to-zero-a-buffer.html + * + * It uses a volatile function pointer to the standard memset(). Because the + * pointer is volatile the compiler expects it to change at + * any time and will not optimize out the call that could potentially perform + * other operations on the input buffer instead of just setting it to 0. + * Nevertheless, as pointed out by davidtgoldblatt on Hacker News + * (refer to http://www.daemonology.net/blog/2014-09-05-erratum.html for + * details), optimizations of the following form are still possible: + * + * if( memset_func != memset ) + * memset_func( buf, 0, len ); + * + * Note that it is extremely difficult to guarantee that + * utils_platform_zeroize() will not be optimized out by aggressive compilers + * in a portable way. For this reason, Mbed TLS also provides the configuration + * option UTILS_PLATFORM_ZEROIZE_ALT, which allows users to configure + * utils_platform_zeroize() to use a suitable implementation for their + * platform and needs. + */ +static void *(*const volatile memset_func)(void *, int, size_t) = memset; + +void utils_platform_zeroize(void *buf, size_t len) +{ + memset_func(buf, 0, len); +} +#endif /* UTILS_PLATFORM_ZEROIZE_ALT */ + +//====================================// + +#if !defined(UTILS_AES_ALT) + +/* Parameter validation macros based on platform_util.h */ +#define AES_VALIDATE_RET(cond) UTILS_INTERNAL_VALIDATE_RET(cond, UTILS_ERR_AES_BAD_INPUT_DATA) +#define AES_VALIDATE(cond) UTILS_INTERNAL_VALIDATE(cond) + +/* + * 32-bit integer manipulation macros (little endian) + */ +#ifndef GET_UINT32_LE +#define GET_UINT32_LE(n, b, i) \ + { \ + (n) = ((uint32_t)(b)[(i)]) | ((uint32_t)(b)[(i) + 1] << 8) | ((uint32_t)(b)[(i) + 2] << 16) | \ + ((uint32_t)(b)[(i) + 3] << 24); \ + } +#endif + +#ifndef PUT_UINT32_LE +#define PUT_UINT32_LE(n, b, i) \ + { \ + (b)[(i)] = (unsigned char)(((n)) & 0xFF); \ + (b)[(i) + 1] = (unsigned char)(((n) >> 8) & 0xFF); \ + (b)[(i) + 2] = (unsigned char)(((n) >> 16) & 0xFF); \ + (b)[(i) + 3] = (unsigned char)(((n) >> 24) & 0xFF); \ + } +#endif + +#if defined(UTILS_PADLOCK_C) && (defined(UTILS_HAVE_X86) || defined(UTILS_PADLOCK_ALIGN16)) +static int aes_padlock_ace = -1; +#endif + +#if defined(UTILS_AES_ROM_TABLES) +/* + * Forward S-box + */ +static const unsigned char FSb[256] = { + 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, + 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, + 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, + 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, + 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, + 0xCF, 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, + 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, 0x5F, + 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, + 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, + 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, + 0xAE, 0x08, 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 0x70, + 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, + 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, + 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16}; + +/* + * Forward tables + */ +#define FT \ + \ + V(A5, 63, 63, C6), V(84, 7C, 7C, F8), V(99, 77, 77, EE), V(8D, 7B, 7B, F6), V(0D, F2, F2, FF), V(BD, 6B, 6B, D6), \ + V(B1, 6F, 6F, DE), V(54, C5, C5, 91), V(50, 30, 30, 60), V(03, 01, 01, 02), V(A9, 67, 67, CE), \ + V(7D, 2B, 2B, 56), V(19, FE, FE, E7), V(62, D7, D7, B5), V(E6, AB, AB, 4D), V(9A, 76, 76, EC), \ + V(45, CA, CA, 8F), V(9D, 82, 82, 1F), V(40, C9, C9, 89), V(87, 7D, 7D, FA), V(15, FA, FA, EF), \ + V(EB, 59, 59, B2), V(C9, 47, 47, 8E), V(0B, F0, F0, FB), V(EC, AD, AD, 41), V(67, D4, D4, B3), \ + V(FD, A2, A2, 5F), V(EA, AF, AF, 45), V(BF, 9C, 9C, 23), V(F7, A4, A4, 53), V(96, 72, 72, E4), \ + V(5B, C0, C0, 9B), V(C2, B7, B7, 75), V(1C, FD, FD, E1), V(AE, 93, 93, 3D), V(6A, 26, 26, 4C), \ + V(5A, 36, 36, 6C), V(41, 3F, 3F, 7E), V(02, F7, F7, F5), V(4F, CC, CC, 83), V(5C, 34, 34, 68), \ + V(F4, A5, A5, 51), V(34, E5, E5, D1), V(08, F1, F1, F9), V(93, 71, 71, E2), V(73, D8, D8, AB), \ + V(53, 31, 31, 62), V(3F, 15, 15, 2A), V(0C, 04, 04, 08), V(52, C7, C7, 95), V(65, 23, 23, 46), \ + V(5E, C3, C3, 9D), V(28, 18, 18, 30), V(A1, 96, 96, 37), V(0F, 05, 05, 0A), V(B5, 9A, 9A, 2F), \ + V(09, 07, 07, 0E), V(36, 12, 12, 24), V(9B, 80, 80, 1B), V(3D, E2, E2, DF), V(26, EB, EB, CD), \ + V(69, 27, 27, 4E), V(CD, B2, B2, 7F), V(9F, 75, 75, EA), V(1B, 09, 09, 12), V(9E, 83, 83, 1D), \ + V(74, 2C, 2C, 58), V(2E, 1A, 1A, 34), V(2D, 1B, 1B, 36), V(B2, 6E, 6E, DC), V(EE, 5A, 5A, B4), \ + V(FB, A0, A0, 5B), V(F6, 52, 52, A4), V(4D, 3B, 3B, 76), V(61, D6, D6, B7), V(CE, B3, B3, 7D), \ + V(7B, 29, 29, 52), V(3E, E3, E3, DD), V(71, 2F, 2F, 5E), V(97, 84, 84, 13), V(F5, 53, 53, A6), \ + V(68, D1, D1, B9), V(00, 00, 00, 00), V(2C, ED, ED, C1), V(60, 20, 20, 40), V(1F, FC, FC, E3), \ + V(C8, B1, B1, 79), V(ED, 5B, 5B, B6), V(BE, 6A, 6A, D4), V(46, CB, CB, 8D), V(D9, BE, BE, 67), \ + V(4B, 39, 39, 72), V(DE, 4A, 4A, 94), V(D4, 4C, 4C, 98), V(E8, 58, 58, B0), V(4A, CF, CF, 85), \ + V(6B, D0, D0, BB), V(2A, EF, EF, C5), V(E5, AA, AA, 4F), V(16, FB, FB, ED), V(C5, 43, 43, 86), \ + V(D7, 4D, 4D, 9A), V(55, 33, 33, 66), V(94, 85, 85, 11), V(CF, 45, 45, 8A), V(10, F9, F9, E9), \ + V(06, 02, 02, 04), V(81, 7F, 7F, FE), V(F0, 50, 50, A0), V(44, 3C, 3C, 78), V(BA, 9F, 9F, 25), \ + V(E3, A8, A8, 4B), V(F3, 51, 51, A2), V(FE, A3, A3, 5D), V(C0, 40, 40, 80), V(8A, 8F, 8F, 05), \ + V(AD, 92, 92, 3F), V(BC, 9D, 9D, 21), V(48, 38, 38, 70), V(04, F5, F5, F1), V(DF, BC, BC, 63), \ + V(C1, B6, B6, 77), V(75, DA, DA, AF), V(63, 21, 21, 42), V(30, 10, 10, 20), V(1A, FF, FF, E5), \ + V(0E, F3, F3, FD), V(6D, D2, D2, BF), V(4C, CD, CD, 81), V(14, 0C, 0C, 18), V(35, 13, 13, 26), \ + V(2F, EC, EC, C3), V(E1, 5F, 5F, BE), V(A2, 97, 97, 35), V(CC, 44, 44, 88), V(39, 17, 17, 2E), \ + V(57, C4, C4, 93), V(F2, A7, A7, 55), V(82, 7E, 7E, FC), V(47, 3D, 3D, 7A), V(AC, 64, 64, C8), \ + V(E7, 5D, 5D, BA), V(2B, 19, 19, 32), V(95, 73, 73, E6), V(A0, 60, 60, C0), V(98, 81, 81, 19), \ + V(D1, 4F, 4F, 9E), V(7F, DC, DC, A3), V(66, 22, 22, 44), V(7E, 2A, 2A, 54), V(AB, 90, 90, 3B), \ + V(83, 88, 88, 0B), V(CA, 46, 46, 8C), V(29, EE, EE, C7), V(D3, B8, B8, 6B), V(3C, 14, 14, 28), \ + V(79, DE, DE, A7), V(E2, 5E, 5E, BC), V(1D, 0B, 0B, 16), V(76, DB, DB, AD), V(3B, E0, E0, DB), \ + V(56, 32, 32, 64), V(4E, 3A, 3A, 74), V(1E, 0A, 0A, 14), V(DB, 49, 49, 92), V(0A, 06, 06, 0C), \ + V(6C, 24, 24, 48), V(E4, 5C, 5C, B8), V(5D, C2, C2, 9F), V(6E, D3, D3, BD), V(EF, AC, AC, 43), \ + V(A6, 62, 62, C4), V(A8, 91, 91, 39), V(A4, 95, 95, 31), V(37, E4, E4, D3), V(8B, 79, 79, F2), \ + V(32, E7, E7, D5), V(43, C8, C8, 8B), V(59, 37, 37, 6E), V(B7, 6D, 6D, DA), V(8C, 8D, 8D, 01), \ + V(64, D5, D5, B1), V(D2, 4E, 4E, 9C), V(E0, A9, A9, 49), V(B4, 6C, 6C, D8), V(FA, 56, 56, AC), \ + V(07, F4, F4, F3), V(25, EA, EA, CF), V(AF, 65, 65, CA), V(8E, 7A, 7A, F4), V(E9, AE, AE, 47), \ + V(18, 08, 08, 10), V(D5, BA, BA, 6F), V(88, 78, 78, F0), V(6F, 25, 25, 4A), V(72, 2E, 2E, 5C), \ + V(24, 1C, 1C, 38), V(F1, A6, A6, 57), V(C7, B4, B4, 73), V(51, C6, C6, 97), V(23, E8, E8, CB), \ + V(7C, DD, DD, A1), V(9C, 74, 74, E8), V(21, 1F, 1F, 3E), V(DD, 4B, 4B, 96), V(DC, BD, BD, 61), \ + V(86, 8B, 8B, 0D), V(85, 8A, 8A, 0F), V(90, 70, 70, E0), V(42, 3E, 3E, 7C), V(C4, B5, B5, 71), \ + V(AA, 66, 66, CC), V(D8, 48, 48, 90), V(05, 03, 03, 06), V(01, F6, F6, F7), V(12, 0E, 0E, 1C), \ + V(A3, 61, 61, C2), V(5F, 35, 35, 6A), V(F9, 57, 57, AE), V(D0, B9, B9, 69), V(91, 86, 86, 17), \ + V(58, C1, C1, 99), V(27, 1D, 1D, 3A), V(B9, 9E, 9E, 27), V(38, E1, E1, D9), V(13, F8, F8, EB), \ + V(B3, 98, 98, 2B), V(33, 11, 11, 22), V(BB, 69, 69, D2), V(70, D9, D9, A9), V(89, 8E, 8E, 07), \ + V(A7, 94, 94, 33), V(B6, 9B, 9B, 2D), V(22, 1E, 1E, 3C), V(92, 87, 87, 15), V(20, E9, E9, C9), \ + V(49, CE, CE, 87), V(FF, 55, 55, AA), V(78, 28, 28, 50), V(7A, DF, DF, A5), V(8F, 8C, 8C, 03), \ + V(F8, A1, A1, 59), V(80, 89, 89, 09), V(17, 0D, 0D, 1A), V(DA, BF, BF, 65), V(31, E6, E6, D7), \ + V(C6, 42, 42, 84), V(B8, 68, 68, D0), V(C3, 41, 41, 82), V(B0, 99, 99, 29), V(77, 2D, 2D, 5A), \ + V(11, 0F, 0F, 1E), V(CB, B0, B0, 7B), V(FC, 54, 54, A8), V(D6, BB, BB, 6D), V(3A, 16, 16, 2C) + +#define V(a, b, c, d) 0x##a##b##c##d +static const uint32_t FT0[256] = {FT}; +#undef V + +#if !defined(UTILS_AES_FEWER_TABLES) + +#define V(a, b, c, d) 0x##b##c##d##a +static const uint32_t FT1[256] = {FT}; +#undef V + +#define V(a, b, c, d) 0x##c##d##a##b +static const uint32_t FT2[256] = {FT}; +#undef V + +#define V(a, b, c, d) 0x##d##a##b##c +static const uint32_t FT3[256] = {FT}; +#undef V + +#endif /* !UTILS_AES_FEWER_TABLES */ + +#undef FT + +/* + * Reverse S-box + */ +static const unsigned char RSb[256] = { + 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, + 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, + 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, + 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, + 0x5D, 0x65, 0xB6, 0x92, 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, + 0x84, 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, 0xD0, 0x2C, + 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 0x3A, 0x91, 0x11, 0x41, 0x4F, + 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, + 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, + 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, + 0x5A, 0xF4, 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, 0x60, + 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 0xA0, 0xE0, 0x3B, 0x4D, + 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, + 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D}; + +/* + * Reverse tables + */ +#define RT \ + \ + V(50, A7, F4, 51), V(53, 65, 41, 7E), V(C3, A4, 17, 1A), V(96, 5E, 27, 3A), V(CB, 6B, AB, 3B), V(F1, 45, 9D, 1F), \ + V(AB, 58, FA, AC), V(93, 03, E3, 4B), V(55, FA, 30, 20), V(F6, 6D, 76, AD), V(91, 76, CC, 88), \ + V(25, 4C, 02, F5), V(FC, D7, E5, 4F), V(D7, CB, 2A, C5), V(80, 44, 35, 26), V(8F, A3, 62, B5), \ + V(49, 5A, B1, DE), V(67, 1B, BA, 25), V(98, 0E, EA, 45), V(E1, C0, FE, 5D), V(02, 75, 2F, C3), \ + V(12, F0, 4C, 81), V(A3, 97, 46, 8D), V(C6, F9, D3, 6B), V(E7, 5F, 8F, 03), V(95, 9C, 92, 15), \ + V(EB, 7A, 6D, BF), V(DA, 59, 52, 95), V(2D, 83, BE, D4), V(D3, 21, 74, 58), V(29, 69, E0, 49), \ + V(44, C8, C9, 8E), V(6A, 89, C2, 75), V(78, 79, 8E, F4), V(6B, 3E, 58, 99), V(DD, 71, B9, 27), \ + V(B6, 4F, E1, BE), V(17, AD, 88, F0), V(66, AC, 20, C9), V(B4, 3A, CE, 7D), V(18, 4A, DF, 63), \ + V(82, 31, 1A, E5), V(60, 33, 51, 97), V(45, 7F, 53, 62), V(E0, 77, 64, B1), V(84, AE, 6B, BB), \ + V(1C, A0, 81, FE), V(94, 2B, 08, F9), V(58, 68, 48, 70), V(19, FD, 45, 8F), V(87, 6C, DE, 94), \ + V(B7, F8, 7B, 52), V(23, D3, 73, AB), V(E2, 02, 4B, 72), V(57, 8F, 1F, E3), V(2A, AB, 55, 66), \ + V(07, 28, EB, B2), V(03, C2, B5, 2F), V(9A, 7B, C5, 86), V(A5, 08, 37, D3), V(F2, 87, 28, 30), \ + V(B2, A5, BF, 23), V(BA, 6A, 03, 02), V(5C, 82, 16, ED), V(2B, 1C, CF, 8A), V(92, B4, 79, A7), \ + V(F0, F2, 07, F3), V(A1, E2, 69, 4E), V(CD, F4, DA, 65), V(D5, BE, 05, 06), V(1F, 62, 34, D1), \ + V(8A, FE, A6, C4), V(9D, 53, 2E, 34), V(A0, 55, F3, A2), V(32, E1, 8A, 05), V(75, EB, F6, A4), \ + V(39, EC, 83, 0B), V(AA, EF, 60, 40), V(06, 9F, 71, 5E), V(51, 10, 6E, BD), V(F9, 8A, 21, 3E), \ + V(3D, 06, DD, 96), V(AE, 05, 3E, DD), V(46, BD, E6, 4D), V(B5, 8D, 54, 91), V(05, 5D, C4, 71), \ + V(6F, D4, 06, 04), V(FF, 15, 50, 60), V(24, FB, 98, 19), V(97, E9, BD, D6), V(CC, 43, 40, 89), \ + V(77, 9E, D9, 67), V(BD, 42, E8, B0), V(88, 8B, 89, 07), V(38, 5B, 19, E7), V(DB, EE, C8, 79), \ + V(47, 0A, 7C, A1), V(E9, 0F, 42, 7C), V(C9, 1E, 84, F8), V(00, 00, 00, 00), V(83, 86, 80, 09), \ + V(48, ED, 2B, 32), V(AC, 70, 11, 1E), V(4E, 72, 5A, 6C), V(FB, FF, 0E, FD), V(56, 38, 85, 0F), \ + V(1E, D5, AE, 3D), V(27, 39, 2D, 36), V(64, D9, 0F, 0A), V(21, A6, 5C, 68), V(D1, 54, 5B, 9B), \ + V(3A, 2E, 36, 24), V(B1, 67, 0A, 0C), V(0F, E7, 57, 93), V(D2, 96, EE, B4), V(9E, 91, 9B, 1B), \ + V(4F, C5, C0, 80), V(A2, 20, DC, 61), V(69, 4B, 77, 5A), V(16, 1A, 12, 1C), V(0A, BA, 93, E2), \ + V(E5, 2A, A0, C0), V(43, E0, 22, 3C), V(1D, 17, 1B, 12), V(0B, 0D, 09, 0E), V(AD, C7, 8B, F2), \ + V(B9, A8, B6, 2D), V(C8, A9, 1E, 14), V(85, 19, F1, 57), V(4C, 07, 75, AF), V(BB, DD, 99, EE), \ + V(FD, 60, 7F, A3), V(9F, 26, 01, F7), V(BC, F5, 72, 5C), V(C5, 3B, 66, 44), V(34, 7E, FB, 5B), \ + V(76, 29, 43, 8B), V(DC, C6, 23, CB), V(68, FC, ED, B6), V(63, F1, E4, B8), V(CA, DC, 31, D7), \ + V(10, 85, 63, 42), V(40, 22, 97, 13), V(20, 11, C6, 84), V(7D, 24, 4A, 85), V(F8, 3D, BB, D2), \ + V(11, 32, F9, AE), V(6D, A1, 29, C7), V(4B, 2F, 9E, 1D), V(F3, 30, B2, DC), V(EC, 52, 86, 0D), \ + V(D0, E3, C1, 77), V(6C, 16, B3, 2B), V(99, B9, 70, A9), V(FA, 48, 94, 11), V(22, 64, E9, 47), \ + V(C4, 8C, FC, A8), V(1A, 3F, F0, A0), V(D8, 2C, 7D, 56), V(EF, 90, 33, 22), V(C7, 4E, 49, 87), \ + V(C1, D1, 38, D9), V(FE, A2, CA, 8C), V(36, 0B, D4, 98), V(CF, 81, F5, A6), V(28, DE, 7A, A5), \ + V(26, 8E, B7, DA), V(A4, BF, AD, 3F), V(E4, 9D, 3A, 2C), V(0D, 92, 78, 50), V(9B, CC, 5F, 6A), \ + V(62, 46, 7E, 54), V(C2, 13, 8D, F6), V(E8, B8, D8, 90), V(5E, F7, 39, 2E), V(F5, AF, C3, 82), \ + V(BE, 80, 5D, 9F), V(7C, 93, D0, 69), V(A9, 2D, D5, 6F), V(B3, 12, 25, CF), V(3B, 99, AC, C8), \ + V(A7, 7D, 18, 10), V(6E, 63, 9C, E8), V(7B, BB, 3B, DB), V(09, 78, 26, CD), V(F4, 18, 59, 6E), \ + V(01, B7, 9A, EC), V(A8, 9A, 4F, 83), V(65, 6E, 95, E6), V(7E, E6, FF, AA), V(08, CF, BC, 21), \ + V(E6, E8, 15, EF), V(D9, 9B, E7, BA), V(CE, 36, 6F, 4A), V(D4, 09, 9F, EA), V(D6, 7C, B0, 29), \ + V(AF, B2, A4, 31), V(31, 23, 3F, 2A), V(30, 94, A5, C6), V(C0, 66, A2, 35), V(37, BC, 4E, 74), \ + V(A6, CA, 82, FC), V(B0, D0, 90, E0), V(15, D8, A7, 33), V(4A, 98, 04, F1), V(F7, DA, EC, 41), \ + V(0E, 50, CD, 7F), V(2F, F6, 91, 17), V(8D, D6, 4D, 76), V(4D, B0, EF, 43), V(54, 4D, AA, CC), \ + V(DF, 04, 96, E4), V(E3, B5, D1, 9E), V(1B, 88, 6A, 4C), V(B8, 1F, 2C, C1), V(7F, 51, 65, 46), \ + V(04, EA, 5E, 9D), V(5D, 35, 8C, 01), V(73, 74, 87, FA), V(2E, 41, 0B, FB), V(5A, 1D, 67, B3), \ + V(52, D2, DB, 92), V(33, 56, 10, E9), V(13, 47, D6, 6D), V(8C, 61, D7, 9A), V(7A, 0C, A1, 37), \ + V(8E, 14, F8, 59), V(89, 3C, 13, EB), V(EE, 27, A9, CE), V(35, C9, 61, B7), V(ED, E5, 1C, E1), \ + V(3C, B1, 47, 7A), V(59, DF, D2, 9C), V(3F, 73, F2, 55), V(79, CE, 14, 18), V(BF, 37, C7, 73), \ + V(EA, CD, F7, 53), V(5B, AA, FD, 5F), V(14, 6F, 3D, DF), V(86, DB, 44, 78), V(81, F3, AF, CA), \ + V(3E, C4, 68, B9), V(2C, 34, 24, 38), V(5F, 40, A3, C2), V(72, C3, 1D, 16), V(0C, 25, E2, BC), \ + V(8B, 49, 3C, 28), V(41, 95, 0D, FF), V(71, 01, A8, 39), V(DE, B3, 0C, 08), V(9C, E4, B4, D8), \ + V(90, C1, 56, 64), V(61, 84, CB, 7B), V(70, B6, 32, D5), V(74, 5C, 6C, 48), V(42, 57, B8, D0) + +#define V(a, b, c, d) 0x##a##b##c##d +static const uint32_t RT0[256] = {RT}; +#undef V + +#if !defined(UTILS_AES_FEWER_TABLES) + +#define V(a, b, c, d) 0x##b##c##d##a +static const uint32_t RT1[256] = {RT}; +#undef V + +#define V(a, b, c, d) 0x##c##d##a##b +static const uint32_t RT2[256] = {RT}; +#undef V + +#define V(a, b, c, d) 0x##d##a##b##c +static const uint32_t RT3[256] = {RT}; +#undef V + +#endif /* !UTILS_AES_FEWER_TABLES */ + +#undef RT + +/* + * Round constants + */ +static const uint32_t RCON[10] = {0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, + 0x00000020, 0x00000040, 0x00000080, 0x0000001B, 0x00000036}; + +#else /* UTILS_AES_ROM_TABLES */ + +/* + * Forward S-box & tables + */ +static unsigned char FSb[256]; +static uint32_t FT0[256]; +#if !defined(UTILS_AES_FEWER_TABLES) +static uint32_t FT1[256]; +static uint32_t FT2[256]; +static uint32_t FT3[256]; +#endif /* !UTILS_AES_FEWER_TABLES */ + +/* + * Reverse S-box & tables + */ +static unsigned char RSb[256]; +static uint32_t RT0[256]; +#if !defined(UTILS_AES_FEWER_TABLES) +static uint32_t RT1[256]; +static uint32_t RT2[256]; +static uint32_t RT3[256]; +#endif /* !UTILS_AES_FEWER_TABLES */ + +/* + * Round constants + */ +static uint32_t RCON[10]; + +/* + * Tables generation code + */ +#define ROTL8(x) ((x << 8) & 0xFFFFFFFF) | (x >> 24) +#define XTIME(x) ((x << 1) ^ ((x & 0x80) ? 0x1B : 0x00)) +#define MUL(x, y) ((x && y) ? pow[(log[x] + log[y]) % 255] : 0) + +static int aes_init_done = 0; + +static void aes_gen_tables(void) +{ + int i, x, y, z; + int pow[256]; + int log[256]; + + /* + * compute pow and log tables over GF(2^8) + */ + for (i = 0, x = 1; i < 256; i++) { + pow[i] = x; + log[x] = i; + x = (x ^ XTIME(x)) & 0xFF; + } + + /* + * calculate the round constants + */ + for (i = 0, x = 1; i < 10; i++) { + RCON[i] = (uint32_t)x; + x = XTIME(x) & 0xFF; + } + + /* + * generate the forward and reverse S-boxes + */ + FSb[0x00] = 0x63; + RSb[0x63] = 0x00; + + for (i = 1; i < 256; i++) { + x = pow[255 - log[i]]; + + y = x; + y = ((y << 1) | (y >> 7)) & 0xFF; + x ^= y; + y = ((y << 1) | (y >> 7)) & 0xFF; + x ^= y; + y = ((y << 1) | (y >> 7)) & 0xFF; + x ^= y; + y = ((y << 1) | (y >> 7)) & 0xFF; + x ^= y ^ 0x63; + + FSb[i] = (unsigned char)x; + RSb[x] = (unsigned char)i; + } + + /* + * generate the forward and reverse tables + */ + for (i = 0; i < 256; i++) { + x = FSb[i]; + y = XTIME(x) & 0xFF; + z = (y ^ x) & 0xFF; + + FT0[i] = ((uint32_t)y) ^ ((uint32_t)x << 8) ^ ((uint32_t)x << 16) ^ ((uint32_t)z << 24); + +#if !defined(UTILS_AES_FEWER_TABLES) + FT1[i] = ROTL8(FT0[i]); + FT2[i] = ROTL8(FT1[i]); + FT3[i] = ROTL8(FT2[i]); +#endif /* !UTILS_AES_FEWER_TABLES */ + + x = RSb[i]; + + RT0[i] = ((uint32_t)MUL(0x0E, x)) ^ ((uint32_t)MUL(0x09, x) << 8) ^ ((uint32_t)MUL(0x0D, x) << 16) ^ + ((uint32_t)MUL(0x0B, x) << 24); + +#if !defined(UTILS_AES_FEWER_TABLES) + RT1[i] = ROTL8(RT0[i]); + RT2[i] = ROTL8(RT1[i]); + RT3[i] = ROTL8(RT2[i]); +#endif /* !UTILS_AES_FEWER_TABLES */ + } +} + +#undef ROTL8 + +#endif /* UTILS_AES_ROM_TABLES */ + +#if defined(UTILS_AES_FEWER_TABLES) + +#define ROTL8(x) ((uint32_t)((x) << 8) + (uint32_t)((x) >> 24)) +#define ROTL16(x) ((uint32_t)((x) << 16) + (uint32_t)((x) >> 16)) +#define ROTL24(x) ((uint32_t)((x) << 24) + (uint32_t)((x) >> 8)) + +#define AES_RT0(idx) RT0[idx] +#define AES_RT1(idx) ROTL8(RT0[idx]) +#define AES_RT2(idx) ROTL16(RT0[idx]) +#define AES_RT3(idx) ROTL24(RT0[idx]) + +#define AES_FT0(idx) FT0[idx] +#define AES_FT1(idx) ROTL8(FT0[idx]) +#define AES_FT2(idx) ROTL16(FT0[idx]) +#define AES_FT3(idx) ROTL24(FT0[idx]) + +#else /* UTILS_AES_FEWER_TABLES */ + +#define AES_RT0(idx) RT0[idx] +#define AES_RT1(idx) RT1[idx] +#define AES_RT2(idx) RT2[idx] +#define AES_RT3(idx) RT3[idx] + +#define AES_FT0(idx) FT0[idx] +#define AES_FT1(idx) FT1[idx] +#define AES_FT2(idx) FT2[idx] +#define AES_FT3(idx) FT3[idx] + +#endif /* UTILS_AES_FEWER_TABLES */ + +void utils_aes_init(utils_aes_context *ctx) +{ + AES_VALIDATE(ctx != NULL); + + memset(ctx, 0, sizeof(utils_aes_context)); +} + +void utils_aes_free(utils_aes_context *ctx) +{ + if (ctx == NULL) + return; + + utils_platform_zeroize(ctx, sizeof(utils_aes_context)); +} + +/* + * AES key schedule (encryption) + */ +#if !defined(UTILS_AES_SETKEY_ENC_ALT) +int utils_aes_setkey_enc(utils_aes_context *ctx, const unsigned char *key, unsigned int keybits) +{ + unsigned int i; + uint32_t * RK; + + AES_VALIDATE_RET(ctx != NULL); + AES_VALIDATE_RET(key != NULL); + + switch (keybits) { + case 128: + ctx->nr = 10; + break; + case 192: + ctx->nr = 12; + break; + case 256: + ctx->nr = 14; + break; + default: + return (UTILS_ERR_AES_INVALID_KEY_LENGTH); + } + +#if !defined(UTILS_AES_ROM_TABLES) + if (aes_init_done == 0) { + aes_gen_tables(); + aes_init_done = 1; + } +#endif + + ctx->rk = RK = ctx->buf; + + for (i = 0; i < (keybits >> 5); i++) { + GET_UINT32_LE(RK[i], key, i << 2); + } + + switch (ctx->nr) { + case 10: + + for (i = 0; i < 10; i++, RK += 4) { + RK[4] = RK[0] ^ RCON[i] ^ ((uint32_t)FSb[(RK[3] >> 8) & 0xFF]) ^ + ((uint32_t)FSb[(RK[3] >> 16) & 0xFF] << 8) ^ ((uint32_t)FSb[(RK[3] >> 24) & 0xFF] << 16) ^ + ((uint32_t)FSb[(RK[3]) & 0xFF] << 24); + + RK[5] = RK[1] ^ RK[4]; + RK[6] = RK[2] ^ RK[5]; + RK[7] = RK[3] ^ RK[6]; + } + break; + + case 12: + + for (i = 0; i < 8; i++, RK += 6) { + RK[6] = RK[0] ^ RCON[i] ^ ((uint32_t)FSb[(RK[5] >> 8) & 0xFF]) ^ + ((uint32_t)FSb[(RK[5] >> 16) & 0xFF] << 8) ^ ((uint32_t)FSb[(RK[5] >> 24) & 0xFF] << 16) ^ + ((uint32_t)FSb[(RK[5]) & 0xFF] << 24); + + RK[7] = RK[1] ^ RK[6]; + RK[8] = RK[2] ^ RK[7]; + RK[9] = RK[3] ^ RK[8]; + RK[10] = RK[4] ^ RK[9]; + RK[11] = RK[5] ^ RK[10]; + } + break; + + case 14: + + for (i = 0; i < 7; i++, RK += 8) { + RK[8] = RK[0] ^ RCON[i] ^ ((uint32_t)FSb[(RK[7] >> 8) & 0xFF]) ^ + ((uint32_t)FSb[(RK[7] >> 16) & 0xFF] << 8) ^ ((uint32_t)FSb[(RK[7] >> 24) & 0xFF] << 16) ^ + ((uint32_t)FSb[(RK[7]) & 0xFF] << 24); + + RK[9] = RK[1] ^ RK[8]; + RK[10] = RK[2] ^ RK[9]; + RK[11] = RK[3] ^ RK[10]; + + RK[12] = RK[4] ^ ((uint32_t)FSb[(RK[11]) & 0xFF]) ^ ((uint32_t)FSb[(RK[11] >> 8) & 0xFF] << 8) ^ + ((uint32_t)FSb[(RK[11] >> 16) & 0xFF] << 16) ^ ((uint32_t)FSb[(RK[11] >> 24) & 0xFF] << 24); + + RK[13] = RK[5] ^ RK[12]; + RK[14] = RK[6] ^ RK[13]; + RK[15] = RK[7] ^ RK[14]; + } + break; + } + + return (0); +} +#endif /* !UTILS_AES_SETKEY_ENC_ALT */ + +/* + * AES key schedule (decryption) + */ +#if !defined(UTILS_AES_SETKEY_DEC_ALT) +int utils_aes_setkey_dec(utils_aes_context *ctx, const unsigned char *key, unsigned int keybits) +{ + int i, j, ret; + utils_aes_context cty; + uint32_t * RK; + uint32_t * SK; + + AES_VALIDATE_RET(ctx != NULL); + AES_VALIDATE_RET(key != NULL); + + utils_aes_init(&cty); + + ctx->rk = RK = ctx->buf; + + /* Also checks keybits */ + if ((ret = utils_aes_setkey_enc(&cty, key, keybits)) != 0) + goto exit; + + ctx->nr = cty.nr; + + SK = cty.rk + cty.nr * 4; + + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + + for (i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8) { + for (j = 0; j < 4; j++, SK++) { + *RK++ = AES_RT0(FSb[(*SK) & 0xFF]) ^ AES_RT1(FSb[(*SK >> 8) & 0xFF]) ^ AES_RT2(FSb[(*SK >> 16) & 0xFF]) ^ + AES_RT3(FSb[(*SK >> 24) & 0xFF]); + } + } + + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + *RK++ = *SK++; + +exit: + utils_aes_free(&cty); + + return (ret); +} + +#endif /* !UTILS_AES_SETKEY_DEC_ALT */ + +#define AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3) \ + { \ + X0 = *RK++ ^ AES_FT0((Y0)&0xFF) ^ AES_FT1((Y1 >> 8) & 0xFF) ^ AES_FT2((Y2 >> 16) & 0xFF) ^ \ + AES_FT3((Y3 >> 24) & 0xFF); \ + \ + X1 = *RK++ ^ AES_FT0((Y1)&0xFF) ^ AES_FT1((Y2 >> 8) & 0xFF) ^ AES_FT2((Y3 >> 16) & 0xFF) ^ \ + AES_FT3((Y0 >> 24) & 0xFF); \ + \ + X2 = *RK++ ^ AES_FT0((Y2)&0xFF) ^ AES_FT1((Y3 >> 8) & 0xFF) ^ AES_FT2((Y0 >> 16) & 0xFF) ^ \ + AES_FT3((Y1 >> 24) & 0xFF); \ + \ + X3 = *RK++ ^ AES_FT0((Y3)&0xFF) ^ AES_FT1((Y0 >> 8) & 0xFF) ^ AES_FT2((Y1 >> 16) & 0xFF) ^ \ + AES_FT3((Y2 >> 24) & 0xFF); \ + } + +#define AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3) \ + { \ + X0 = *RK++ ^ AES_RT0((Y0)&0xFF) ^ AES_RT1((Y3 >> 8) & 0xFF) ^ AES_RT2((Y2 >> 16) & 0xFF) ^ \ + AES_RT3((Y1 >> 24) & 0xFF); \ + \ + X1 = *RK++ ^ AES_RT0((Y1)&0xFF) ^ AES_RT1((Y0 >> 8) & 0xFF) ^ AES_RT2((Y3 >> 16) & 0xFF) ^ \ + AES_RT3((Y2 >> 24) & 0xFF); \ + \ + X2 = *RK++ ^ AES_RT0((Y2)&0xFF) ^ AES_RT1((Y1 >> 8) & 0xFF) ^ AES_RT2((Y0 >> 16) & 0xFF) ^ \ + AES_RT3((Y3 >> 24) & 0xFF); \ + \ + X3 = *RK++ ^ AES_RT0((Y3)&0xFF) ^ AES_RT1((Y2 >> 8) & 0xFF) ^ AES_RT2((Y1 >> 16) & 0xFF) ^ \ + AES_RT3((Y0 >> 24) & 0xFF); \ + } + +/* + * AES-ECB block encryption + */ +#if !defined(UTILS_AES_ENCRYPT_ALT) +int utils_internal_aes_encrypt(utils_aes_context *ctx, const unsigned char input[16], unsigned char output[16]) +{ + int i; + uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; + + RK = ctx->rk; + + GET_UINT32_LE(X0, input, 0); + X0 ^= *RK++; + GET_UINT32_LE(X1, input, 4); + X1 ^= *RK++; + GET_UINT32_LE(X2, input, 8); + X2 ^= *RK++; + GET_UINT32_LE(X3, input, 12); + X3 ^= *RK++; + + for (i = (ctx->nr >> 1) - 1; i > 0; i--) { + AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); + AES_FROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); + } + + AES_FROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); + + X0 = *RK++ ^ ((uint32_t)FSb[(Y0)&0xFF]) ^ ((uint32_t)FSb[(Y1 >> 8) & 0xFF] << 8) ^ + ((uint32_t)FSb[(Y2 >> 16) & 0xFF] << 16) ^ ((uint32_t)FSb[(Y3 >> 24) & 0xFF] << 24); + + X1 = *RK++ ^ ((uint32_t)FSb[(Y1)&0xFF]) ^ ((uint32_t)FSb[(Y2 >> 8) & 0xFF] << 8) ^ + ((uint32_t)FSb[(Y3 >> 16) & 0xFF] << 16) ^ ((uint32_t)FSb[(Y0 >> 24) & 0xFF] << 24); + + X2 = *RK++ ^ ((uint32_t)FSb[(Y2)&0xFF]) ^ ((uint32_t)FSb[(Y3 >> 8) & 0xFF] << 8) ^ + ((uint32_t)FSb[(Y0 >> 16) & 0xFF] << 16) ^ ((uint32_t)FSb[(Y1 >> 24) & 0xFF] << 24); + + X3 = *RK++ ^ ((uint32_t)FSb[(Y3)&0xFF]) ^ ((uint32_t)FSb[(Y0 >> 8) & 0xFF] << 8) ^ + ((uint32_t)FSb[(Y1 >> 16) & 0xFF] << 16) ^ ((uint32_t)FSb[(Y2 >> 24) & 0xFF] << 24); + + PUT_UINT32_LE(X0, output, 0); + PUT_UINT32_LE(X1, output, 4); + PUT_UINT32_LE(X2, output, 8); + PUT_UINT32_LE(X3, output, 12); + + return (0); +} +#endif /* !UTILS_AES_ENCRYPT_ALT */ + +#if !defined(UTILS_DEPRECATED_REMOVED) +void utils_aes_encrypt(utils_aes_context *ctx, const unsigned char input[16], unsigned char output[16]) +{ + utils_internal_aes_encrypt(ctx, input, output); +} +#endif /* !UTILS_DEPRECATED_REMOVED */ + +/* + * AES-ECB block decryption + */ +#if !defined(UTILS_AES_DECRYPT_ALT) +int utils_internal_aes_decrypt(utils_aes_context *ctx, const unsigned char input[16], unsigned char output[16]) +{ + int i; + uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; + + RK = ctx->rk; + + GET_UINT32_LE(X0, input, 0); + X0 ^= *RK++; + GET_UINT32_LE(X1, input, 4); + X1 ^= *RK++; + GET_UINT32_LE(X2, input, 8); + X2 ^= *RK++; + GET_UINT32_LE(X3, input, 12); + X3 ^= *RK++; + + for (i = (ctx->nr >> 1) - 1; i > 0; i--) { + AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); + AES_RROUND(X0, X1, X2, X3, Y0, Y1, Y2, Y3); + } + + AES_RROUND(Y0, Y1, Y2, Y3, X0, X1, X2, X3); + + X0 = *RK++ ^ ((uint32_t)RSb[(Y0)&0xFF]) ^ ((uint32_t)RSb[(Y3 >> 8) & 0xFF] << 8) ^ + ((uint32_t)RSb[(Y2 >> 16) & 0xFF] << 16) ^ ((uint32_t)RSb[(Y1 >> 24) & 0xFF] << 24); + + X1 = *RK++ ^ ((uint32_t)RSb[(Y1)&0xFF]) ^ ((uint32_t)RSb[(Y0 >> 8) & 0xFF] << 8) ^ + ((uint32_t)RSb[(Y3 >> 16) & 0xFF] << 16) ^ ((uint32_t)RSb[(Y2 >> 24) & 0xFF] << 24); + + X2 = *RK++ ^ ((uint32_t)RSb[(Y2)&0xFF]) ^ ((uint32_t)RSb[(Y1 >> 8) & 0xFF] << 8) ^ + ((uint32_t)RSb[(Y0 >> 16) & 0xFF] << 16) ^ ((uint32_t)RSb[(Y3 >> 24) & 0xFF] << 24); + + X3 = *RK++ ^ ((uint32_t)RSb[(Y3)&0xFF]) ^ ((uint32_t)RSb[(Y2 >> 8) & 0xFF] << 8) ^ + ((uint32_t)RSb[(Y1 >> 16) & 0xFF] << 16) ^ ((uint32_t)RSb[(Y0 >> 24) & 0xFF] << 24); + + PUT_UINT32_LE(X0, output, 0); + PUT_UINT32_LE(X1, output, 4); + PUT_UINT32_LE(X2, output, 8); + PUT_UINT32_LE(X3, output, 12); + + return (0); +} +#endif /* !UTILS_AES_DECRYPT_ALT */ + +#if !defined(UTILS_DEPRECATED_REMOVED) +void utils_aes_decrypt(utils_aes_context *ctx, const unsigned char input[16], unsigned char output[16]) +{ + utils_internal_aes_decrypt(ctx, input, output); +} +#endif /* !UTILS_DEPRECATED_REMOVED */ + +/* + * AES-ECB block encryption/decryption + */ +int utils_aes_crypt_ecb(utils_aes_context *ctx, int mode, const unsigned char input[16], unsigned char output[16]) +{ + AES_VALIDATE_RET(ctx != NULL); + AES_VALIDATE_RET(input != NULL); + AES_VALIDATE_RET(output != NULL); + AES_VALIDATE_RET(mode == UTILS_AES_ENCRYPT || mode == UTILS_AES_DECRYPT); + + if (mode == UTILS_AES_ENCRYPT) + return (utils_internal_aes_encrypt(ctx, input, output)); + else + return (utils_internal_aes_decrypt(ctx, input, output)); +} + +#if defined(UTILS_CIPHER_MODE_CBC) +/* + * AES-CBC buffer encryption/decryption + */ +int utils_aes_crypt_cbc(utils_aes_context *ctx, int mode, size_t length, unsigned char iv[16], + const unsigned char *input, unsigned char *output) +{ + int i; + unsigned char temp[16]; + + AES_VALIDATE_RET(ctx != NULL); + AES_VALIDATE_RET(mode == UTILS_AES_ENCRYPT || mode == UTILS_AES_DECRYPT); + AES_VALIDATE_RET(iv != NULL); + AES_VALIDATE_RET(input != NULL); + AES_VALIDATE_RET(output != NULL); + + if (length % 16) + return (UTILS_ERR_AES_INVALID_INPUT_LENGTH); + + if (mode == UTILS_AES_DECRYPT) { + while (length > 0) { + memcpy(temp, input, 16); + utils_aes_crypt_ecb(ctx, mode, input, output); + + for (i = 0; i < 16; i++) output[i] = (unsigned char)(output[i] ^ iv[i]); + + memcpy(iv, temp, 16); + + input += 16; + output += 16; + length -= 16; + } + } else { + while (length > 0) { + for (i = 0; i < 16; i++) output[i] = (unsigned char)(input[i] ^ iv[i]); + + utils_aes_crypt_ecb(ctx, mode, output, output); + memcpy(iv, output, 16); + + input += 16; + output += 16; + length -= 16; + } + } + + return (0); +} + +int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, uint8_t *pOutData, uint32_t outBuffLen, uint8_t mode, + uint8_t *pKey, uint16_t keybits, uint8_t *iv) +{ + int ret = QCLOUD_RET_SUCCESS; + int padlen; + utils_aes_context ctx; + + utils_aes_init(&ctx); + + if (UTILS_AES_ENCRYPT == mode) { + ret = utils_aes_setkey_enc(&ctx, pKey, keybits); + if (ret != 0) { + Log_e("Set encry key err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*zero padding*/ + if (outBuffLen < (datalen + UTILS_AES_BLOCK_LEN)) { + Log_e("Output buffer should not less than datalen+UTILS_AES_BLOCK_LEN for padding"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + padlen = UTILS_AES_BLOCK_LEN - datalen % UTILS_AES_BLOCK_LEN; + memcpy(pOutData, pInData, datalen); + memset(pOutData + datalen, '\0', padlen); /*zero-padding*/ + datalen += padlen; + } else { + ret = utils_aes_setkey_dec(&ctx, pKey, keybits); + if (ret != 0) { + Log_e("Set dencry key err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + } + + ret = utils_aes_crypt_cbc(&ctx, mode, datalen, iv, pInData, pOutData); + if (ret != 0) { + Log_e("encryt err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } else { + ret = QCLOUD_RET_SUCCESS; + } + +exit: + + return ret; +} +#endif /* UTILS_CIPHER_MODE_CBC */ + +#endif /* !UTILS_AES_ALT */ + +#if defined(UTILS_SELF_TEST) +/* + * AES test vectors from: + * + * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip + */ +static const unsigned char aes_test_ecb_dec[3][16] = { + {0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0}, + {0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4}, + {0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE}}; + +static const unsigned char aes_test_ecb_enc[3][16] = { + {0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F}, + {0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14}, + {0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4}}; + +#if defined(UTILS_CIPHER_MODE_CBC) +static const unsigned char aes_test_cbc_dec[3][16] = { + {0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86}, + {0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B}, + {0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13}}; + +static const unsigned char aes_test_cbc_enc[3][16] = { + {0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D}, + {0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04}, + {0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0}}; +#endif /* UTILS_CIPHER_MODE_CBC */ + +/* + * Checkup routine + */ +int utils_aes_self_test(int verbose) +{ + int ret = 0, i, j, u, mode; + unsigned int keybits; + unsigned char key[32]; + unsigned char buf[64]; + const unsigned char *aes_tests; +#if defined(UTILS_CIPHER_MODE_CBC) || defined(UTILS_CIPHER_MODE_CFB) + unsigned char iv[16]; +#endif +#if defined(UTILS_CIPHER_MODE_CBC) + unsigned char prv[16]; +#endif +#if defined(UTILS_CIPHER_MODE_CTR) || defined(UTILS_CIPHER_MODE_CFB) || defined(UTILS_CIPHER_MODE_OFB) + size_t offset; +#endif +#if defined(UTILS_CIPHER_MODE_CTR) || defined(UTILS_CIPHER_MODE_XTS) + int len; +#endif +#if defined(UTILS_CIPHER_MODE_CTR) + unsigned char nonce_counter[16]; + unsigned char stream_block[16]; +#endif + utils_aes_context ctx; + + memset(key, 0, 32); + utils_aes_init(&ctx); + + /* + * ECB mode + */ + for (i = 0; i < 6; i++) { + u = i >> 1; + keybits = 128 + u * 64; + mode = i & 1; + + if (verbose != 0) + utils_printf(" AES-ECB-%3d (%s): ", keybits, (mode == UTILS_AES_DECRYPT) ? "dec" : "enc"); + + memset(buf, 0, 16); + + if (mode == UTILS_AES_DECRYPT) { + ret = utils_aes_setkey_dec(&ctx, key, keybits); + aes_tests = aes_test_ecb_dec[u]; + } else { + ret = utils_aes_setkey_enc(&ctx, key, keybits); + aes_tests = aes_test_ecb_enc[u]; + } + + /* + * AES-192 is an optional feature that may be unavailable when + * there is an alternative underlying implementation i.e. when + * UTILS_AES_ALT is defined. + */ + if (ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192) { + utils_printf("skipped\n"); + continue; + } else if (ret != 0) { + goto exit; + } + + for (j = 0; j < 10000; j++) { + ret = utils_aes_crypt_ecb(&ctx, mode, buf, buf); + if (ret != 0) + goto exit; + } + + if (memcmp(buf, aes_tests, 16) != 0) { + ret = 1; + goto exit; + } + + if (verbose != 0) + utils_printf("passed\n"); + } + + if (verbose != 0) + utils_printf("\n"); + +#if defined(UTILS_CIPHER_MODE_CBC) + /* + * CBC mode + */ + for (i = 0; i < 6; i++) { + u = i >> 1; + keybits = 128 + u * 64; + mode = i & 1; + + if (verbose != 0) + utils_printf(" AES-CBC-%3d (%s): ", keybits, (mode == UTILS_AES_DECRYPT) ? "dec" : "enc"); + + memset(iv, 0, 16); + memset(prv, 0, 16); + memset(buf, 0, 16); + + if (mode == UTILS_AES_DECRYPT) { + ret = utils_aes_setkey_dec(&ctx, key, keybits); + aes_tests = aes_test_cbc_dec[u]; + } else { + ret = utils_aes_setkey_enc(&ctx, key, keybits); + aes_tests = aes_test_cbc_enc[u]; + } + + /* + * AES-192 is an optional feature that may be unavailable when + * there is an alternative underlying implementation i.e. when + * UTILS_AES_ALT is defined. + */ + if (ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192) { + utils_printf("skipped\n"); + continue; + } else if (ret != 0) { + goto exit; + } + + for (j = 0; j < 10000; j++) { + if (mode == UTILS_AES_ENCRYPT) { + unsigned char tmp[16]; + + memcpy(tmp, prv, 16); + memcpy(prv, buf, 16); + memcpy(buf, tmp, 16); + } + + ret = utils_aes_crypt_cbc(&ctx, mode, 16, iv, buf, buf); + if (ret != 0) + goto exit; + } + + if (memcmp(buf, aes_tests, 16) != 0) { + ret = 1; + goto exit; + } + + if (verbose != 0) + utils_printf("passed\n"); + } + + if (verbose != 0) + utils_printf("\n"); +#endif /* UTILS_CIPHER_MODE_CBC */ + +#if defined(UTILS_CIPHER_MODE_CFB) + /* + * CFB128 mode + */ + for (i = 0; i < 6; i++) { + u = i >> 1; + keybits = 128 + u * 64; + mode = i & 1; + + if (verbose != 0) + utils_printf(" AES-CFB128-%3d (%s): ", keybits, (mode == UTILS_AES_DECRYPT) ? "dec" : "enc"); + + memcpy(iv, aes_test_cfb128_iv, 16); + memcpy(key, aes_test_cfb128_key[u], keybits / 8); + + offset = 0; + ret = utils_aes_setkey_enc(&ctx, key, keybits); + /* + * AES-192 is an optional feature that may be unavailable when + * there is an alternative underlying implementation i.e. when + * UTILS_AES_ALT is defined. + */ + if (ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192) { + utils_printf("skipped\n"); + continue; + } else if (ret != 0) { + goto exit; + } + + if (mode == UTILS_AES_DECRYPT) { + memcpy(buf, aes_test_cfb128_ct[u], 64); + aes_tests = aes_test_cfb128_pt; + } else { + memcpy(buf, aes_test_cfb128_pt, 64); + aes_tests = aes_test_cfb128_ct[u]; + } + + ret = utils_aes_crypt_cfb128(&ctx, mode, 64, &offset, iv, buf, buf); + if (ret != 0) + goto exit; + + if (memcmp(buf, aes_tests, 64) != 0) { + ret = 1; + goto exit; + } + + if (verbose != 0) + utils_printf("passed\n"); + } + + if (verbose != 0) + utils_printf("\n"); +#endif /* UTILS_CIPHER_MODE_CFB */ + +#if defined(UTILS_CIPHER_MODE_OFB) + /* + * OFB mode + */ + for (i = 0; i < 6; i++) { + u = i >> 1; + keybits = 128 + u * 64; + mode = i & 1; + + if (verbose != 0) + utils_printf(" AES-OFB-%3d (%s): ", keybits, (mode == UTILS_AES_DECRYPT) ? "dec" : "enc"); + + memcpy(iv, aes_test_ofb_iv, 16); + memcpy(key, aes_test_ofb_key[u], keybits / 8); + + offset = 0; + ret = utils_aes_setkey_enc(&ctx, key, keybits); + /* + * AES-192 is an optional feature that may be unavailable when + * there is an alternative underlying implementation i.e. when + * UTILS_AES_ALT is defined. + */ + if (ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192) { + utils_printf("skipped\n"); + continue; + } else if (ret != 0) { + goto exit; + } + + if (mode == UTILS_AES_DECRYPT) { + memcpy(buf, aes_test_ofb_ct[u], 64); + aes_tests = aes_test_ofb_pt; + } else { + memcpy(buf, aes_test_ofb_pt, 64); + aes_tests = aes_test_ofb_ct[u]; + } + + ret = utils_aes_crypt_ofb(&ctx, 64, &offset, iv, buf, buf); + if (ret != 0) + goto exit; + + if (memcmp(buf, aes_tests, 64) != 0) { + ret = 1; + goto exit; + } + + if (verbose != 0) + utils_printf("passed\n"); + } + + if (verbose != 0) + utils_printf("\n"); +#endif /* UTILS_CIPHER_MODE_OFB */ + +#if defined(UTILS_CIPHER_MODE_CTR) + /* + * CTR mode + */ + for (i = 0; i < 6; i++) { + u = i >> 1; + mode = i & 1; + + if (verbose != 0) + utils_printf(" AES-CTR-128 (%s): ", (mode == UTILS_AES_DECRYPT) ? "dec" : "enc"); + + memcpy(nonce_counter, aes_test_ctr_nonce_counter[u], 16); + memcpy(key, aes_test_ctr_key[u], 16); + + offset = 0; + if ((ret = utils_aes_setkey_enc(&ctx, key, 128)) != 0) + goto exit; + + len = aes_test_ctr_len[u]; + + if (mode == UTILS_AES_DECRYPT) { + memcpy(buf, aes_test_ctr_ct[u], len); + aes_tests = aes_test_ctr_pt[u]; + } else { + memcpy(buf, aes_test_ctr_pt[u], len); + aes_tests = aes_test_ctr_ct[u]; + } + + ret = utils_aes_crypt_ctr(&ctx, len, &offset, nonce_counter, stream_block, buf, buf); + if (ret != 0) + goto exit; + + if (memcmp(buf, aes_tests, len) != 0) { + ret = 1; + goto exit; + } + + if (verbose != 0) + utils_printf("passed\n"); + } + + if (verbose != 0) + utils_printf("\n"); +#endif /* UTILS_CIPHER_MODE_CTR */ + +#if defined(UTILS_CIPHER_MODE_XTS) + { + static const int num_tests = sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); + utils_aes_xts_context ctx_xts; + + /* + * XTS mode + */ + utils_aes_xts_init(&ctx_xts); + + for (i = 0; i < num_tests << 1; i++) { + const unsigned char *data_unit; + u = i >> 1; + mode = i & 1; + + if (verbose != 0) + utils_printf(" AES-XTS-128 (%s): ", (mode == UTILS_AES_DECRYPT) ? "dec" : "enc"); + + memset(key, 0, sizeof(key)); + memcpy(key, aes_test_xts_key[u], 32); + data_unit = aes_test_xts_data_unit[u]; + + len = sizeof(*aes_test_xts_ct32); + + if (mode == UTILS_AES_DECRYPT) { + ret = utils_aes_xts_setkey_dec(&ctx_xts, key, 256); + if (ret != 0) + goto exit; + memcpy(buf, aes_test_xts_ct32[u], len); + aes_tests = aes_test_xts_pt32[u]; + } else { + ret = utils_aes_xts_setkey_enc(&ctx_xts, key, 256); + if (ret != 0) + goto exit; + memcpy(buf, aes_test_xts_pt32[u], len); + aes_tests = aes_test_xts_ct32[u]; + } + + ret = utils_aes_crypt_xts(&ctx_xts, mode, len, data_unit, buf, buf); + if (ret != 0) + goto exit; + + if (memcmp(buf, aes_tests, len) != 0) { + ret = 1; + goto exit; + } + + if (verbose != 0) + utils_printf("passed\n"); + } + + if (verbose != 0) + utils_printf("\n"); + + utils_aes_xts_free(&ctx_xts); + } +#endif /* UTILS_CIPHER_MODE_XTS */ + + ret = 0; + +exit: + if (ret != 0 && verbose != 0) + utils_printf("failed\n"); + + utils_aes_free(&ctx); + + return (ret); +} + +/*aes128-cbc*/ +int aes_sample(int verbose) +{ + int ret = 0, i; + unsigned int keybits; + unsigned char key[UTILS_AES_BLOCK_LEN] = "1234567890abcdef"; + char dataIn[1024] = {0}; + unsigned char iv[16]; + int sLen; + int datalen; + + utils_printf("\nAES-CBC-128 enc "); + keybits = AES_KEY_BITS_128; + memset(iv, '0', 16); + + sLen = strlen("{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}"); + strncpy(dataIn, "{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}", + sLen); + + utils_printf("\nthe data to encrypt(%d):\n", sLen); + for (i = 0; i < sLen; i++) { + HAL_Printf("%02x ", (uint8_t)dataIn[i]); + } + + if (QCLOUD_RET_SUCCESS == utils_aes_cbc((uint8_t *)dataIn, sLen, (uint8_t *)dataIn, sLen + UTILS_AES_BLOCK_LEN, + UTILS_AES_ENCRYPT, key, keybits, iv)) { + utils_printf("\nThe encrypted data is:\n"); + for (i = 0; i < sLen; i++) { + HAL_Printf("%02x ", (uint8_t)dataIn[i]); + } + } + + datalen = sLen + (UTILS_AES_BLOCK_LEN - sLen % UTILS_AES_BLOCK_LEN); + keybits = AES_KEY_BITS_128; + memset(iv, '0', UTILS_AES_BLOCK_LEN); + if (QCLOUD_RET_SUCCESS == + utils_aes_cbc((uint8_t *)dataIn, datalen, (uint8_t *)dataIn, datalen, UTILS_AES_DECRYPT, key, keybits, iv)) { + utils_printf("\nThe decrypted data is:\n"); + for (i = 0; i < datalen; i++) { + // HAL_Printf("%02x ", (uint8_t)dataIn[i]); + if (dataIn[i] == '\0') { + Log_d("payload len:%d", i); + break; + } + HAL_Printf("%c", dataIn[i]); + } + } + + if (ret != 0 && verbose != 0) + utils_printf("failed\n"); + + return (ret); +} + +#endif /* UTILS_SELF_TEST */ + +#endif /* UTILS_AES_C */ + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_base64.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_base64.c new file mode 100644 index 00000000..75a36a4c --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_base64.c @@ -0,0 +1,178 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "utils_base64.h" + +#include +#include + +static const unsigned char base64_enc_map[64] = { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', + 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; + +static const unsigned char base64_dec_map[128] = { + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 62, + 127, 127, 127, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, 127, 64, 127, 127, 127, 0, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 127, 127, 127, 127, 127}; + +#define BASE64_SIZE_T_MAX ((size_t)-1) /* SIZE_T_MAX is not standard */ + +int qcloud_iot_utils_base64encode(unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen) +{ + size_t i, n; + unsigned char *p; + + if (slen == 0) { + *olen = 0; + return (0); + } + + n = slen / 3 + (slen % 3 != 0); + + if (n > (BASE64_SIZE_T_MAX - 1) / 4) { + *olen = BASE64_SIZE_T_MAX; + return (QCLOUD_ERR_FAILURE); + } + + n *= 4; + + if ((dlen < n + 1) || (NULL == dst)) { + *olen = n + 1; + return (QCLOUD_ERR_FAILURE); + } + + n = (slen / 3) * 3; + + int C1, C2, C3; + for (i = 0, p = dst; i < n; i += 3) { + C1 = *src++; + C2 = *src++; + C3 = *src++; + + *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; + *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; + *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; + *p++ = base64_enc_map[C3 & 0x3F]; + } + + if (i < slen) { + C1 = *src++; + C2 = ((i + 1) < slen) ? *src++ : 0; + + *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; + *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; + + if ((i + 1) < slen) + *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; + else + *p++ = '='; + + *p++ = '='; + } + + *olen = p - dst; + *p = 0; + + return (0); +} + +int qcloud_iot_utils_base64decode(unsigned char *dst, size_t dlen, size_t *olen, const unsigned char *src, size_t slen) +{ + size_t i, n; + uint32_t j, x; + unsigned char *p; + + /* First pass: check for validity and get output length */ + for (i = n = j = 0; i < slen; i++) { + /* Skip spaces before checking for EOL */ + x = 0; + while (i < slen && src[i] == ' ') { + ++i; + ++x; + } + + /* Spaces at end of buffer are OK */ + if (i == slen) + break; + + if ((slen - i) >= 2 && src[i] == '\r' && src[i + 1] == '\n') + continue; + + if (src[i] == '\n') + continue; + + /* Space inside a line is an error */ + if (x != 0) + return (QCLOUD_ERR_FAILURE); + + if (src[i] == '=' && ++j > 2) + return (QCLOUD_ERR_FAILURE); + + if (src[i] > 127 || base64_dec_map[src[i]] == 127) + return (QCLOUD_ERR_FAILURE); + + if (base64_dec_map[src[i]] < 64 && j != 0) + return (QCLOUD_ERR_FAILURE); + + n++; + } + + if (n == 0) { + *olen = 0; + return (0); + } + + n = ((n * 6) + 7) >> 3; + n -= j; + + if (dst == NULL || dlen < n) { + *olen = n; + return (QCLOUD_ERR_FAILURE); + } + + for (j = 3, n = x = 0, p = dst; i > 0; i--, src++) { + if (*src == '\r' || *src == '\n' || *src == ' ') + continue; + + j -= (base64_dec_map[*src] == 64); + x = (x << 6) | (base64_dec_map[*src] & 0x3F); + + if (++n == 4) { + n = 0; + if (j > 0) + *p++ = (unsigned char)(x >> 16); + if (j > 1) + *p++ = (unsigned char)(x >> 8); + if (j > 2) + *p++ = (unsigned char)(x); + } + } + + *olen = p - dst; + + return (0); +} + +#ifdef __cplusplus +} +#endif diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_getopt.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_getopt.c new file mode 100644 index 00000000..7f575134 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_getopt.c @@ -0,0 +1,95 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "utils_getopt.h" + +#include +#include + +#include "qcloud_iot_import.h" + +static int utils_opterr = 1; /* if error message should be printed */ +static int utils_optind = 1; /* index into parent argv vector */ +static int utils_optopt; /* character checked for validity */ +static int utils_optreset = 1; /* reset getopt */ + +char* utils_optarg; /* argument associated with option */ + +int utils_getopt(int nargc, char* const* nargv, const char* options) +{ +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + + static char* place = EMSG; /* option letter processing */ + const char* oli; /* option letter list index */ + + if (utils_optreset || !*place) { /* update scanning pointer */ + utils_optreset = 0; + + if (utils_optind >= nargc || *(place = nargv[utils_optind]) != '-') { + utils_optind = 1; + utils_optreset = 1; + place = EMSG; + return (-1); + } + + place++; + } + + /* option letter okay? */ + if ((utils_optopt = (int)*place++) == (int)':' || !(oli = strchr(options, utils_optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (utils_optopt == (int)'-') + return (-1); + + if (!*place) + ++utils_optind; + + if (utils_opterr && *options != ':') + HAL_Printf("illegal option - %c\n", utils_optopt); + + return (BADCH); + } + + if (*++oli != ':') { /* don't need argument */ + utils_optarg = NULL; + if (!*place) + ++utils_optind; + } else { + /* need an argument */ + if (*place) { /* no white space */ + utils_optarg = place; + } else if (nargc <= ++utils_optind) { /* no arg */ + place = EMSG; + if (*options == ':') + return (BADARG); + if (utils_opterr) + HAL_Printf("option requires an argument - %c\n", utils_optopt); + return (BADCH); + } else { /* white space */ + utils_optarg = nargv[utils_optind]; + } + + place = EMSG; + ++utils_optind; + } + + /* dump back option letter */ + return (utils_optopt); +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_hmac.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_hmac.c similarity index 50% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_hmac.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_hmac.c index 9ef75f97..8be95634 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_hmac.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_hmac.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,34 +13,36 @@ * */ +#include "utils_hmac.h" + #include + #include "qcloud_iot_export_log.h" #include "utils_md5.h" #include "utils_sha1.h" -#include "utils_hmac.h" #define KEY_IOPAD_SIZE 64 -#define MD5_DIGEST_SIZE 16 +#define MD5_DIGEST_SIZE 16 #define SHA1_DIGEST_SIZE 20 void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, int key_len) { - if((NULL == msg) || (NULL == digest) || (NULL == key)) { + if ((NULL == msg) || (NULL == digest) || (NULL == key)) { Log_e("parameter is Null,failed!"); return; } - if(key_len > KEY_IOPAD_SIZE) { - Log_e("key_len > size(%d) of array",KEY_IOPAD_SIZE); + if (key_len > KEY_IOPAD_SIZE) { + Log_e("key_len > size(%d) of array", KEY_IOPAD_SIZE); return; } iot_md5_context context; - unsigned char k_ipad[KEY_IOPAD_SIZE]; /* inner padding - key XORd with ipad */ - unsigned char k_opad[KEY_IOPAD_SIZE]; /* outer padding - key XORd with opad */ - unsigned char out[MD5_DIGEST_SIZE]; - int i; + unsigned char k_ipad[KEY_IOPAD_SIZE]; /* inner padding - key XORd with ipad */ + unsigned char k_opad[KEY_IOPAD_SIZE]; /* outer padding - key XORd with opad */ + unsigned char out[MD5_DIGEST_SIZE]; + int i; /* start out by storing key in pads */ memset(k_ipad, 0, sizeof(k_ipad)); @@ -55,42 +57,42 @@ void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, } /* perform inner MD5 */ - utils_md5_init(&context); /* init context for 1st pass */ - utils_md5_starts(&context); /* setup context for 1st pass */ - utils_md5_update(&context, k_ipad, KEY_IOPAD_SIZE); /* start with inner pad */ - utils_md5_update(&context, (unsigned char *) msg, msg_len); /* then text of datagram */ - utils_md5_finish(&context, out); /* finish up 1st pass */ + utils_md5_init(&context); /* init context for 1st pass */ + utils_md5_starts(&context); /* setup context for 1st pass */ + utils_md5_update(&context, k_ipad, KEY_IOPAD_SIZE); /* start with inner pad */ + utils_md5_update(&context, (unsigned char *)msg, msg_len); /* then text of datagram */ + utils_md5_finish(&context, out); /* finish up 1st pass */ /* perform outer MD5 */ - utils_md5_init(&context); /* init context for 2nd pass */ - utils_md5_starts(&context); /* setup context for 2nd pass */ - utils_md5_update(&context, k_opad, KEY_IOPAD_SIZE); /* start with outer pad */ - utils_md5_update(&context, out, MD5_DIGEST_SIZE); /* then results of 1st hash */ - utils_md5_finish(&context, out); /* finish up 2nd pass */ + utils_md5_init(&context); /* init context for 2nd pass */ + utils_md5_starts(&context); /* setup context for 2nd pass */ + utils_md5_update(&context, k_opad, KEY_IOPAD_SIZE); /* start with outer pad */ + utils_md5_update(&context, out, MD5_DIGEST_SIZE); /* then results of 1st hash */ + utils_md5_finish(&context, out); /* finish up 2nd pass */ for (i = 0; i < MD5_DIGEST_SIZE; ++i) { - digest[i * 2] = utils_hb2hex(out[i] >> 4); + digest[i * 2] = utils_hb2hex(out[i] >> 4); digest[i * 2 + 1] = utils_hb2hex(out[i]); } } void utils_hmac_sha1(const char *msg, int msg_len, char *digest, const char *key, int key_len) { - if((NULL == msg) || (NULL == digest) || (NULL == key)) { + if ((NULL == msg) || (NULL == digest) || (NULL == key)) { Log_e("parameter is Null,failed!"); return; } - if(key_len > KEY_IOPAD_SIZE) { - Log_e("key_len > size(%d) of array",KEY_IOPAD_SIZE); + if (key_len > KEY_IOPAD_SIZE) { + Log_e("key_len > size(%d) of array", KEY_IOPAD_SIZE); return; } iot_sha1_context context; - unsigned char k_ipad[KEY_IOPAD_SIZE]; /* inner padding - key XORd with ipad */ - unsigned char k_opad[KEY_IOPAD_SIZE]; /* outer padding - key XORd with opad */ - unsigned char out[SHA1_DIGEST_SIZE]; - int i; + unsigned char k_ipad[KEY_IOPAD_SIZE]; /* inner padding - key XORd with ipad */ + unsigned char k_opad[KEY_IOPAD_SIZE]; /* outer padding - key XORd with opad */ + unsigned char out[SHA1_DIGEST_SIZE]; + int i; /* start out by storing key in pads */ memset(k_ipad, 0, sizeof(k_ipad)); @@ -105,22 +107,21 @@ void utils_hmac_sha1(const char *msg, int msg_len, char *digest, const char *key } /* perform inner SHA */ - utils_sha1_init(&context); /* init context for 1st pass */ - utils_sha1_starts(&context); /* setup context for 1st pass */ - utils_sha1_update(&context, k_ipad, KEY_IOPAD_SIZE); /* start with inner pad */ - utils_sha1_update(&context, (unsigned char *) msg, msg_len); /* then text of datagram */ - utils_sha1_finish(&context, out); /* finish up 1st pass */ + utils_sha1_init(&context); /* init context for 1st pass */ + utils_sha1_starts(&context); /* setup context for 1st pass */ + utils_sha1_update(&context, k_ipad, KEY_IOPAD_SIZE); /* start with inner pad */ + utils_sha1_update(&context, (unsigned char *)msg, msg_len); /* then text of datagram */ + utils_sha1_finish(&context, out); /* finish up 1st pass */ /* perform outer SHA */ - utils_sha1_init(&context); /* init context for 2nd pass */ - utils_sha1_starts(&context); /* setup context for 2nd pass */ - utils_sha1_update(&context, k_opad, KEY_IOPAD_SIZE); /* start with outer pad */ - utils_sha1_update(&context, out, SHA1_DIGEST_SIZE); /* then results of 1st hash */ - utils_sha1_finish(&context, out); /* finish up 2nd pass */ + utils_sha1_init(&context); /* init context for 2nd pass */ + utils_sha1_starts(&context); /* setup context for 2nd pass */ + utils_sha1_update(&context, k_opad, KEY_IOPAD_SIZE); /* start with outer pad */ + utils_sha1_update(&context, out, SHA1_DIGEST_SIZE); /* then results of 1st hash */ + utils_sha1_finish(&context, out); /* finish up 2nd pass */ for (i = 0; i < SHA1_DIGEST_SIZE; ++i) { - digest[i * 2] = utils_hb2hex(out[i] >> 4); + digest[i * 2] = utils_hb2hex(out[i] >> 4); digest[i * 2 + 1] = utils_hb2hex(out[i]); } } - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_list.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_list.c similarity index 90% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_list.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_list.c index a84f7b08..0cd0ac1b 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_list.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_list.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,15 +13,14 @@ * */ - #ifdef __cplusplus extern "C" { #endif #include "utils_list.h" -#include "qcloud_iot_import.h" #include "qcloud_iot_export_log.h" +#include "qcloud_iot_import.h" /* * create list, return NULL if fail @@ -33,11 +32,11 @@ List *list_new(void) if (!self) { return NULL; } - self->head = NULL; - self->tail = NULL; - self->free = NULL; + self->head = NULL; + self->tail = NULL; + self->free = NULL; self->match = NULL; - self->len = 0; + self->len = 0; return self; } @@ -47,8 +46,8 @@ List *list_new(void) void list_destroy(List *self) { unsigned int len = self->len; - ListNode *next; - ListNode *curr = self->head; + ListNode * next; + ListNode * curr = self->head; while (len--) { next = curr->next; @@ -72,10 +71,10 @@ ListNode *list_rpush(List *self, ListNode *node) } if (self->len) { - node->prev = self->tail; - node->next = NULL; + node->prev = self->tail; + node->next = NULL; self->tail->next = node; - self->tail = node; + self->tail = node; } else { self->head = self->tail = node; node->prev = node->next = NULL; @@ -139,10 +138,10 @@ ListNode *list_lpush(List *self, ListNode *node) } if (self->len) { - node->next = self->head; - node->prev = NULL; + node->next = self->head; + node->prev = NULL; self->head->prev = node; - self->head = node; + self->head = node; } else { self->head = self->tail = node; node->prev = node->next = NULL; @@ -158,7 +157,7 @@ ListNode *list_lpush(List *self, ListNode *node) ListNode *list_find(List *self, void *val) { ListIterator *it; - ListNode *node; + ListNode * node; if (NULL == (it = list_iterator_new(self, LIST_HEAD))) { return NULL; @@ -192,12 +191,12 @@ ListNode *list_at(List *self, int index) if (index < 0) { direction = LIST_TAIL; - index = ~index; + index = ~index; } - if ((unsigned) index < self->len) { + if ((unsigned)index < self->len) { ListIterator *it; - ListNode *node; + ListNode * node; if (NULL == (it = list_iterator_new(self, direction))) { return NULL; @@ -251,7 +250,7 @@ ListIterator *list_iterator_new_from_node(ListNode *node, ListDirection directio if (!self) { return NULL; } - self->next = node; + self->next = node; self->direction = direction; return self; } @@ -274,7 +273,6 @@ ListNode *list_iterator_next(ListIterator *self) void list_iterator_destroy(ListIterator *self) { HAL_Free(self); - self = NULL; } /* @@ -290,7 +288,7 @@ ListNode *list_node_new(void *val) self->prev = NULL; self->next = NULL; - self->val = val; + self->val = val; return self; } diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_md5.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_md5.c similarity index 52% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_md5.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_md5.c index e9986ee5..21515f76 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_md5.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_md5.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,22 +13,20 @@ * */ - #ifdef __cplusplus extern "C" { #endif - #include "utils_md5.h" #include #include -#include "qcloud_iot_import.h" + #include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" #define MD5_DIGEST_SIZE 16 - /* Implementation that should never be optimized out by the compiler */ static void _utils_md5_zeroize(void *v, size_t n) { @@ -40,22 +38,20 @@ static void _utils_md5_zeroize(void *v, size_t n) * 32-bit integer manipulation macros (little endian) */ #ifndef IOT_MD5_GET_UINT32_LE -#define IOT_MD5_GET_UINT32_LE(n,b,i) \ - { \ - (n) = ( (uint32_t) (b)[(i) ] ) \ - | ( (uint32_t) (b)[(i) + 1] << 8 ) \ - | ( (uint32_t) (b)[(i) + 2] << 16 ) \ - | ( (uint32_t) (b)[(i) + 3] << 24 ); \ +#define IOT_MD5_GET_UINT32_LE(n, b, i) \ + { \ + (n) = ((uint32_t)(b)[(i)]) | ((uint32_t)(b)[(i) + 1] << 8) | ((uint32_t)(b)[(i) + 2] << 16) | \ + ((uint32_t)(b)[(i) + 3] << 24); \ } #endif #ifndef IOT_MD5_PUT_UINT32_LE -#define IOT_MD5_PUT_UINT32_LE(n,b,i) \ - { \ - (b)[(i) ] = (unsigned char) ( ( (n) ) & 0xFF ); \ - (b)[(i) + 1] = (unsigned char) ( ( (n) >> 8 ) & 0xFF ); \ - (b)[(i) + 2] = (unsigned char) ( ( (n) >> 16 ) & 0xFF ); \ - (b)[(i) + 3] = (unsigned char) ( ( (n) >> 24 ) & 0xFF ); \ +#define IOT_MD5_PUT_UINT32_LE(n, b, i) \ + { \ + (b)[(i)] = (unsigned char)(((n)) & 0xFF); \ + (b)[(i) + 1] = (unsigned char)(((n) >> 8) & 0xFF); \ + (b)[(i) + 2] = (unsigned char)(((n) >> 16) & 0xFF); \ + (b)[(i) + 3] = (unsigned char)(((n) >> 24) & 0xFF); \ } #endif @@ -73,8 +69,7 @@ void utils_md5_free(iot_md5_context *ctx) _utils_md5_zeroize(ctx, sizeof(iot_md5_context)); } -void utils_md5_clone(iot_md5_context *dst, - const iot_md5_context *src) +void utils_md5_clone(iot_md5_context *dst, const iot_md5_context *src) { *dst = *src; } @@ -97,16 +92,16 @@ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]) { uint32_t X[16], A, B, C, D; - IOT_MD5_GET_UINT32_LE(X[ 0], data, 0); - IOT_MD5_GET_UINT32_LE(X[ 1], data, 4); - IOT_MD5_GET_UINT32_LE(X[ 2], data, 8); - IOT_MD5_GET_UINT32_LE(X[ 3], data, 12); - IOT_MD5_GET_UINT32_LE(X[ 4], data, 16); - IOT_MD5_GET_UINT32_LE(X[ 5], data, 20); - IOT_MD5_GET_UINT32_LE(X[ 6], data, 24); - IOT_MD5_GET_UINT32_LE(X[ 7], data, 28); - IOT_MD5_GET_UINT32_LE(X[ 8], data, 32); - IOT_MD5_GET_UINT32_LE(X[ 9], data, 36); + IOT_MD5_GET_UINT32_LE(X[0], data, 0); + IOT_MD5_GET_UINT32_LE(X[1], data, 4); + IOT_MD5_GET_UINT32_LE(X[2], data, 8); + IOT_MD5_GET_UINT32_LE(X[3], data, 12); + IOT_MD5_GET_UINT32_LE(X[4], data, 16); + IOT_MD5_GET_UINT32_LE(X[5], data, 20); + IOT_MD5_GET_UINT32_LE(X[6], data, 24); + IOT_MD5_GET_UINT32_LE(X[7], data, 28); + IOT_MD5_GET_UINT32_LE(X[8], data, 32); + IOT_MD5_GET_UINT32_LE(X[9], data, 36); IOT_MD5_GET_UINT32_LE(X[10], data, 40); IOT_MD5_GET_UINT32_LE(X[11], data, 44); IOT_MD5_GET_UINT32_LE(X[12], data, 48); @@ -114,11 +109,12 @@ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]) IOT_MD5_GET_UINT32_LE(X[14], data, 56); IOT_MD5_GET_UINT32_LE(X[15], data, 60); -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) +#define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) -#define P(a,b,c,d,k,s,t) \ - { \ - a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ +#define P(a, b, c, d, k, s, t) \ + { \ + a += F(b, c, d) + X[k] + t; \ + a = S(a, s) + b; \ } A = ctx->state[0]; @@ -126,87 +122,87 @@ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]) C = ctx->state[2]; D = ctx->state[3]; -#define F(x,y,z) (z ^ (x & (y ^ z))) +#define F(x, y, z) (z ^ (x & (y ^ z))) - P(A, B, C, D, 0, 7, 0xD76AA478); - P(D, A, B, C, 1, 12, 0xE8C7B756); - P(C, D, A, B, 2, 17, 0x242070DB); - P(B, C, D, A, 3, 22, 0xC1BDCEEE); - P(A, B, C, D, 4, 7, 0xF57C0FAF); - P(D, A, B, C, 5, 12, 0x4787C62A); - P(C, D, A, B, 6, 17, 0xA8304613); - P(B, C, D, A, 7, 22, 0xFD469501); - P(A, B, C, D, 8, 7, 0x698098D8); - P(D, A, B, C, 9, 12, 0x8B44F7AF); + P(A, B, C, D, 0, 7, 0xD76AA478); + P(D, A, B, C, 1, 12, 0xE8C7B756); + P(C, D, A, B, 2, 17, 0x242070DB); + P(B, C, D, A, 3, 22, 0xC1BDCEEE); + P(A, B, C, D, 4, 7, 0xF57C0FAF); + P(D, A, B, C, 5, 12, 0x4787C62A); + P(C, D, A, B, 6, 17, 0xA8304613); + P(B, C, D, A, 7, 22, 0xFD469501); + P(A, B, C, D, 8, 7, 0x698098D8); + P(D, A, B, C, 9, 12, 0x8B44F7AF); P(C, D, A, B, 10, 17, 0xFFFF5BB1); P(B, C, D, A, 11, 22, 0x895CD7BE); - P(A, B, C, D, 12, 7, 0x6B901122); + P(A, B, C, D, 12, 7, 0x6B901122); P(D, A, B, C, 13, 12, 0xFD987193); P(C, D, A, B, 14, 17, 0xA679438E); P(B, C, D, A, 15, 22, 0x49B40821); #undef F -#define F(x,y,z) (y ^ (z & (x ^ y))) +#define F(x, y, z) (y ^ (z & (x ^ y))) - P(A, B, C, D, 1, 5, 0xF61E2562); - P(D, A, B, C, 6, 9, 0xC040B340); + P(A, B, C, D, 1, 5, 0xF61E2562); + P(D, A, B, C, 6, 9, 0xC040B340); P(C, D, A, B, 11, 14, 0x265E5A51); - P(B, C, D, A, 0, 20, 0xE9B6C7AA); - P(A, B, C, D, 5, 5, 0xD62F105D); - P(D, A, B, C, 10, 9, 0x02441453); + P(B, C, D, A, 0, 20, 0xE9B6C7AA); + P(A, B, C, D, 5, 5, 0xD62F105D); + P(D, A, B, C, 10, 9, 0x02441453); P(C, D, A, B, 15, 14, 0xD8A1E681); - P(B, C, D, A, 4, 20, 0xE7D3FBC8); - P(A, B, C, D, 9, 5, 0x21E1CDE6); - P(D, A, B, C, 14, 9, 0xC33707D6); - P(C, D, A, B, 3, 14, 0xF4D50D87); - P(B, C, D, A, 8, 20, 0x455A14ED); - P(A, B, C, D, 13, 5, 0xA9E3E905); - P(D, A, B, C, 2, 9, 0xFCEFA3F8); - P(C, D, A, B, 7, 14, 0x676F02D9); + P(B, C, D, A, 4, 20, 0xE7D3FBC8); + P(A, B, C, D, 9, 5, 0x21E1CDE6); + P(D, A, B, C, 14, 9, 0xC33707D6); + P(C, D, A, B, 3, 14, 0xF4D50D87); + P(B, C, D, A, 8, 20, 0x455A14ED); + P(A, B, C, D, 13, 5, 0xA9E3E905); + P(D, A, B, C, 2, 9, 0xFCEFA3F8); + P(C, D, A, B, 7, 14, 0x676F02D9); P(B, C, D, A, 12, 20, 0x8D2A4C8A); #undef F -#define F(x,y,z) (x ^ y ^ z) +#define F(x, y, z) (x ^ y ^ z) - P(A, B, C, D, 5, 4, 0xFFFA3942); - P(D, A, B, C, 8, 11, 0x8771F681); + P(A, B, C, D, 5, 4, 0xFFFA3942); + P(D, A, B, C, 8, 11, 0x8771F681); P(C, D, A, B, 11, 16, 0x6D9D6122); P(B, C, D, A, 14, 23, 0xFDE5380C); - P(A, B, C, D, 1, 4, 0xA4BEEA44); - P(D, A, B, C, 4, 11, 0x4BDECFA9); - P(C, D, A, B, 7, 16, 0xF6BB4B60); + P(A, B, C, D, 1, 4, 0xA4BEEA44); + P(D, A, B, C, 4, 11, 0x4BDECFA9); + P(C, D, A, B, 7, 16, 0xF6BB4B60); P(B, C, D, A, 10, 23, 0xBEBFBC70); - P(A, B, C, D, 13, 4, 0x289B7EC6); - P(D, A, B, C, 0, 11, 0xEAA127FA); - P(C, D, A, B, 3, 16, 0xD4EF3085); - P(B, C, D, A, 6, 23, 0x04881D05); - P(A, B, C, D, 9, 4, 0xD9D4D039); + P(A, B, C, D, 13, 4, 0x289B7EC6); + P(D, A, B, C, 0, 11, 0xEAA127FA); + P(C, D, A, B, 3, 16, 0xD4EF3085); + P(B, C, D, A, 6, 23, 0x04881D05); + P(A, B, C, D, 9, 4, 0xD9D4D039); P(D, A, B, C, 12, 11, 0xE6DB99E5); P(C, D, A, B, 15, 16, 0x1FA27CF8); - P(B, C, D, A, 2, 23, 0xC4AC5665); + P(B, C, D, A, 2, 23, 0xC4AC5665); #undef F -#define F(x,y,z) (y ^ (x | ~z)) +#define F(x, y, z) (y ^ (x | ~z)) - P(A, B, C, D, 0, 6, 0xF4292244); - P(D, A, B, C, 7, 10, 0x432AFF97); + P(A, B, C, D, 0, 6, 0xF4292244); + P(D, A, B, C, 7, 10, 0x432AFF97); P(C, D, A, B, 14, 15, 0xAB9423A7); - P(B, C, D, A, 5, 21, 0xFC93A039); - P(A, B, C, D, 12, 6, 0x655B59C3); - P(D, A, B, C, 3, 10, 0x8F0CCC92); + P(B, C, D, A, 5, 21, 0xFC93A039); + P(A, B, C, D, 12, 6, 0x655B59C3); + P(D, A, B, C, 3, 10, 0x8F0CCC92); P(C, D, A, B, 10, 15, 0xFFEFF47D); - P(B, C, D, A, 1, 21, 0x85845DD1); - P(A, B, C, D, 8, 6, 0x6FA87E4F); + P(B, C, D, A, 1, 21, 0x85845DD1); + P(A, B, C, D, 8, 6, 0x6FA87E4F); P(D, A, B, C, 15, 10, 0xFE2CE6E0); - P(C, D, A, B, 6, 15, 0xA3014314); + P(C, D, A, B, 6, 15, 0xA3014314); P(B, C, D, A, 13, 21, 0x4E0811A1); - P(A, B, C, D, 4, 6, 0xF7537E82); + P(A, B, C, D, 4, 6, 0xF7537E82); P(D, A, B, C, 11, 10, 0xBD3AF235); - P(C, D, A, B, 2, 15, 0x2AD7D2BB); - P(B, C, D, A, 9, 21, 0xEB86D391); + P(C, D, A, B, 2, 15, 0x2AD7D2BB); + P(B, C, D, A, 9, 21, 0xEB86D391); #undef F @@ -221,7 +217,7 @@ void utils_md5_process(iot_md5_context *ctx, const unsigned char data[64]) */ void utils_md5_update(iot_md5_context *ctx, const unsigned char *input, size_t ilen) { - size_t fill; + size_t fill; uint32_t left; if (ilen == 0) { @@ -231,10 +227,10 @@ void utils_md5_update(iot_md5_context *ctx, const unsigned char *input, size_t i left = ctx->total[0] & 0x3F; fill = 64 - left; - ctx->total[0] += (uint32_t) ilen; + ctx->total[0] += (uint32_t)ilen; ctx->total[0] &= 0xFFFFFFFF; - if (ctx->total[0] < (uint32_t) ilen) { + if (ctx->total[0] < (uint32_t)ilen) { ctx->total[1]++; } @@ -242,14 +238,14 @@ void utils_md5_update(iot_md5_context *ctx, const unsigned char *input, size_t i memcpy((void *)(ctx->buffer + left), input, fill); utils_md5_process(ctx, ctx->buffer); input += fill; - ilen -= fill; + ilen -= fill; left = 0; } while (ilen >= 64) { utils_md5_process(ctx, input); input += 64; - ilen -= 64; + ilen -= 64; } if (ilen > 0) { @@ -257,27 +253,23 @@ void utils_md5_update(iot_md5_context *ctx, const unsigned char *input, size_t i } } -static const unsigned char iot_md5_padding[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; +static const unsigned char iot_md5_padding[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* * MD5 final digest */ void utils_md5_finish(iot_md5_context *ctx, unsigned char output[16]) { - uint32_t last, padn; - uint32_t high, low; + uint32_t last, padn; + uint32_t high, low; unsigned char msglen[8]; - high = (ctx->total[0] >> 29) - | (ctx->total[1] << 3); - low = (ctx->total[0] << 3); + high = (ctx->total[0] >> 29) | (ctx->total[1] << 3); + low = (ctx->total[0] << 3); - IOT_MD5_PUT_UINT32_LE(low, msglen, 0); + IOT_MD5_PUT_UINT32_LE(low, msglen, 0); IOT_MD5_PUT_UINT32_LE(high, msglen, 4); last = ctx->total[0] & 0x3F; @@ -286,13 +278,12 @@ void utils_md5_finish(iot_md5_context *ctx, unsigned char output[16]) utils_md5_update(ctx, iot_md5_padding, padn); utils_md5_update(ctx, msglen, 8); - IOT_MD5_PUT_UINT32_LE(ctx->state[0], output, 0); - IOT_MD5_PUT_UINT32_LE(ctx->state[1], output, 4); - IOT_MD5_PUT_UINT32_LE(ctx->state[2], output, 8); + IOT_MD5_PUT_UINT32_LE(ctx->state[0], output, 0); + IOT_MD5_PUT_UINT32_LE(ctx->state[1], output, 4); + IOT_MD5_PUT_UINT32_LE(ctx->state[2], output, 8); IOT_MD5_PUT_UINT32_LE(ctx->state[3], output, 12); } - /* * output = MD5( input buffer ) */ diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c new file mode 100644 index 00000000..861af0a2 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_ringbuff.c @@ -0,0 +1,90 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "utils_ringbuff.h" + +#include +#include + +int ring_buff_init(sRingbuff* ring_buff, char* buff, uint32_t size) +{ + ring_buff->buffer = buff; + ring_buff->size = size; + ring_buff->readpoint = 0; + ring_buff->writepoint = 0; + memset(ring_buff->buffer, 0, ring_buff->size); + ring_buff->full = false; + + return RINGBUFF_OK; +} + +int ring_buff_flush(sRingbuff* ring_buff) +{ + ring_buff->readpoint = 0; + ring_buff->writepoint = 0; + memset(ring_buff->buffer, 0, ring_buff->size); + ring_buff->full = false; + + return RINGBUFF_OK; +} + +int ring_buff_push_data(sRingbuff* ring_buff, uint8_t* pData, int len) +{ + int i; + + if (len > ring_buff->size) { + return RINGBUFF_TOO_SHORT; + } + + for (i = 0; i < len; i++) { + if (((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) { + ring_buff->full = true; + return RINGBUFF_FULL; + } else { + if (ring_buff->writepoint < (ring_buff->size - 1)) { + ring_buff->writepoint++; + } else { + ring_buff->writepoint = 0; + } + ring_buff->buffer[ring_buff->writepoint] = pData[i]; + } + } + + return RINGBUFF_OK; +} + +int ring_buff_pop_data(sRingbuff* ring_buff, uint8_t* pData, int len) +{ + int i; + + if (len > ring_buff->size) { + return RINGBUFF_TOO_SHORT; + } + + for (i = 0; i < len; i++) { + if (ring_buff->writepoint == ring_buff->readpoint) { + break; + } else { + if (ring_buff->readpoint == (ring_buff->size - 1)) { + ring_buff->readpoint = 0; + } else { + ring_buff->readpoint++; + } + pData[i] = ring_buff->buffer[ring_buff->readpoint]; + } + } + + return i; +} diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_sha1.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_sha1.c similarity index 67% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_sha1.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_sha1.c index a08a5937..060bd03f 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_sha1.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_sha1.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -13,12 +13,13 @@ * */ +#include "utils_sha1.h" + #include #include -#include "qcloud_iot_import.h" #include "qcloud_iot_export_log.h" -#include "utils_sha1.h" +#include "qcloud_iot_import.h" /* Implementation that should never be optimized out by the compiler */ static void utils_sha1_zeroize(void *v, size_t n) @@ -33,22 +34,20 @@ static void utils_sha1_zeroize(void *v, size_t n) * 32-bit integer manipulation macros (big endian) */ #ifndef IOT_SHA1_GET_UINT32_BE -#define IOT_SHA1_GET_UINT32_BE(n,b,i) \ - { \ - (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ - | ( (uint32_t) (b)[(i) + 1] << 16 ) \ - | ( (uint32_t) (b)[(i) + 2] << 8 ) \ - | ( (uint32_t) (b)[(i) + 3] ); \ +#define IOT_SHA1_GET_UINT32_BE(n, b, i) \ + { \ + (n) = ((uint32_t)(b)[(i)] << 24) | ((uint32_t)(b)[(i) + 1] << 16) | ((uint32_t)(b)[(i) + 2] << 8) | \ + ((uint32_t)(b)[(i) + 3]); \ } #endif #ifndef IOT_SHA1_PUT_UINT32_BE -#define IOT_SHA1_PUT_UINT32_BE(n,b,i) \ - { \ - (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ - (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ - (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ - (b)[(i) + 3] = (unsigned char) ( (n) ); \ +#define IOT_SHA1_PUT_UINT32_BE(n, b, i) \ + { \ + (b)[(i)] = (unsigned char)((n) >> 24); \ + (b)[(i) + 1] = (unsigned char)((n) >> 16); \ + (b)[(i) + 2] = (unsigned char)((n) >> 8); \ + (b)[(i) + 3] = (unsigned char)((n)); \ } #endif @@ -66,8 +65,7 @@ void utils_sha1_free(iot_sha1_context *ctx) utils_sha1_zeroize(ctx, sizeof(iot_sha1_context)); } -void utils_sha1_clone(iot_sha1_context *dst, - const iot_sha1_context *src) +void utils_sha1_clone(iot_sha1_context *dst, const iot_sha1_context *src) { *dst = *src; } @@ -91,16 +89,16 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) { uint32_t temp, W[16], A, B, C, D, E; - IOT_SHA1_GET_UINT32_BE(W[ 0], data, 0); - IOT_SHA1_GET_UINT32_BE(W[ 1], data, 4); - IOT_SHA1_GET_UINT32_BE(W[ 2], data, 8); - IOT_SHA1_GET_UINT32_BE(W[ 3], data, 12); - IOT_SHA1_GET_UINT32_BE(W[ 4], data, 16); - IOT_SHA1_GET_UINT32_BE(W[ 5], data, 20); - IOT_SHA1_GET_UINT32_BE(W[ 6], data, 24); - IOT_SHA1_GET_UINT32_BE(W[ 7], data, 28); - IOT_SHA1_GET_UINT32_BE(W[ 8], data, 32); - IOT_SHA1_GET_UINT32_BE(W[ 9], data, 36); + IOT_SHA1_GET_UINT32_BE(W[0], data, 0); + IOT_SHA1_GET_UINT32_BE(W[1], data, 4); + IOT_SHA1_GET_UINT32_BE(W[2], data, 8); + IOT_SHA1_GET_UINT32_BE(W[3], data, 12); + IOT_SHA1_GET_UINT32_BE(W[4], data, 16); + IOT_SHA1_GET_UINT32_BE(W[5], data, 20); + IOT_SHA1_GET_UINT32_BE(W[6], data, 24); + IOT_SHA1_GET_UINT32_BE(W[7], data, 28); + IOT_SHA1_GET_UINT32_BE(W[8], data, 32); + IOT_SHA1_GET_UINT32_BE(W[9], data, 36); IOT_SHA1_GET_UINT32_BE(W[10], data, 40); IOT_SHA1_GET_UINT32_BE(W[11], data, 44); IOT_SHA1_GET_UINT32_BE(W[12], data, 48); @@ -108,18 +106,15 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) IOT_SHA1_GET_UINT32_BE(W[14], data, 56); IOT_SHA1_GET_UINT32_BE(W[15], data, 60); -#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) +#define S(x, n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) -#define R(t) \ - ( \ - temp = W[( t - 3 ) & 0x0F] ^ W[( t - 8 ) & 0x0F] ^ \ - W[( t - 14 ) & 0x0F] ^ W[ t & 0x0F], \ - ( W[t & 0x0F] = S(temp,1) ) \ - ) +#define R(t) \ + (temp = W[(t - 3) & 0x0F] ^ W[(t - 8) & 0x0F] ^ W[(t - 14) & 0x0F] ^ W[t & 0x0F], (W[t & 0x0F] = S(temp, 1))) -#define P(a,b,c,d,e,x) \ - { \ - e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ +#define P(a, b, c, d, e, x) \ + { \ + e += S(a, 5) + F(b, c, d) + K + x; \ + b = S(b, 30); \ } A = ctx->state[0]; @@ -128,8 +123,8 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) D = ctx->state[3]; E = ctx->state[4]; -#define F(x,y,z) (z ^ (x & (y ^ z))) -#define K 0x5A827999 +#define F(x, y, z) (z ^ (x & (y ^ z))) +#define K 0x5A827999 P(A, B, C, D, E, W[0]); P(E, A, B, C, D, W[1]); @@ -155,8 +150,8 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) #undef K #undef F -#define F(x,y,z) (x ^ y ^ z) -#define K 0x6ED9EBA1 +#define F(x, y, z) (x ^ y ^ z) +#define K 0x6ED9EBA1 P(A, B, C, D, E, R(20)); P(E, A, B, C, D, R(21)); @@ -182,8 +177,8 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) #undef K #undef F -#define F(x,y,z) ((x & y) | (z & (x | y))) -#define K 0x8F1BBCDC +#define F(x, y, z) ((x & y) | (z & (x | y))) +#define K 0x8F1BBCDC P(A, B, C, D, E, R(40)); P(E, A, B, C, D, R(41)); @@ -209,8 +204,8 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) #undef K #undef F -#define F(x,y,z) (x ^ y ^ z) -#define K 0xCA62C1D6 +#define F(x, y, z) (x ^ y ^ z) +#define K 0xCA62C1D6 P(A, B, C, D, E, R(60)); P(E, A, B, C, D, R(61)); @@ -248,7 +243,7 @@ void utils_sha1_process(iot_sha1_context *ctx, const unsigned char data[64]) */ void utils_sha1_update(iot_sha1_context *ctx, const unsigned char *input, size_t ilen) { - size_t fill; + size_t fill; uint32_t left; if (ilen == 0) { @@ -258,10 +253,10 @@ void utils_sha1_update(iot_sha1_context *ctx, const unsigned char *input, size_t left = ctx->total[0] & 0x3F; fill = 64 - left; - ctx->total[0] += (uint32_t) ilen; + ctx->total[0] += (uint32_t)ilen; ctx->total[0] &= 0xFFFFFFFF; - if (ctx->total[0] < (uint32_t) ilen) { + if (ctx->total[0] < (uint32_t)ilen) { ctx->total[1]++; } @@ -269,14 +264,14 @@ void utils_sha1_update(iot_sha1_context *ctx, const unsigned char *input, size_t memcpy((void *)(ctx->buffer + left), input, fill); utils_sha1_process(ctx, ctx->buffer); input += fill; - ilen -= fill; + ilen -= fill; left = 0; } while (ilen >= 64) { utils_sha1_process(ctx, input); input += 64; - ilen -= 64; + ilen -= 64; } if (ilen > 0) { @@ -284,28 +279,24 @@ void utils_sha1_update(iot_sha1_context *ctx, const unsigned char *input, size_t } } -static const unsigned char iot_sha1_padding[64] = { - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; +static const unsigned char iot_sha1_padding[64] = {0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /* * SHA-1 final digest */ void utils_sha1_finish(iot_sha1_context *ctx, unsigned char output[20]) { - uint32_t last, padn; - uint32_t high, low; + uint32_t last, padn; + uint32_t high, low; unsigned char msglen[8]; - high = (ctx->total[0] >> 29) - | (ctx->total[1] << 3); - low = (ctx->total[0] << 3); + high = (ctx->total[0] >> 29) | (ctx->total[1] << 3); + low = (ctx->total[0] << 3); IOT_SHA1_PUT_UINT32_BE(high, msglen, 0); - IOT_SHA1_PUT_UINT32_BE(low, msglen, 4); + IOT_SHA1_PUT_UINT32_BE(low, msglen, 4); last = ctx->total[0] & 0x3F; padn = (last < 56) ? (56 - last) : (120 - last); @@ -313,14 +304,13 @@ void utils_sha1_finish(iot_sha1_context *ctx, unsigned char output[20]) utils_sha1_update(ctx, iot_sha1_padding, padn); utils_sha1_update(ctx, msglen, 8); - IOT_SHA1_PUT_UINT32_BE(ctx->state[0], output, 0); - IOT_SHA1_PUT_UINT32_BE(ctx->state[1], output, 4); - IOT_SHA1_PUT_UINT32_BE(ctx->state[2], output, 8); + IOT_SHA1_PUT_UINT32_BE(ctx->state[0], output, 0); + IOT_SHA1_PUT_UINT32_BE(ctx->state[1], output, 4); + IOT_SHA1_PUT_UINT32_BE(ctx->state[2], output, 8); IOT_SHA1_PUT_UINT32_BE(ctx->state[3], output, 12); IOT_SHA1_PUT_UINT32_BE(ctx->state[4], output, 16); } - /* * output = SHA-1( input buffer ) */ @@ -334,4 +324,3 @@ void utils_sha1(const unsigned char *input, size_t ilen, unsigned char output[20 utils_sha1_finish(&ctx, output); utils_sha1_free(&ctx); } - diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_timer.c b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_timer.c similarity index 75% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_timer.c rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_timer.c index 433ce7d8..42db2c26 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/sdk_src/utils/utils_timer.c +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/sdk_src/utils/utils_timer.c @@ -1,6 +1,6 @@ /* * Tencent is pleased to support the open source community by making IoT Hub available. - * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + * Copyright (C) 2018-2020 THL A29 Limited, a Tencent company. All rights reserved. * Licensed under the MIT License (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at @@ -16,29 +16,34 @@ #ifdef __cplusplus extern "C" { #endif - + #include "utils_timer.h" - -bool expired(Timer *timer) { + +bool expired(Timer *timer) +{ return HAL_Timer_expired(timer); } -void countdown_ms(Timer *timer, unsigned int timeout_ms) { +void countdown_ms(Timer *timer, unsigned int timeout_ms) +{ HAL_Timer_countdown_ms(timer, timeout_ms); } -void countdown(Timer *timer, unsigned int timeout) { +void countdown(Timer *timer, unsigned int timeout) +{ HAL_Timer_countdown(timer, timeout); } -int left_ms(Timer *timer) { +int left_ms(Timer *timer) +{ return HAL_Timer_remain(timer); } -void InitTimer(Timer *timer) { +void InitTimer(Timer *timer) +{ HAL_Timer_init(timer); } - + #ifdef __cplusplus } #endif diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/internal_make_funcs.mk b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/internal_make_funcs.mk similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/internal_make_funcs.mk rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/internal_make_funcs.mk diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/parse_make_settings.mk b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk similarity index 98% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/parse_make_settings.mk rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk index 7bf84df7..b1d20107 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/parse_make_settings.mk +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/parse_make_settings.mk @@ -14,7 +14,7 @@ SWITCH_VARS := \ FEATURE_AUTH_WITH_NOTLS \ FEATURE_GATEWAY_ENABLED \ FEATURE_LOG_UPLOAD_ENABLED \ - FEATURE_MULTITHREAD_TEST_ENABLED \ + FEATURE_MULTITHREAD_ENABLED \ FEATURE_DEV_DYN_REG_ENABLED \ FEATURE_AT_TCP_ENABLED \ FEATURE_AT_UART_RECV_IRQ \ diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/rules-tests.mk b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules-tests.mk similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/rules-tests.mk rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules-tests.mk diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/rules.mk b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules.mk similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/rules.mk rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/rules.mk diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/stats_static_lib.sh b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/stats_static_lib.sh similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/stats_static_lib.sh rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/stats_static_lib.sh diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/update_gtest.sh b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_gtest.sh similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/update_gtest.sh rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_gtest.sh diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/update_mbedtls.sh b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_mbedtls.sh similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/build_scripts/update_mbedtls.sh rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/build_scripts/update_mbedtls.sh diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/cmake_scripts/config.h.in b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/config.h.in similarity index 93% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/cmake_scripts/config.h.in rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/config.h.in index 4eb2e60e..11d2e07d 100644 --- a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/cmake_scripts/config.h.in +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/config.h.in @@ -14,3 +14,4 @@ #cmakedefine AT_OS_USED #cmakedefine AT_DEBUG #cmakedefine OTA_USE_HTTPS +#cmakedefine MULTITHREAD_ENABLED diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/cmake_scripts/convert.sh b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/convert.sh similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/cmake_scripts/convert.sh rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/cmake_scripts/convert.sh diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/codegen.py b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/codegen.py similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/codegen.py rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/codegen.py diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/example_config.json b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/example_config.json new file mode 100644 index 00000000..3dfd4f97 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/example_config.json @@ -0,0 +1,230 @@ +{ + "version": "1.0", + "properties": [ + { + "id": "time", + "name": "time", + "required": false, + "desc": "", + "mode": "rw", + "define": { + "type": "timestamp" + } + }, + { + "id": "float", + "name": "float", + "required": false, + "desc": "", + "mode": "r", + "define": { + "type": "float", + "min": "-10", + "max": "10", + "start": "-5", + "step": "0.5", + "unit": "cm" + } + }, + { + "id": "light_switch", + "name": "电灯开关", + "required": true, + "desc": "控制电灯开灭", + "mode": "rw", + "define": { + "type": "bool", + "mapping": { + "0": "关", + "1": "开" + } + } + }, + { + "id": "color", + "name": "颜色", + "desc": "灯光颜色", + "mode": "rw", + "define": { + "type": "enum", + "mapping": { + "0": "Red", + "1": "Green", + "2": "Blue" + } + } + }, + { + "id": "brightness", + "name": "亮度", + "required": false, + "desc": "灯光亮度", + "mode": "rw", + "define": { + "type": "int", + "min": "-9", + "max": "100", + "start": "-1", + "step": "5", + "unit": "cm" + } + }, + { + "id": "name", + "name": "灯位置名称", + "desc": "灯位置名称:书房、客厅等", + "mode": "rw", + "required": true, + "define": { + "type": "string", + "min": "1", + "max": "64" + } + } + ], + "events": [ + { + "id": "all_function", + "name": "ALL_FUNCTION", + "required": false, + "desc": "", + "params": [ + { + "id": "bool", + "name": "bool", + "desc": "", + "define": { + "type": "bool", + "mapping": { + "0": "关", + "1": "开" + } + } + }, + { + "id": "int", + "name": "int", + "desc": "", + "define": { + "type": "int", + "min": "1", + "max": "100", + "start": "1", + "step": "1", + "unit": "cm" + } + }, + { + "id": "str", + "name": "str", + "desc": "", + "define": { + "type": "string", + "min": "1", + "max": "64" + } + }, + { + "id": "float", + "name": "float", + "desc": "", + "define": { + "type": "float", + "min": "0", + "max": "100", + "start": "0", + "step": "1.5", + "unit": "cm" + } + }, + { + "id": "enum1", + "name": "enum1", + "desc": "", + "define": { + "type": "enum", + "mapping": { + "0": "color", + "1": "door" + } + } + }, + { + "id": "time", + "name": "time", + "desc": "", + "define": { + "type": "timestamp" + } + } + ], + "type": "alert" + }, + { + "id": "status_report", + "name": "DeviceStatus", + "desc": "Report the device status我是中文", + "type": "info", + "required": true, + "params": [ + { + "id": "status", + "name": "running_state", + "desc": "Report current device running state", + "define": { + "type": "bool", + "mapping": { + "0": "normal", + "1": "fault" + } + } + }, + { + "id": "message", + "name": "Message", + "desc": "Some extra message", + "define": { + "type": "string", + "min": "1", + "max": "64" + } + } + ] + }, + { + "id": "hardware_fault", + "name": "Hardware_fault", + "required": false, + "desc": "Report hardware fault", + "params": [ + { + "id": "name", + "name": "Name", + "desc": "Name like: memory,tf card, censors ...", + "define": { + "type": "string", + "min": "1", + "max": "64" + } + }, + { + "id": "error_code", + "name": "Error_Code", + "desc": "Error code for fault", + "define": { + "type": "int", + "unit": "", + "step": "1", + "min": "0", + "max": "2000", + "start": "0" + } + } + ], + "type": "fault" + } + ], + "profile": { + "productID": "C0NEMO9UO0" + } +} \ No newline at end of file diff --git a/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/run-clang-tidy b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/run-clang-tidy new file mode 100644 index 00000000..f5776896 --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/run-clang-tidy @@ -0,0 +1,296 @@ +#!/usr/bin/env python +# +#===- run-clang-tidy.py - Parallel clang-tidy runner ---------*- python -*--===# +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +#===------------------------------------------------------------------------===# +# FIXME: Integrate with clang-tidy-diff.py + +""" +Parallel clang-tidy runner +========================== + +Runs clang-tidy over all files in a compilation database. Requires clang-tidy +and clang-apply-replacements in $PATH. + +Example invocations. +- Run clang-tidy on all files in the current working directory with a default + set of checks and show warnings in the cpp files and all project headers. + run-clang-tidy.py $PWD + +- Fix all header guards. + run-clang-tidy.py -fix -checks=-*,llvm-header-guard + +- Fix all header guards included from clang-tidy and header guards + for clang-tidy headers. + run-clang-tidy.py -fix -checks=-*,llvm-header-guard extra/clang-tidy \ + -header-filter=extra/clang-tidy + +Compilation database setup: +http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html +""" + +from __future__ import print_function + +import argparse +import glob +import json +import multiprocessing +import os +import re +import shutil +import subprocess +import sys +import tempfile +import threading +import traceback +import yaml + +is_py2 = sys.version[0] == '2' + +if is_py2: + import Queue as queue +else: + import queue as queue + +def find_compilation_database(path): + """Adjusts the directory until a compilation database is found.""" + result = './' + while not os.path.isfile(os.path.join(result, path)): + if os.path.realpath(result) == '/': + print('Error: could not find compilation database.') + sys.exit(1) + result += '../' + return os.path.realpath(result) + + +def make_absolute(f, directory): + if os.path.isabs(f): + return f + return os.path.normpath(os.path.join(directory, f)) + + +def get_tidy_invocation(f, clang_tidy_binary, checks, tmpdir, build_path, + header_filter, extra_arg, extra_arg_before, quiet): + """Gets a command line for clang-tidy.""" + start = [clang_tidy_binary] + if header_filter is not None: + start.append('-header-filter=' + header_filter) + else: + # Show warnings in all in-project headers by default. + start.append('-header-filter=^' + build_path + '/.*') + if checks: + start.append('-checks=' + checks) + if tmpdir is not None: + start.append('-export-fixes') + # Get a temporary file. We immediately close the handle so clang-tidy can + # overwrite it. + (handle, name) = tempfile.mkstemp(suffix='.yaml', dir=tmpdir) + os.close(handle) + start.append(name) + for arg in extra_arg: + start.append('-extra-arg=%s' % arg) + for arg in extra_arg_before: + start.append('-extra-arg-before=%s' % arg) + start.append('-p=' + build_path) + if quiet: + start.append('-quiet') + start.append(f) + return start + + +def merge_replacement_files(tmpdir, mergefile): + """Merge all replacement files in a directory into a single file""" + # The fixes suggested by clang-tidy >= 4.0.0 are given under + # the top level key 'Diagnostics' in the output yaml files + mergekey="Diagnostics" + merged=[] + for replacefile in glob.iglob(os.path.join(tmpdir, '*.yaml')): + content = yaml.safe_load(open(replacefile, 'r')) + if not content: + continue # Skip empty files. + merged.extend(content.get(mergekey, [])) + + if merged: + # MainSourceFile: The key is required by the definition inside + # include/clang/Tooling/ReplacementsYaml.h, but the value + # is actually never used inside clang-apply-replacements, + # so we set it to '' here. + output = { 'MainSourceFile': '', mergekey: merged } + with open(mergefile, 'w') as out: + yaml.safe_dump(output, out) + else: + # Empty the file: + open(mergefile, 'w').close() + + +def check_clang_apply_replacements_binary(args): + """Checks if invoking supplied clang-apply-replacements binary works.""" + try: + subprocess.check_call([args.clang_apply_replacements_binary, '--version']) + except: + print('Unable to run clang-apply-replacements. Is clang-apply-replacements ' + 'binary correctly specified?', file=sys.stderr) + traceback.print_exc() + sys.exit(1) + + +def apply_fixes(args, tmpdir): + """Calls clang-apply-fixes on a given directory.""" + invocation = [args.clang_apply_replacements_binary] + if args.format: + invocation.append('-format') + if args.style: + invocation.append('-style=' + args.style) + invocation.append(tmpdir) + subprocess.call(invocation) + + +def run_tidy(args, tmpdir, build_path, queue): + """Takes filenames out of queue and runs clang-tidy on them.""" + while True: + name = queue.get() + invocation = get_tidy_invocation(name, args.clang_tidy_binary, args.checks, + tmpdir, build_path, args.header_filter, + args.extra_arg, args.extra_arg_before, + args.quiet) + sys.stdout.write(' '.join(invocation) + '\n') + subprocess.call(invocation) + queue.task_done() + + +def main(): + parser = argparse.ArgumentParser(description='Runs clang-tidy over all files ' + 'in a compilation database. Requires ' + 'clang-tidy and clang-apply-replacements in ' + '$PATH.') + parser.add_argument('-clang-tidy-binary', metavar='PATH', + default='clang-tidy-6.0', + help='path to clang-tidy binary') + parser.add_argument('-clang-apply-replacements-binary', metavar='PATH', + default='clang-apply-replacements-6.0', + help='path to clang-apply-replacements binary') + parser.add_argument('-checks', default=None, + help='checks filter, when not specified, use clang-tidy ' + 'default') + parser.add_argument('-header-filter', default=None, + help='regular expression matching the names of the ' + 'headers to output diagnostics from. Diagnostics from ' + 'the main file of each translation unit are always ' + 'displayed.') + parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes', + help='Create a yaml file to store suggested fixes in, ' + 'which can be applied with clang-apply-replacements.') + parser.add_argument('-j', type=int, default=0, + help='number of tidy instances to be run in parallel.') + parser.add_argument('files', nargs='*', default=['.*'], + help='files to be processed (regex on path)') + parser.add_argument('-fix', action='store_true', help='apply fix-its') + parser.add_argument('-format', action='store_true', help='Reformat code ' + 'after applying fixes') + parser.add_argument('-style', default='file', help='The style of reformat ' + 'code after applying fixes') + parser.add_argument('-p', dest='build_path', + help='Path used to read a compile command database.') + parser.add_argument('-extra-arg', dest='extra_arg', + action='append', default=[], + help='Additional argument to append to the compiler ' + 'command line.') + parser.add_argument('-extra-arg-before', dest='extra_arg_before', + action='append', default=[], + help='Additional argument to prepend to the compiler ' + 'command line.') + parser.add_argument('-quiet', action='store_true', + help='Run clang-tidy in quiet mode') + args = parser.parse_args() + + db_path = 'compile_commands.json' + + if args.build_path is not None: + build_path = args.build_path + else: + # Find our database + build_path = find_compilation_database(db_path) + + try: + invocation = [args.clang_tidy_binary, '-list-checks'] + invocation.append('-p=' + build_path) + if args.checks: + invocation.append('-checks=' + args.checks) + invocation.append('-') + subprocess.check_call(invocation) + except: + print("Unable to run clang-tidy.", file=sys.stderr) + sys.exit(1) + + # Load the database and extract all files. + database = json.load(open(os.path.join(build_path, db_path))) + files = [make_absolute(entry['file'], entry['directory']) + for entry in database] + + max_task = args.j + if max_task == 0: + max_task = multiprocessing.cpu_count() + + tmpdir = None + if args.fix or args.export_fixes: + check_clang_apply_replacements_binary(args) + tmpdir = tempfile.mkdtemp() + + # Build up a big regexy filter from all command line arguments. + file_name_re = re.compile('|'.join(args.files)) + + try: + # Spin up a bunch of tidy-launching threads. + task_queue = queue.Queue(max_task) + for _ in range(max_task): + t = threading.Thread(target=run_tidy, + args=(args, tmpdir, build_path, task_queue)) + t.daemon = True + t.start() + + # Fill the queue with files. + for name in files: + if file_name_re.search(name): + task_queue.put(name) + + # Wait for all threads to be done. + task_queue.join() + + except KeyboardInterrupt: + # This is a sad hack. Unfortunately subprocess goes + # bonkers with ctrl-c and we start forking merrily. + print('\nCtrl-C detected, goodbye.') + if tmpdir: + shutil.rmtree(tmpdir) + os.kill(0, 9) + + return_code = 0 + if args.export_fixes: + print('Writing fixes to ' + args.export_fixes + ' ...') + try: + merge_replacement_files(tmpdir, args.export_fixes) + except: + print('Error exporting fixes.\n', file=sys.stderr) + traceback.print_exc() + return_code=1 + + if args.fix: + print('Applying fixes ...') + try: + apply_fixes(args, tmpdir) + except: + print('Error applying fixes.\n', file=sys.stderr) + traceback.print_exc() + return_code=1 + + if tmpdir: + shutil.rmtree(tmpdir) + sys.exit(return_code) + +if __name__ == '__main__': + main() diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/update_from_old_SDK.sh b/components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/update_from_old_SDK.sh similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/tools/update_from_old_SDK.sh rename to components/connectivity/qcloud-iot-hub-sdk/3rdparty/tools/update_from_old_SDK.sh diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_AT_UART_tencentos_tiny.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_AT_UART_tencentos_tiny.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_AT_UART_tencentos_tiny.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_AT_UART_tencentos_tiny.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_Device_tencentos_tiny.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_Device_tencentos_tiny.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_Device_tencentos_tiny.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_Device_tencentos_tiny.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_OS_tencentos_tiny.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_OS_tencentos_tiny.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_OS_tencentos_tiny.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_OS_tencentos_tiny.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_TCP_lwip.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_TCP_lwip.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_TCP_lwip.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_TCP_lwip.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_TCP_module.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_TCP_module.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_TCP_module.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_TCP_module.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_Timer_tencentos_tiny.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_Timer_tencentos_tiny.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_Timer_tencentos_tiny.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_Timer_tencentos_tiny.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_UDP_lwip.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_UDP_lwip.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/3rdparty/platform/os/freertos/HAL_UDP_lwip.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_UDP_lwip.c diff --git a/components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_UDP_module.c b/components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_UDP_module.c similarity index 100% rename from components/connectivity/qcloud-iot-hub-sdk-3.1.2/port/TencentOS_tiny/HAL_UDP_module.c rename to components/connectivity/qcloud-iot-hub-sdk/port/TencentOS_tiny/HAL_UDP_module.c diff --git a/components/connectivity/qcloud-iot-hub-sdk/version b/components/connectivity/qcloud-iot-hub-sdk/version new file mode 100644 index 00000000..944880fa --- /dev/null +++ b/components/connectivity/qcloud-iot-hub-sdk/version @@ -0,0 +1 @@ +3.2.0