aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2016-11-11 16:30:23 +0000
committerWerner Koch <[email protected]>2016-11-11 16:30:23 +0000
commit7b04a43c05834b937b32a596f1941e9728add5fa (patch)
tree14548d670d86ebaad319cfeaeff5e179bc5fd1ec
parentdoc: Include config examples for socket-activated user services. (diff)
downloadgnupg-7b04a43c05834b937b32a596f1941e9728add5fa.tar.gz
gnupg-7b04a43c05834b937b32a596f1941e9728add5fa.zip
dirmngr: Prepare to trigger jobs by network activity.
* dirmngr/http.c (netactivity_cb): New. (http_register_netactivity_cb): New. (notify_netactivity): New. (connect_server): Call that function. * dirmngr/dirmngr.c (main): Call http_register_netactivity_cb. (netactivity_action): New stub handler. Signed-off-by: Werner Koch <[email protected]>
-rw-r--r--dirmngr/dirmngr.c14
-rw-r--r--dirmngr/http.c29
-rw-r--r--dirmngr/http.h2
3 files changed, 44 insertions, 1 deletions
diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c
index 14189fea6..254c54341 100644
--- a/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -328,6 +328,7 @@ static void cleanup (void);
static ldap_server_t parse_ldapserver_file (const char* filename);
#endif /*USE_LDAP*/
static fingerprint_list_t parse_ocsp_signer (const char *string);
+static void netactivity_action (void);
static void handle_connections (assuan_fd_t listen_fd);
/* NPth wrapper function definitions. */
@@ -995,6 +996,7 @@ main (int argc, char **argv)
#if USE_LDAP
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ http_register_netactivity_cb (netactivity_action);
start_command_handler (ASSUAN_INVALID_FD);
shutdown_reaper ();
}
@@ -1032,6 +1034,7 @@ main (int argc, char **argv)
#if USE_LDAP
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ http_register_netactivity_cb (netactivity_action);
handle_connections (3);
assuan_sock_close (3);
shutdown_reaper ();
@@ -1232,6 +1235,7 @@ main (int argc, char **argv)
#if USE_LDAP
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ http_register_netactivity_cb (netactivity_action);
handle_connections (fd);
assuan_sock_close (fd);
shutdown_reaper ();
@@ -1702,6 +1706,16 @@ dirmngr_sighup_action (void)
}
+/* This function is called if some network activity was done. At this
+ * point we know the we have a network and we can decide whether to
+ * run scheduled background tasks soon. The function should return
+ * quickly and only trigger actions for another thread. */
+static void
+netactivity_action (void)
+{
+ log_debug ("network activity seen\n");
+}
+
/* The signal handler. */
#ifndef HAVE_W32_SYSTEM
diff --git a/dirmngr/http.c b/dirmngr/http.c
index 5f5775b2f..b74a9ef9a 100644
--- a/dirmngr/http.c
+++ b/dirmngr/http.c
@@ -261,6 +261,9 @@ static gpg_error_t (*tls_callback) (http_t, http_session_t, int);
/* The list of files with trusted CA certificates. */
static strlist_t tls_ca_certlist;
+/* The global callback for net activity. */
+static void (*netactivity_cb)(void);
+
#if defined(HAVE_W32_SYSTEM) && !defined(HTTP_NO_WSASTARTUP)
@@ -499,6 +502,25 @@ http_register_tls_ca (const char *fname)
}
+/* Register a callback which is called every time the HTTP mode has
+ * made a successful connection to some server. */
+void
+http_register_netactivity_cb (void (*cb)(void))
+{
+ netactivity_cb = cb;
+}
+
+
+/* Call the netactivity callback if any. */
+static void
+notify_netactivity (void)
+{
+ if (netactivity_cb)
+ netactivity_cb ();
+}
+
+
+
#ifdef USE_TLS
/* Free the TLS session associated with SESS, if any. */
static void
@@ -2279,6 +2301,8 @@ connect_server (const char *server, unsigned short port,
*r_host_not_found = 1;
log_error ("can't connect to '%s': %s\n", server, strerror (errno));
}
+ else
+ notify_netactivity ();
return sock;
#else /*!ASSUAN_SOCK_TOR*/
@@ -2371,7 +2395,10 @@ connect_server (const char *server, unsigned short port,
if (ret)
last_errno = errno;
else
- connected = 1;
+ {
+ connected = 1;
+ notify_netactivity ();
+ }
}
free_dns_addrinfo (aibuf);
}
diff --git a/dirmngr/http.h b/dirmngr/http.h
index 4a70caf4f..2a36fdaa8 100644
--- a/dirmngr/http.h
+++ b/dirmngr/http.h
@@ -98,6 +98,8 @@ typedef struct http_context_s *http_t;
void http_register_tls_callback (gpg_error_t (*cb)(http_t,http_session_t,int));
void http_register_tls_ca (const char *fname);
+void http_register_netactivity_cb (void (*cb)(void));
+
gpg_error_t http_session_new (http_session_t *r_session,
const char *tls_priority,