From 6b656c9a07d178f973643546f9cebc7a2703e851 Mon Sep 17 00:00:00 2001 From: Dong Heng Date: Wed, 12 Dec 2018 15:23:28 +0800 Subject: [PATCH] feat(aws): AWS handshake at 160 MHz Add CPU speed up count for user to check if speeding up is nested. --- .../aws_iot/port/network_mbedtls_wrapper.c | 7 +++++++ components/esp8266/lib/VERSION | 2 +- components/esp8266/lib/libcore.a | Bin 76336 -> 76836 bytes 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/components/aws_iot/port/network_mbedtls_wrapper.c b/components/aws_iot/port/network_mbedtls_wrapper.c index 157c78f0..2b078da9 100644 --- a/components/aws_iot/port/network_mbedtls_wrapper.c +++ b/components/aws_iot/port/network_mbedtls_wrapper.c @@ -27,6 +27,7 @@ #include "mbedtls/esp_debug.h" #include "esp_log.h" +#include "esp_system.h" #ifdef CONFIG_USE_VFS #include "esp_vfs.h" @@ -278,8 +279,12 @@ IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params) { ESP_LOGD(TAG, "SSL state connect : %d ", tlsDataParams->ssl.state); ESP_LOGD(TAG, "Performing the SSL/TLS handshake..."); + + rtc_clk_cpu_freq_set(RTC_CPU_FREQ_160M); + while((ret = mbedtls_ssl_handshake(&(tlsDataParams->ssl))) != 0) { if(ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { + rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M); ESP_LOGE(TAG, "failed! mbedtls_ssl_handshake returned -0x%x", -ret); if(ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { ESP_LOGE(TAG, " Unable to verify the server's certificate. "); @@ -288,6 +293,8 @@ IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params) { } } + rtc_clk_cpu_freq_set(RTC_CPU_FREQ_80M); + ESP_LOGD(TAG, "ok [ Protocol is %s ] [ Ciphersuite is %s ]", mbedtls_ssl_get_version(&(tlsDataParams->ssl)), mbedtls_ssl_get_ciphersuite(&(tlsDataParams->ssl))); if((ret = mbedtls_ssl_get_record_expansion(&(tlsDataParams->ssl))) >= 0) { diff --git a/components/esp8266/lib/VERSION b/components/esp8266/lib/VERSION index 28b27b06..4a992db5 100644 --- a/components/esp8266/lib/VERSION +++ b/components/esp8266/lib/VERSION @@ -1,5 +1,5 @@ gwen: - core: 5ce569c + core: 25b7949 net80211: f7214eb pp: cd2eae1 wpa: 4e2372f diff --git a/components/esp8266/lib/libcore.a b/components/esp8266/lib/libcore.a index db3faeb344074e2625cc1fc8419b6df64de2be3a..c870943f67d8b4a8b1706d3368964cb5755cefe3 100644 GIT binary patch delta 18819 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