diff options
author | Werner Koch <[email protected]> | 2017-06-08 06:23:06 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2017-06-08 07:37:36 +0000 |
commit | 5b9025cfa1f9b1c67ddf2f6bf87d863e780cf157 (patch) | |
tree | b0f389c2ff9dc0ea45e4bece3e41bef7a5fa397e /dirmngr/t-http.c | |
parent | gpg: Avoid failure exit when scdaemon is disabled but not needed. (diff) | |
download | gnupg-5b9025cfa1f9b1c67ddf2f6bf87d863e780cf157.tar.gz gnupg-5b9025cfa1f9b1c67ddf2f6bf87d863e780cf157.zip |
dirmngr: Allow a timeout for HTTP and other TCP connects.
* dirmngr/http.c: Include fcntl.h.
(http_session_s): Add field 'connect_timeout'.
(http_session_new): Clear that.
(http_session_set_timeout): New function.
(my_wsagetlasterror) [W32]: New.
(connect_with_timeout): New function.
(connect_server): Add arg 'timeout' and call connect_with_timeout.
(send_request): Add arg 'timeout' and pass it to connect_server.
(http_raw_connect): Add arg 'timeout'.
(http_open): Pass TIMEOUT from the session to connect_server.
--
Note that the non-blocking connect we implement is traditional a
pretty non-portable thing due to slighly different semantics. The
code uses the strategy W. Richard Stevens suggested in 1998.
Hopefully current OS versions got it all right.
The code has not been tested on Windows.
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | dirmngr/t-http.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/dirmngr/t-http.c b/dirmngr/t-http.c index a3a74dd36..b0f2bcf4e 100644 --- a/dirmngr/t-http.c +++ b/dirmngr/t-http.c @@ -203,6 +203,7 @@ main (int argc, char **argv) int no_crl = 0; const char *cafile = NULL; http_session_t session = NULL; + unsigned int timeout = 0; gpgrt_init (); log_set_prefix (PGM, GPGRT_LOG_WITH_PREFIX | GPGRT_LOG_WITH_PID); @@ -224,6 +225,7 @@ main (int argc, char **argv) " --debug flyswatter\n" " --tls-debug N use TLS debug level N\n" " --cacert FNAME expect CA certificate in file FNAME\n" + " --timeout MS timeout for connect in MS\n" " --no-verify do not verify the certificate\n" " --force-tls use HTTP_FLAG_FORCE_TLS\n" " --force-tor use HTTP_FLAG_FORCE_TOR\n" @@ -261,6 +263,15 @@ main (int argc, char **argv) argc--; argv++; } } + else if (!strcmp (*argv, "--timeout")) + { + argc--; argv++; + if (argc) + { + timeout = strtoul (*argv, NULL, 10); + argc--; argv++; + } + } else if (!strcmp (*argv, "--no-verify")) { no_verify = 1; @@ -407,6 +418,9 @@ main (int argc, char **argv) http_release_parsed_uri (uri); uri = NULL; + if (session) + http_session_set_timeout (session, timeout); + rc = http_open_document (&hd, *argv, NULL, my_http_flags, NULL, session, NULL, NULL); if (rc) |