mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
mbedTLS: Add generic support for mbedTLS debug output via the esp_log functionality
This commit is contained in:
parent
c18d2a359c
commit
0b7058d8ef
@ -24,15 +24,12 @@ config MBEDTLS_DEBUG
|
|||||||
bool "Enable mbedTLS debugging"
|
bool "Enable mbedTLS debugging"
|
||||||
default n
|
default n
|
||||||
help
|
help
|
||||||
Enable mbedTLS debugging functions.
|
Enable mbedTLS debugging functions at compile time.
|
||||||
|
|
||||||
If this option is enabled, use the mbedtls_debug_set_threshold()
|
If this option is enabled, you can include
|
||||||
and mbedtls_ssl_conf_dbg() functions to obtain debugging output
|
"mbedtls/esp_debug.h" and call mbedtls_esp_enable_debug_log()
|
||||||
from mbedTLS.
|
at runtime in order to enable mbedTLS debug output via the ESP
|
||||||
|
log mechanism.
|
||||||
Note thatm mbedTLS debugging is not related to the ESP logging
|
|
||||||
functionality. See the "https_request_main" example for a
|
|
||||||
sample function which connects the two together.
|
|
||||||
|
|
||||||
config MBEDTLS_HARDWARE_AES
|
config MBEDTLS_HARDWARE_AES
|
||||||
bool "Enable hardware AES acceleration"
|
bool "Enable hardware AES acceleration"
|
||||||
|
45
components/mbedtls/port/include/mbedtls/esp_debug.h
Normal file
45
components/mbedtls/port/include/mbedtls/esp_debug.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
|
||||||
|
//
|
||||||
|
// 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 "sdkconfig.h"
|
||||||
|
#ifdef CONFIG_MBEDTLS_DEBUG
|
||||||
|
|
||||||
|
/** @brief Enable mbedTLS debug logging via the esp_log mechanism.
|
||||||
|
*
|
||||||
|
* mbedTLS internal debugging is filtered from a specified mbedTLS
|
||||||
|
* threshold level to esp_log level at runtime:
|
||||||
|
*
|
||||||
|
* - 1 - Warning
|
||||||
|
* - 2 - Info
|
||||||
|
* - 3 - Debug
|
||||||
|
* - 4 - Verbose
|
||||||
|
*
|
||||||
|
* (Note that mbedTLS debug thresholds are not always consistently used.)
|
||||||
|
*
|
||||||
|
* This function will set the esp log level for "mbedtls" to the specified mbedTLS
|
||||||
|
* threshold level that matches. However, the overall max ESP log level must be set high
|
||||||
|
* enough in menuconfig, or some messages may be filtered at compile time.
|
||||||
|
*
|
||||||
|
* @param conf mbedtls_ssl_config structure
|
||||||
|
* @param mbedTLS debug threshold, 0-4. Messages are filtered at runtime.
|
||||||
|
*/
|
||||||
|
void mbedtls_esp_enable_debug_log(mbedtls_ssl_config *conf, int threshold);
|
||||||
|
|
||||||
|
/** @brief Disable mbedTLS debug logging via the esp_log mechanism.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void mbedtls_esp_disable_debug_log(mbedtls_ssl_config *conf);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
86
components/mbedtls/port/mbedtls_debug.c
Normal file
86
components/mbedtls/port/mbedtls_debug.c
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD
|
||||||
|
//
|
||||||
|
// 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 <strings.h>
|
||||||
|
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "mbedtls/platform.h"
|
||||||
|
#include "mbedtls/debug.h"
|
||||||
|
#include "mbedtls/ssl.h"
|
||||||
|
#include "mbedtls/esp_debug.h"
|
||||||
|
|
||||||
|
static const char *TAG = "mbedtls";
|
||||||
|
|
||||||
|
static void mbedtls_esp_debug(void *ctx, int level,
|
||||||
|
const char *file, int line,
|
||||||
|
const char *str);
|
||||||
|
|
||||||
|
void mbedtls_esp_enable_debug_log(mbedtls_ssl_config *conf, int threshold)
|
||||||
|
{
|
||||||
|
mbedtls_debug_set_threshold(threshold);
|
||||||
|
mbedtls_ssl_conf_dbg(conf, mbedtls_esp_debug, NULL);
|
||||||
|
esp_log_level_t level = ESP_LOG_NONE;
|
||||||
|
switch(threshold) {
|
||||||
|
case 1:
|
||||||
|
level = ESP_LOG_WARN;
|
||||||
|
case 2:
|
||||||
|
level = ESP_LOG_INFO;
|
||||||
|
case 3:
|
||||||
|
level = ESP_LOG_DEBUG;
|
||||||
|
case 4:
|
||||||
|
level = ESP_LOG_VERBOSE;
|
||||||
|
}
|
||||||
|
esp_log_level_set(TAG, level);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mbedtls_esp_disable_debug_log(mbedtls_ssl_config *conf)
|
||||||
|
{
|
||||||
|
mbedtls_ssl_conf_dbg(conf, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default mbedtls debug function that translates mbedTLS debug output
|
||||||
|
to ESP_LOGx debug output.
|
||||||
|
*/
|
||||||
|
static void mbedtls_esp_debug(void *ctx, int level,
|
||||||
|
const char *file, int line,
|
||||||
|
const char *str)
|
||||||
|
{
|
||||||
|
char *file_sep;
|
||||||
|
|
||||||
|
/* Shorten 'file' from the whole file path to just the filename
|
||||||
|
|
||||||
|
This is a bit wasteful because the macros are compiled in with
|
||||||
|
the full _FILE_ path in each case.
|
||||||
|
*/
|
||||||
|
file_sep = rindex(file, '/');
|
||||||
|
if(file_sep)
|
||||||
|
file = file_sep+1;
|
||||||
|
|
||||||
|
switch(level) {
|
||||||
|
case 1:
|
||||||
|
ESP_LOGW(TAG, "%s:%d %s", file, line, str);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
ESP_LOGI(TAG, "%s:%d %s", file, line, str);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
ESP_LOGD(TAG, "%s:%d %s", file, line, str);
|
||||||
|
case 4:
|
||||||
|
ESP_LOGV(TAG, "%s:%d %s", file, line, str);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ESP_LOGE(TAG, "Unexpected log level %d: %s", level, str);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
@ -40,7 +40,7 @@
|
|||||||
|
|
||||||
#include "mbedtls/platform.h"
|
#include "mbedtls/platform.h"
|
||||||
#include "mbedtls/net.h"
|
#include "mbedtls/net.h"
|
||||||
#include "mbedtls/debug.h"
|
#include "mbedtls/esp_debug.h"
|
||||||
#include "mbedtls/ssl.h"
|
#include "mbedtls/ssl.h"
|
||||||
#include "mbedtls/entropy.h"
|
#include "mbedtls/entropy.h"
|
||||||
#include "mbedtls/ctr_drbg.h"
|
#include "mbedtls/ctr_drbg.h"
|
||||||
@ -89,50 +89,6 @@ static const char *REQUEST = "GET " WEB_URL " HTTP/1.1\n"
|
|||||||
extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start");
|
extern const uint8_t server_root_cert_pem_start[] asm("_binary_server_root_cert_pem_start");
|
||||||
extern const uint8_t server_root_cert_pem_end[] asm("_binary_server_root_cert_pem_end");
|
extern const uint8_t server_root_cert_pem_end[] asm("_binary_server_root_cert_pem_end");
|
||||||
|
|
||||||
#ifdef MBEDTLS_DEBUG_C
|
|
||||||
|
|
||||||
#define MBEDTLS_DEBUG_LEVEL 4
|
|
||||||
|
|
||||||
/* mbedtls debug function that translates mbedTLS debug output
|
|
||||||
to ESP_LOGx debug output.
|
|
||||||
|
|
||||||
MBEDTLS_DEBUG_LEVEL 4 means all mbedTLS debug output gets sent here,
|
|
||||||
and then filtered to the ESP logging mechanism.
|
|
||||||
*/
|
|
||||||
static void mbedtls_debug(void *ctx, int level,
|
|
||||||
const char *file, int line,
|
|
||||||
const char *str)
|
|
||||||
{
|
|
||||||
const char *MBTAG = "mbedtls";
|
|
||||||
char *file_sep;
|
|
||||||
|
|
||||||
/* Shorten 'file' from the whole file path to just the filename
|
|
||||||
|
|
||||||
This is a bit wasteful because the macros are compiled in with
|
|
||||||
the full _FILE_ path in each case.
|
|
||||||
*/
|
|
||||||
file_sep = rindex(file, '/');
|
|
||||||
if(file_sep)
|
|
||||||
file = file_sep+1;
|
|
||||||
|
|
||||||
switch(level) {
|
|
||||||
case 1:
|
|
||||||
ESP_LOGI(MBTAG, "%s:%d %s", file, line, str);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
ESP_LOGD(MBTAG, "%s:%d %s", file, line, str);
|
|
||||||
case 4:
|
|
||||||
ESP_LOGV(MBTAG, "%s:%d %s", file, line, str);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ESP_LOGE(MBTAG, "Unexpected log level %d: %s", level, str);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static esp_err_t event_handler(void *ctx, system_event_t *event)
|
static esp_err_t event_handler(void *ctx, system_event_t *event)
|
||||||
{
|
{
|
||||||
switch(event->event_id) {
|
switch(event->event_id) {
|
||||||
@ -240,9 +196,8 @@ static void https_get_task(void *pvParameters)
|
|||||||
mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_OPTIONAL);
|
mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_OPTIONAL);
|
||||||
mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL);
|
mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL);
|
||||||
mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg);
|
mbedtls_ssl_conf_rng(&conf, mbedtls_ctr_drbg_random, &ctr_drbg);
|
||||||
#ifdef MBEDTLS_DEBUG_C
|
#ifdef CONFIG_MBEDTLS_DEBUG
|
||||||
mbedtls_debug_set_threshold(MBEDTLS_DEBUG_LEVEL);
|
mbedtls_esp_enable_debug_log(&conf, 4);
|
||||||
mbedtls_ssl_conf_dbg(&conf, mbedtls_debug, NULL);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0)
|
if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user