1 /*
2  * SPDX-FileCopyrightText: 2015-2022 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <strings.h>
8 
9 #include "esp_log.h"
10 #include "mbedtls/platform.h"
11 #include "mbedtls/debug.h"
12 #include "mbedtls/ssl.h"
13 #include "mbedtls/esp_debug.h"
14 
15 #ifdef CONFIG_MBEDTLS_DEBUG
16 static const char *TAG = "mbedtls";
17 
18 static void mbedtls_esp_debug(void *ctx, int level,
19                               const char *file, int line,
20                               const char *str);
21 
mbedtls_esp_enable_debug_log(mbedtls_ssl_config * conf,int threshold)22 void mbedtls_esp_enable_debug_log(mbedtls_ssl_config *conf, int threshold)
23 {
24     esp_log_level_t level = ESP_LOG_NONE;
25     mbedtls_debug_set_threshold(threshold);
26     mbedtls_ssl_conf_dbg(conf, mbedtls_esp_debug, NULL);
27     switch(threshold) {
28     case 1:
29         level = ESP_LOG_WARN;
30         break;
31     case 2:
32         level = ESP_LOG_INFO;
33         break;
34     case 3:
35         level = ESP_LOG_DEBUG;
36         break;
37     case 4:
38         level = ESP_LOG_VERBOSE;
39         break;
40     }
41     esp_log_level_set(TAG, level);
42 }
43 
mbedtls_esp_disable_debug_log(mbedtls_ssl_config * conf)44 void mbedtls_esp_disable_debug_log(mbedtls_ssl_config *conf)
45 {
46     mbedtls_ssl_conf_dbg(conf, NULL, NULL);
47 }
48 
49 
50 /* Default mbedtls debug function that translates mbedTLS debug output
51    to ESP_LOGx debug output.
52 */
mbedtls_esp_debug(void * ctx,int level,const char * file,int line,const char * str)53 static void mbedtls_esp_debug(void *ctx, int level,
54                      const char *file, int line,
55                      const char *str)
56 {
57     char *file_sep;
58 
59     /* Shorten 'file' from the whole file path to just the filename
60 
61        This is a bit wasteful because the macros are compiled in with
62        the full _FILE_ path in each case.
63     */
64     file_sep = rindex(file, '/');
65     if(file_sep)
66         file = file_sep+1;
67 
68     switch(level) {
69     case 1:
70         ESP_LOGW(TAG, "%s:%d %s", file, line, str);
71         break;
72     case 2:
73         ESP_LOGI(TAG, "%s:%d %s", file, line, str);
74         break;
75     case 3:
76         ESP_LOGD(TAG, "%s:%d %s", file, line, str);
77         break;
78     case 4:
79         ESP_LOGV(TAG, "%s:%d %s", file, line, str);
80         break;
81     default:
82         ESP_LOGE(TAG, "Unexpected log level %d: %s", level, str);
83         break;
84     }
85 }
86 #endif
87