summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2023-10-13 12:19:40 +0100
committerMatt Caswell <matt@openssl.org>2023-10-25 09:40:48 +0100
commit1a91fda1839bc745e8359f82d19a5ef44ca36f7e (patch)
tree8b8d58e1b17341a65d5b7217e6ffe3fbb2748069
parent8c110311fd5e7f04e2c152b17d44acfd4a279ea6 (diff)
Make s_client -quic -debug work
The callback that makes -debug print the data sent/received needed extending for the new QUIC callback codes. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Hugo Landau <hlandau@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/22480)
-rw-r--r--apps/lib/s_cb.c54
-rw-r--r--crypto/bio/bio_lib.c12
2 files changed, 58 insertions, 8 deletions
diff --git a/apps/lib/s_cb.c b/apps/lib/s_cb.c
index dcfea55dc5..743d88993f 100644
--- a/apps/lib/s_cb.c
+++ b/apps/lib/s_cb.c
@@ -434,12 +434,15 @@ long bio_dump_callback(BIO *bio, int cmd, const char *argp, size_t len,
int argi, long argl, int ret, size_t *processed)
{
BIO *out;
+ BIO_MMSG_CB_ARGS *mmsgargs;
+ size_t i;
out = (BIO *)BIO_get_callback_arg(bio);
if (out == NULL)
return ret;
- if (cmd == (BIO_CB_READ | BIO_CB_RETURN)) {
+ switch (cmd) {
+ case (BIO_CB_READ | BIO_CB_RETURN):
if (ret > 0 && processed != NULL) {
BIO_printf(out, "read from %p [%p] (%zu bytes => %zu (0x%zX))\n",
(void *)bio, (void *)argp, len, *processed, *processed);
@@ -448,7 +451,9 @@ long bio_dump_callback(BIO *bio, int cmd, const char *argp, size_t len,
BIO_printf(out, "read from %p [%p] (%zu bytes => %d)\n",
(void *)bio, (void *)argp, len, ret);
}
- } else if (cmd == (BIO_CB_WRITE | BIO_CB_RETURN)) {
+ break;
+
+ case (BIO_CB_WRITE | BIO_CB_RETURN):
if (ret > 0 && processed != NULL) {
BIO_printf(out, "write to %p [%p] (%zu bytes => %zu (0x%zX))\n",
(void *)bio, (void *)argp, len, *processed, *processed);
@@ -457,6 +462,51 @@ long bio_dump_callback(BIO *bio, int cmd, const char *argp, size_t len,
BIO_printf(out, "write to %p [%p] (%zu bytes => %d)\n",
(void *)bio, (void *)argp, len, ret);
}
+ break;
+
+ case (BIO_CB_RECVMMSG | BIO_CB_RETURN):
+ mmsgargs = (BIO_MMSG_CB_ARGS *)argp;
+ if (ret > 0) {
+ for (i = 0; i < *(mmsgargs->msgs_processed); i++) {
+ BIO_MSG *msg = (BIO_MSG *)((char *)mmsgargs->msg
+ + (i * mmsgargs->stride));
+
+ BIO_printf(out, "read from %p [%p] (%zu bytes => %zu (0x%zX))\n",
+ (void *)bio, (void *)msg->data, msg->data_len,
+ msg->data_len, msg->data_len);
+ BIO_dump(out, msg->data, msg->data_len);
+ }
+ } else if (mmsgargs->num_msg > 0) {
+ BIO_MSG *msg = mmsgargs->msg;
+
+ BIO_printf(out, "read from %p [%p] (%zu bytes => %d)\n",
+ (void *)bio, (void *)msg->data, msg->data_len, ret);
+ }
+ break;
+
+ case (BIO_CB_SENDMMSG | BIO_CB_RETURN):
+ mmsgargs = (BIO_MMSG_CB_ARGS *)argp;
+ if (ret > 0) {
+ for (i = 0; i < *(mmsgargs->msgs_processed); i++) {
+ BIO_MSG *msg = (BIO_MSG *)((char *)mmsgargs->msg
+ + (i * mmsgargs->stride));
+
+ BIO_printf(out, "write to %p [%p] (%zu bytes => %zu (0x%zX))\n",
+ (void *)bio, (void *)msg->data, msg->data_len,
+ msg->data_len, msg->data_len);
+ BIO_dump(out, msg->data, msg->data_len);
+ }
+ } else if (mmsgargs->num_msg > 0) {
+ BIO_MSG *msg = mmsgargs->msg;
+
+ BIO_printf(out, "write to %p [%p] (%zu bytes => %d)\n",
+ (void *)bio, (void *)msg->data, msg->data_len, ret);
+ }
+ break;
+
+ default:
+ /* do nothing */
+ break;
}
return ret;
}
diff --git a/crypto/bio/bio_lib.c b/crypto/bio/bio_lib.c
index dc7f1b7b9e..e4f72bcd1b 100644
--- a/crypto/bio/bio_lib.c
+++ b/crypto/bio/bio_lib.c
@@ -418,8 +418,8 @@ int BIO_sendmmsg(BIO *b, BIO_MSG *msg,
args.msgs_processed = msgs_processed;
ret = (size_t)bio_call_callback(b, BIO_CB_SENDMMSG, (void *)&args,
- 0, 0, 0, 0, NULL);
- if (ret == 0)
+ 0, 0, 0, 1, NULL);
+ if (ret <= 0)
return 0;
}
@@ -433,7 +433,7 @@ int BIO_sendmmsg(BIO *b, BIO_MSG *msg,
if (HAS_CALLBACK(b))
ret = (size_t)bio_call_callback(b, BIO_CB_SENDMMSG | BIO_CB_RETURN,
- (void *)&args, ret, 0, 0, 0, NULL);
+ (void *)&args, ret, 0, 0, ret, NULL);
return ret;
}
@@ -465,8 +465,8 @@ int BIO_recvmmsg(BIO *b, BIO_MSG *msg,
args.msgs_processed = msgs_processed;
ret = bio_call_callback(b, BIO_CB_RECVMMSG, (void *)&args,
- 0, 0, 0, 0, NULL);
- if (ret == 0)
+ 0, 0, 0, 1, NULL);
+ if (ret <= 0)
return 0;
}
@@ -480,7 +480,7 @@ int BIO_recvmmsg(BIO *b, BIO_MSG *msg,
if (HAS_CALLBACK(b))
ret = (size_t)bio_call_callback(b, BIO_CB_RECVMMSG | BIO_CB_RETURN,
- (void *)&args, ret, 0, 0, 0, NULL);
+ (void *)&args, ret, 0, 0, ret, NULL);
return ret;
}