blob: 4f580d71ca83875e305725a0601eff1feb5953e3 [file] [log] [blame]
Hanno Beckerb9100162021-01-12 09:46:03 +00001/*
2 * Message Processing Stack, Trace module
3 *
4 * Copyright The Mbed TLS Contributors
Dave Rodgman7ff79652023-11-03 12:04:52 +00005 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Hanno Beckerb9100162021-01-12 09:46:03 +00006 */
7
Hanno Becker43c8f8c2021-03-05 05:16:45 +00008#include "common.h"
9
10#if defined(MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL)
11
Hanno Beckerc518c3b2021-01-28 07:08:08 +000012#include "mps_common.h"
Hanno Beckerb9100162021-01-12 09:46:03 +000013
Hanno Becker984fbde2021-01-28 09:02:18 +000014#if defined(MBEDTLS_MPS_ENABLE_TRACE)
Hanno Beckerb9100162021-01-12 09:46:03 +000015
Hanno Beckerc518c3b2021-01-28 07:08:08 +000016#include "mps_trace.h"
Hanno Beckerb9100162021-01-12 09:46:03 +000017#include <stdarg.h>
18
Hanno Becker2332f8f2021-02-22 16:58:16 +000019static int trace_depth = 0;
Hanno Beckerb9100162021-01-12 09:46:03 +000020
21#define color_default "\x1B[0m"
22#define color_red "\x1B[1;31m"
23#define color_green "\x1B[1;32m"
24#define color_yellow "\x1B[1;33m"
25#define color_blue "\x1B[1;34m"
26#define color_magenta "\x1B[1;35m"
27#define color_cyan "\x1B[1;36m"
28#define color_white "\x1B[1;37m"
29
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010030static char const *colors[] =
Hanno Beckerb9100162021-01-12 09:46:03 +000031{
32 color_default,
33 color_green,
34 color_yellow,
35 color_magenta,
36 color_cyan,
37 color_blue,
38 color_white
39};
40
41#define MPS_TRACE_BUF_SIZE 100
42
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010043void mbedtls_mps_trace_print_msg(int id, int line, const char *format, ...)
Hanno Beckerb9100162021-01-12 09:46:03 +000044{
45 int ret;
46 char str[MPS_TRACE_BUF_SIZE];
47 va_list argp;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010048 va_start(argp, format);
49 ret = mbedtls_vsnprintf(str, MPS_TRACE_BUF_SIZE, format, argp);
50 va_end(argp);
Hanno Beckerb9100162021-01-12 09:46:03 +000051
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010052 if (ret >= 0 && ret < MPS_TRACE_BUF_SIZE) {
Hanno Beckerb9100162021-01-12 09:46:03 +000053 str[ret] = '\0';
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010054 mbedtls_printf("[%d|L%d]: %s\n", id, line, str);
Hanno Beckerb9100162021-01-12 09:46:03 +000055 }
56}
57
Hanno Becker984fbde2021-01-28 09:02:18 +000058int mbedtls_mps_trace_get_depth()
Hanno Beckerb9100162021-01-12 09:46:03 +000059{
Hanno Becker2332f8f2021-02-22 16:58:16 +000060 return trace_depth;
Hanno Beckerb9100162021-01-12 09:46:03 +000061}
Hanno Becker984fbde2021-01-28 09:02:18 +000062void mbedtls_mps_trace_dec_depth()
Hanno Beckerb9100162021-01-12 09:46:03 +000063{
Hanno Becker2332f8f2021-02-22 16:58:16 +000064 trace_depth--;
Hanno Beckerb9100162021-01-12 09:46:03 +000065}
Hanno Becker984fbde2021-01-28 09:02:18 +000066void mbedtls_mps_trace_inc_depth()
Hanno Beckerb9100162021-01-12 09:46:03 +000067{
Hanno Becker2332f8f2021-02-22 16:58:16 +000068 trace_depth++;
Hanno Beckerb9100162021-01-12 09:46:03 +000069}
70
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010071void mbedtls_mps_trace_color(int id)
Hanno Beckerb9100162021-01-12 09:46:03 +000072{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010073 if (id > (int) (sizeof(colors) / sizeof(*colors))) {
Hanno Beckerb9100162021-01-12 09:46:03 +000074 return;
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010075 }
76 printf("%s", colors[id]);
Hanno Beckerb9100162021-01-12 09:46:03 +000077}
78
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010079void mbedtls_mps_trace_indent(int level, mbedtls_mps_trace_type ty)
Hanno Beckerb9100162021-01-12 09:46:03 +000080{
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010081 if (level > 0) {
82 while (--level) {
83 printf("| ");
84 }
Hanno Beckerb9100162021-01-12 09:46:03 +000085
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010086 printf("| ");
Hanno Beckerb9100162021-01-12 09:46:03 +000087 }
88
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010089 switch (ty) {
Dave Rodgmanb7468252021-04-07 12:44:02 +010090 case MBEDTLS_MPS_TRACE_TYPE_COMMENT:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010091 mbedtls_printf("@ ");
Hanno Beckerb9100162021-01-12 09:46:03 +000092 break;
93
Dave Rodgmanb7468252021-04-07 12:44:02 +010094 case MBEDTLS_MPS_TRACE_TYPE_CALL:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010095 mbedtls_printf("+--> ");
Hanno Beckerb9100162021-01-12 09:46:03 +000096 break;
97
Dave Rodgmanb7468252021-04-07 12:44:02 +010098 case MBEDTLS_MPS_TRACE_TYPE_ERROR:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +010099 mbedtls_printf("E ");
Hanno Beckerb9100162021-01-12 09:46:03 +0000100 break;
101
Dave Rodgmanb7468252021-04-07 12:44:02 +0100102 case MBEDTLS_MPS_TRACE_TYPE_RETURN:
Gilles Peskine1b6c09a2023-01-11 14:52:35 +0100103 mbedtls_printf("< ");
Hanno Beckerb9100162021-01-12 09:46:03 +0000104 break;
105
106 default:
107 break;
108 }
109}
110
Hanno Becker984fbde2021-01-28 09:02:18 +0000111#endif /* MBEDTLS_MPS_ENABLE_TRACE */
Hanno Becker43c8f8c2021-03-05 05:16:45 +0000112#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */