6a6cb92d31
resolves: rhbz#2228131 Rebase to 1.34.2 resolves: rhbz#2168629
121 lines
3.9 KiB
Diff
121 lines
3.9 KiB
Diff
From 07bdd644ae082c8e05afdcda4dcd12816ecc0efc Mon Sep 17 00:00:00 2001
|
|
From: "Richard W.M. Jones" <rjones@redhat.com>
|
|
Date: Mon, 31 Jul 2023 13:24:39 +0100
|
|
Subject: [PATCH] curl: Add -D curl.verbose.ids=1 to display conn and xfer IDs
|
|
|
|
Enhance debugging output with connection (conn) and transfer (xfer)
|
|
IDs. Since there is some overhead to doing this, don't do it by
|
|
default. Also it requires libcurl >= 8.2.0.
|
|
|
|
(cherry picked from commit a3ebf8f1c2cd5d399730ad6887b6b8bed94dc0ce)
|
|
---
|
|
plugins/curl/config.c | 37 +++++++++++++++++++++++++----
|
|
plugins/curl/curldefs.h | 4 ++++
|
|
plugins/curl/nbdkit-curl-plugin.pod | 6 +++++
|
|
3 files changed, 43 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/plugins/curl/config.c b/plugins/curl/config.c
|
|
index 742d6080..d68c92ba 100644
|
|
--- a/plugins/curl/config.c
|
|
+++ b/plugins/curl/config.c
|
|
@@ -99,6 +99,9 @@ static size_t error_cb (char *ptr, size_t size, size_t nmemb, void *opaque);
|
|
/* Use '-D curl.verbose=1' to set. */
|
|
NBDKIT_DLL_PUBLIC int curl_debug_verbose = 0;
|
|
|
|
+/* Use '-D curl.verbose.ids=1' to set. */
|
|
+NBDKIT_DLL_PUBLIC int curl_debug_verbose_ids = 0;
|
|
+
|
|
void
|
|
unload_config (void)
|
|
{
|
|
@@ -707,6 +710,14 @@ debug_cb (CURL *handle, curl_infotype type,
|
|
{
|
|
size_t origsize = size;
|
|
CLEANUP_FREE char *str;
|
|
+ curl_off_t conn_id = -1, xfer_id = -1;
|
|
+
|
|
+#if defined(HAVE_CURLINFO_CONN_ID) && defined(HAVE_CURLINFO_XFER_ID)
|
|
+ if (curl_debug_verbose_ids) {
|
|
+ curl_easy_getinfo (handle, CURLINFO_CONN_ID, &conn_id);
|
|
+ curl_easy_getinfo (handle, CURLINFO_XFER_ID, &xfer_id);
|
|
+ }
|
|
+#endif
|
|
|
|
/* The data parameter passed is NOT \0-terminated, but also it may
|
|
* have \n or \r\n line endings. The only sane way to deal with
|
|
@@ -726,17 +737,35 @@ debug_cb (CURL *handle, curl_infotype type,
|
|
|
|
switch (type) {
|
|
case CURLINFO_TEXT:
|
|
- nbdkit_debug ("%s", str);
|
|
+ if (conn_id >= 0 && xfer_id >= 0)
|
|
+ nbdkit_debug ("conn %" PRIi64 " xfer %" PRIi64 ": %s",
|
|
+ conn_id, xfer_id, str);
|
|
+ else
|
|
+ nbdkit_debug ("%s",str);
|
|
break;
|
|
case CURLINFO_HEADER_IN:
|
|
- nbdkit_debug ("S: %s", str);
|
|
+ if (conn_id >= 0 && xfer_id >= 0)
|
|
+ nbdkit_debug ("conn %" PRIi64 " xfer %" PRIi64 ": S: %s",
|
|
+ conn_id, xfer_id, str);
|
|
+ else
|
|
+ nbdkit_debug ("S: %s", str);
|
|
break;
|
|
case CURLINFO_HEADER_OUT:
|
|
- nbdkit_debug ("C: %s", str);
|
|
+ if (conn_id >= 0 && xfer_id >= 0)
|
|
+ nbdkit_debug ("conn %" PRIi64 " xfer %" PRIi64 ": C: %s",
|
|
+ conn_id, xfer_id, str);
|
|
+ else
|
|
+ nbdkit_debug ("C: %s", str);
|
|
break;
|
|
default:
|
|
/* Assume everything else is binary data that we cannot print. */
|
|
- nbdkit_debug ("<data with size=%zu>", origsize);
|
|
+ if (conn_id >= 0 && xfer_id >= 0)
|
|
+ nbdkit_debug ("conn %" PRIi64 " xfer %" PRIi64 ": "
|
|
+ "<data with size=%zu>",
|
|
+ conn_id, xfer_id,
|
|
+ origsize);
|
|
+ else
|
|
+ nbdkit_debug ("<data with size=%zu>", origsize);
|
|
}
|
|
|
|
out:
|
|
diff --git a/plugins/curl/curldefs.h b/plugins/curl/curldefs.h
|
|
index 1feba844..022e8c60 100644
|
|
--- a/plugins/curl/curldefs.h
|
|
+++ b/plugins/curl/curldefs.h
|
|
@@ -62,6 +62,10 @@
|
|
#define HAVE_CURLINFO_TOTAL_TIME_T
|
|
#define HAVE_CURLINFO_REDIRECT_TIME_T
|
|
#endif
|
|
+#if CURL_AT_LEAST_VERSION (8, 2, 0)
|
|
+#define HAVE_CURLINFO_CONN_ID
|
|
+#define HAVE_CURLINFO_XFER_ID
|
|
+#endif
|
|
#endif
|
|
|
|
extern const char *url;
|
|
diff --git a/plugins/curl/nbdkit-curl-plugin.pod b/plugins/curl/nbdkit-curl-plugin.pod
|
|
index 0774adad..7784b553 100644
|
|
--- a/plugins/curl/nbdkit-curl-plugin.pod
|
|
+++ b/plugins/curl/nbdkit-curl-plugin.pod
|
|
@@ -570,6 +570,12 @@ This enables very verbose curl debugging. See L<CURLOPT_VERBOSE(3)>.
|
|
This is mainly useful if you suspect there is a bug inside libcurl
|
|
itself.
|
|
|
|
+=item B<-D curl.verbose.ids=1>
|
|
+
|
|
+This enhances C<-D curl.verbose=1> by printing connection and transfer
|
|
+IDs next to each debug message. As this has some overhead it is not
|
|
+enabled by default.
|
|
+
|
|
=back
|
|
|
|
=head1 FILES
|
|
--
|
|
2.39.3
|
|
|