#endif
#ifdef DEBUG
-#define DEBUG_PRINTLN(...) do { fprintf(stderr, "line %d: ", __LINE__); fprintf(stderr, __VA_ARGS__); } while (0)
-#define DEBUG_PRINT(...) fprintf(stderr, __VA_ARGS__)
+extern int tls_indent;
+extern int tls_indent_i;
+#define INDENT do { for (tls_indent_i=0; tls_indent_i < tls_indent; tls_indent_i++) { fprintf(stderr, " "); } } while (0)
-#define DEBUG_DUMP_HEX(buf, len) do {int _i_; for (_i_ = 0; _i_ < (int)len; _i_++) { DEBUG_PRINT("%02X ", (unsigned int)(buf)[_i_]); } } while (0)
+#define MARKP do { INDENT; fprintf(stderr, "%s %s:%d ", __FILE__, __func__, __LINE__); } while (0)
+#define MARK do { INDENT; fprintf(stderr, "%s %s:%d\n", __FILE__, __func__, __LINE__); } while (0)
+
+#define DEBUG_PRINTLN(...) do { MARKP; fprintf(stderr, __VA_ARGS__); } while (0)
+#define DEBUG_PRINTI(...) do { INDENT; fprintf(stderr, __VA_ARGS__); } while (0)
+#define DEBUG_PRINT(...) do { fprintf(stderr, __VA_ARGS__); } while (0)
+
+#define DEBUG_DUMP_HEX(buf, len) do {int _i_; for (_i_ = 0; _i_ < (int)len; _i_++) { DEBUG_PRINT("%02x ", (unsigned int)((unsigned char *)buf)[_i_]); } } while (0)
#define DEBUG_INDEX(fields) print_index(fields)
#define DEBUG_DUMP(buf, length) fwrite(buf, 1, length, stderr);
-#define DEBUG_DUMP_HEX_LABEL(title, buf, len) do {fprintf(stderr, "%s (%i): ", title, (int)len); DEBUG_DUMP_HEX(buf, len); fprintf(stderr, "\n");} while (0)
+#define DEBUG_DUMP_HEX_LABEL(title, buf, len) do {fprintf(stderr, "%s (%d): ", title, (int)len); DEBUG_DUMP_HEX(buf, len); fprintf(stderr, "\n");} while (0)
+
+#define ENTER do { MARKP; fprintf(stderr, "enter function\n"); tls_indent++; } while (0)
+#define LEAVE do { tls_indent--; MARKP; fprintf(stderr, "leave function\n");} while (0)
#else
#define DEBUG_PRINTLN(...)
#define DEBUG_PRINT(...) { }
#define DEBUG_INDEX(fields) { }
#define DEBUG_DUMP(buf, length) { }
#define DEBUG_DUMP_HEX_LABEL(title, buf, len) { }
+#define MARK
+#define ENTER
+#define LEAVE
#endif
#define TLS_WITH_CHACHA20_POLY1305
struct timespec sleep_until;
unsigned short tls13_version;
+
+#ifdef DEBUG
+ int level;
+ uint32_t debug_flags;
+#endif
};
typedef int (*tls_validation_function)(struct TLSContext *context, struct TLSCertificate **certificate_chain, int len);