[PATCH] uclient-fetch: Support of --server-response [Draft/WIP/Help needed]

Sergey Ponomarev stokito at gmail.com
Mon May 9 13:57:47 PDT 2022


The -S is useful for debugging.
With --spider or --method=HEAD it allows check size before download by Content-Length header.

TODO currently the uclient-http must somehow to call a callback to print.

Signed-off-by: Sergey Ponomarev <stokito at gmail.com>
---
 uclient-fetch.c | 12 +++++++++++-
 uclient-http.c  |  3 +++
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/uclient-fetch.c b/uclient-fetch.c
index 282092e..f11ecd9 100644
--- a/uclient-fetch.c
+++ b/uclient-fetch.c
@@ -47,6 +47,7 @@ static const char *post_file;
 static struct ustream_ssl_ctx *ssl_ctx;
 static const struct ustream_ssl_ops *ssl_ops;
 static int quiet = false;
+static bool show_server_response = false;
 static bool verify = true;
 static bool proxy = true;
 static bool default_certs = false;
@@ -478,6 +479,7 @@ static int usage(const char *progname)
 		"	-O <file>			Redirect output to file (use \"-\" for stdout)\n"
 		"	-P <dir>			Set directory for output files\n"
 		"	--quiet | -q			Turn off status messages\n"
+		"	--server-response | -S			Show response headers\n"
 		"	--continue | -c			Continue a partially-downloaded file\n"
 		"	--user=<user>			HTTP authentication username\n"
 		"	--password=<password>		HTTP authentication password\n"
@@ -550,6 +552,7 @@ enum {
 	L_PROXY,
 	L_NO_PROXY,
 	L_QUIET,
+	L_SERVER_RESPONSE,
 };
 
 static const struct option longopts[] = {
@@ -567,6 +570,7 @@ static const struct option longopts[] = {
 	[L_PROXY] = { "proxy", required_argument, NULL, 0 },
 	[L_NO_PROXY] = { "no-proxy", no_argument, NULL, 0 },
 	[L_QUIET] = { "quiet", no_argument, NULL, 0 },
+	[L_SERVER_RESPONSE] = { "server-response", no_argument, NULL, 0 },
 	{}
 };
 
@@ -588,7 +592,7 @@ int main(int argc, char **argv)
 	signal(SIGPIPE, SIG_IGN);
 	init_ustream_ssl();
 
-	while ((ch = getopt_long(argc, argv, "46cO:P:qsT:U:Y:", longopts, &longopt_idx)) != -1) {
+	while ((ch = getopt_long(argc, argv, "46cO:P:qSsT:U:Y:", longopts, &longopt_idx)) != -1) {
 		switch(ch) {
 		case 0:
 			switch (longopt_idx) {
@@ -651,6 +655,9 @@ int main(int argc, char **argv)
 			case L_QUIET:
 				quiet = true;
 				break;
+			case L_SERVER_RESPONSE:
+				show_server_response = true;
+				break;
 			default:
 				return usage(progname);
 			}
@@ -683,6 +690,9 @@ int main(int argc, char **argv)
 		case 's':
 			no_output = true;
 			break;
+		case 'S':
+			show_server_response = true;
+			break;
 		case 'T':
 			timeout = atoi(optarg);
 			break;
diff --git a/uclient-http.c b/uclient-http.c
index c2bba6b..be67281 100644
--- a/uclient-http.c
+++ b/uclient-http.c
@@ -757,6 +757,9 @@ static void __uclient_notify_read(struct uclient_http *uh)
 
 			*sep = 0;
 			cur_len = next - data;
+//			if (show_server_response) {
+				fprintf(stderr, "  %s\n", data);
+//			}
 			uclient_parse_http_line(uh, data);
 			if (seq != uh->seq)
 				return;
-- 
2.34.1




More information about the openwrt-devel mailing list