mirror of
git://git.gnupg.org/gnupg.git
synced 2025-02-01 16:33:02 +01:00
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 <wk@gnupg.org>
This commit is contained in:
parent
57e95f5413
commit
7b04a43c05
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user