diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2025-08-05 19:48:08 +0200 |
---|---|---|
committer | Sander Vrijders <sander@ouroboros.rocks> | 2025-08-06 10:34:44 +0200 |
commit | a5f6ab5af03d9be6f3412d4dff67748908799e21 (patch) | |
tree | a4e4f69813c2c91949a10d1d46c917ad25be8171 /src/irmd/oap.c | |
parent | 2c077312b4f6236288da7df1caeb6cbaf6f83afd (diff) | |
download | ouroboros-a5f6ab5af03d9be6f3412d4dff67748908799e21.tar.gz ouroboros-a5f6ab5af03d9be6f3412d4dff67748908799e21.zip |
irmd: Add build option to log OAP header info
This adds a DEBUG_PROTO_OAP option to show some information in the OAP
headers received by the IRMd during flow allocation.
Example for unencrypted flow (send):
OAP_HDR [528b7bf81df8e9bc @ 2025-08-05 17:05:29 (UTC) ] -->
Certificate: <none>
Ephemeral Public Key: <none>
Data: <none>
Signature: <none>
Example for encrypted flow (rcv):
OAP_HDR [4ff83072e0ed54b3 @ 2025-08-05 17:06:23 (UTC) ] <--
Certificate: <none>
Ephemeral Public Key [91 bytes]:
Data: <none>
Signature: <none>
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'src/irmd/oap.c')
-rw-r--r-- | src/irmd/oap.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/irmd/oap.c b/src/irmd/oap.c index d5e5b7cc..500da6f1 100644 --- a/src/irmd/oap.c +++ b/src/irmd/oap.c @@ -26,10 +26,16 @@ #define _POSIX_C_SOURCE 200809L #endif +#define OUROBOROS_PREFIX "irmd/oap" + #include <ouroboros/crypt.h> #include <ouroboros/endian.h> +#include <ouroboros/logs.h> +#include <ouroboros/rib.h> #include <ouroboros/time.h> +#include "config.h" + #include "oap.h" #include <assert.h> @@ -217,4 +223,66 @@ int oap_hdr_decode(buffer_t hdr, return -1; } +#ifdef DEBUG_PROTO_OAP +static void debug_oap_hdr(const struct oap_hdr * hdr) +{ + assert(hdr); + + if (hdr->crt.len > 0) + log_proto(" Certificate: [%zu bytes]", hdr->crt.len); + else + log_proto(" Certificate: <none>"); + + if (hdr->eph.len > 0) + log_proto(" Ephemeral Public Key: [%zu bytes]", hdr->eph.len); + else + log_proto(" Ephemeral Public Key: <none>"); + if (hdr->data.len > 0) + log_proto(" Data: [%zu bytes]", hdr->data.len); + else + log_proto(" Data: <none>"); + if (hdr->sig.len > 0) + log_proto(" Signature: [%zu bytes]", hdr->sig.len); + else + log_proto(" Signature: <none>"); +} + +void debug_oap_hdr_rcv(const struct oap_hdr * hdr) +{ + struct tm * tm; + char tmstr[RIB_TM_STRLEN]; + time_t stamp; + + assert(hdr); + + stamp = (time_t) hdr->timestamp / BILLION; + + tm = gmtime(&stamp); + strftime(tmstr, sizeof(tmstr), RIB_TM_FORMAT, tm); + + log_proto("OAP_HDR [" HASH_FMT64 " @ %s ] <--", + HASH_VAL64(hdr->id.data), tmstr); + + debug_oap_hdr(hdr); +} + +void debug_oap_hdr_snd(const struct oap_hdr * hdr) +{ + struct tm * tm; + char tmstr[RIB_TM_STRLEN]; + time_t stamp; + + assert(hdr); + + stamp = (time_t) hdr->timestamp / BILLION; + + tm = gmtime(&stamp); + strftime(tmstr, sizeof(tmstr), RIB_TM_FORMAT, tm); + + log_proto("OAP_HDR [" HASH_FMT64 " @ %s ] -->", + HASH_VAL64(hdr->id.data), tmstr); + + debug_oap_hdr(hdr); +} +#endif |