blob: cb69c6be68416b233f37f58d7803712885c93266 [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 Rodgman16799db2023-11-02 19:47:20 +00005 * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Hanno Beckerb9100162021-01-12 09:46:03 +00006 *
7 * This file is part of Mbed TLS (https://tls.mbed.org)
8 */
9
Hanno Becker43c8f8c2021-03-05 05:16:45 +000010#include "common.h"
11
Ronald Cron6f135e12021-12-08 16:57:54 +010012#if defined(MBEDTLS_SSL_PROTO_TLS1_3)
Hanno Becker43c8f8c2021-03-05 05:16:45 +000013
Hanno Beckerc518c3b2021-01-28 07:08:08 +000014#include "mps_common.h"
Hanno Beckerb9100162021-01-12 09:46:03 +000015
Hanno Becker984fbde2021-01-28 09:02:18 +000016#if defined(MBEDTLS_MPS_ENABLE_TRACE)
Hanno Beckerb9100162021-01-12 09:46:03 +000017
Hanno Beckerc518c3b2021-01-28 07:08:08 +000018#include "mps_trace.h"
Hanno Beckerb9100162021-01-12 09:46:03 +000019#include <stdarg.h>
20
Hanno Becker2332f8f2021-02-22 16:58:16 +000021static int trace_depth = 0;
Hanno Beckerb9100162021-01-12 09:46:03 +000022
23#define color_default "\x1B[0m"
24#define color_red "\x1B[1;31m"
25#define color_green "\x1B[1;32m"
26#define color_yellow "\x1B[1;33m"
27#define color_blue "\x1B[1;34m"
28#define color_magenta "\x1B[1;35m"
29#define color_cyan "\x1B[1;36m"
30#define color_white "\x1B[1;37m"
31
Gilles Peskine449bd832023-01-11 14:50:10 +010032static char const *colors[] =
Hanno Beckerb9100162021-01-12 09:46:03 +000033{
34 color_default,
35 color_green,
36 color_yellow,
37 color_magenta,
38 color_cyan,
39 color_blue,
40 color_white
41};
42
43#define MPS_TRACE_BUF_SIZE 100
44
Gilles Peskine449bd832023-01-11 14:50:10 +010045void mbedtls_mps_trace_print_msg(int id, int line, const char *format, ...)
Hanno Beckerb9100162021-01-12 09:46:03 +000046{
47 int ret;
48 char str[MPS_TRACE_BUF_SIZE];
49 va_list argp;
Gilles Peskine449bd832023-01-11 14:50:10 +010050 va_start(argp, format);
51 ret = mbedtls_vsnprintf(str, MPS_TRACE_BUF_SIZE, format, argp);
52 va_end(argp);
Hanno Beckerb9100162021-01-12 09:46:03 +000053
Gilles Peskine449bd832023-01-11 14:50:10 +010054 if (ret >= 0 && ret < MPS_TRACE_BUF_SIZE) {
Hanno Beckerb9100162021-01-12 09:46:03 +000055 str[ret] = '\0';
Gilles Peskine449bd832023-01-11 14:50:10 +010056 mbedtls_printf("[%d|L%d]: %s\n", id, line, str);
Hanno Beckerb9100162021-01-12 09:46:03 +000057 }
58}
59
Hanno Becker984fbde2021-01-28 09:02:18 +000060int mbedtls_mps_trace_get_depth()
Hanno Beckerb9100162021-01-12 09:46:03 +000061{
Hanno Becker2332f8f2021-02-22 16:58:16 +000062 return trace_depth;
Hanno Beckerb9100162021-01-12 09:46:03 +000063}
Hanno Becker984fbde2021-01-28 09:02:18 +000064void mbedtls_mps_trace_dec_depth()
Hanno Beckerb9100162021-01-12 09:46:03 +000065{
Hanno Becker2332f8f2021-02-22 16:58:16 +000066 trace_depth--;
Hanno Beckerb9100162021-01-12 09:46:03 +000067}
Hanno Becker984fbde2021-01-28 09:02:18 +000068void mbedtls_mps_trace_inc_depth()
Hanno Beckerb9100162021-01-12 09:46:03 +000069{
Hanno Becker2332f8f2021-02-22 16:58:16 +000070 trace_depth++;
Hanno Beckerb9100162021-01-12 09:46:03 +000071}
72
Gilles Peskine449bd832023-01-11 14:50:10 +010073void mbedtls_mps_trace_color(int id)
Hanno Beckerb9100162021-01-12 09:46:03 +000074{
Gilles Peskine449bd832023-01-11 14:50:10 +010075 if (id > (int) (sizeof(colors) / sizeof(*colors))) {
Hanno Beckerb9100162021-01-12 09:46:03 +000076 return;
Gilles Peskine449bd832023-01-11 14:50:10 +010077 }
78 printf("%s", colors[id]);
Hanno Beckerb9100162021-01-12 09:46:03 +000079}
80
Gilles Peskine449bd832023-01-11 14:50:10 +010081void mbedtls_mps_trace_indent(int level, mbedtls_mps_trace_type ty)
Hanno Beckerb9100162021-01-12 09:46:03 +000082{
Gilles Peskine449bd832023-01-11 14:50:10 +010083 if (level > 0) {
84 while (--level) {
85 printf("| ");
86 }
Hanno Beckerb9100162021-01-12 09:46:03 +000087
Gilles Peskine449bd832023-01-11 14:50:10 +010088 printf("| ");
Hanno Beckerb9100162021-01-12 09:46:03 +000089 }
90
Gilles Peskine449bd832023-01-11 14:50:10 +010091 switch (ty) {
Dave Rodgmanb7468252021-04-07 12:44:02 +010092 case MBEDTLS_MPS_TRACE_TYPE_COMMENT:
Gilles Peskine449bd832023-01-11 14:50:10 +010093 mbedtls_printf("@ ");
Hanno Beckerb9100162021-01-12 09:46:03 +000094 break;
95
Dave Rodgmanb7468252021-04-07 12:44:02 +010096 case MBEDTLS_MPS_TRACE_TYPE_CALL:
Gilles Peskine449bd832023-01-11 14:50:10 +010097 mbedtls_printf("+--> ");
Hanno Beckerb9100162021-01-12 09:46:03 +000098 break;
99
Dave Rodgmanb7468252021-04-07 12:44:02 +0100100 case MBEDTLS_MPS_TRACE_TYPE_ERROR:
Gilles Peskine449bd832023-01-11 14:50:10 +0100101 mbedtls_printf("E ");
Hanno Beckerb9100162021-01-12 09:46:03 +0000102 break;
103
Dave Rodgmanb7468252021-04-07 12:44:02 +0100104 case MBEDTLS_MPS_TRACE_TYPE_RETURN:
Gilles Peskine449bd832023-01-11 14:50:10 +0100105 mbedtls_printf("< ");
Hanno Beckerb9100162021-01-12 09:46:03 +0000106 break;
107
108 default:
109 break;
110 }
111}
112
Hanno Becker984fbde2021-01-28 09:02:18 +0000113#endif /* MBEDTLS_MPS_ENABLE_TRACE */
Ronald Cron6f135e12021-12-08 16:57:54 +0100114#endif /* MBEDTLS_SSL_PROTO_TLS1_3 */