Mercurial > dovecot > core-2.2
changeset 19274:5a64d5ea81e2
push-notification: Added timeout_msecs and max_retries parameters to OX driver.
For configuring HTTP lookups.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 02 Oct 2015 12:09:30 +0300 |
parents | 5e667cce0842 |
children | 67996a17e857 |
files | src/plugins/push-notification/push-notification-driver-ox.c |
diffstat | 1 files changed, 25 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/plugins/push-notification/push-notification-driver-ox.c Fri Oct 02 11:46:30 2015 +0300 +++ b/src/plugins/push-notification/push-notification-driver-ox.c Fri Oct 02 12:09:30 2015 +0300 @@ -26,7 +26,8 @@ static const char *const default_events[] = { "MessageNew", NULL }; static const char *const default_mboxes[] = { "INBOX", NULL }; #define DEFAULT_CACHE_LIFETIME 60 - +#define DEFAULT_TIMEOUT_MSECS 2000 +#define DEFAULT_RETRY_COUNT 1 /* This is data that is shared by all plugin users. */ struct push_notification_driver_ox_global { @@ -38,10 +39,13 @@ /* This is data specific to an OX driver. */ struct push_notification_driver_ox_config { struct http_url *http_url; + unsigned int cached_ox_metadata_lifetime; + bool use_unsafe_username; + unsigned int http_max_retries; + unsigned int http_timeout_msecs; + char *cached_ox_metadata; - unsigned int cached_ox_metadata_lifetime; time_t cached_ox_metadata_timestamp; - bool use_unsafe_username; }; /* This is data specific to an OX driver transaction. */ @@ -50,13 +54,18 @@ }; static void -push_notification_driver_ox_init_global(struct mail_user *user) +push_notification_driver_ox_init_global(struct mail_user *user, + struct push_notification_driver_ox_config *config) { struct http_client_settings http_set; if (ox_global->http_client == NULL) { + /* this is going to use the first user's settings, but these are + unlikely to change between users so it shouldn't matter much. */ memset(&http_set, 0, sizeof(http_set)); http_set.debug = user->mail_debug; + http_set.max_attempts = config->http_max_retries+1; + http_set.request_timeout_msecs = config->http_timeout_msecs; ox_global->http_client = http_client_init(&http_set); } @@ -96,6 +105,17 @@ dconfig->cached_ox_metadata_lifetime = DEFAULT_CACHE_LIFETIME; } + tmp = hash_table_lookup(config->config, (const char *)"max_retries"); + if ((tmp == NULL) || + (str_to_uint(tmp, &dconfig->http_max_retries) < 0)) { + dconfig->http_max_retries = DEFAULT_RETRY_COUNT; + } + tmp = hash_table_lookup(config->config, (const char *)"timeout_msecs"); + if ((tmp == NULL) || + (str_to_uint(tmp, &dconfig->http_timeout_msecs) < 0)) { + dconfig->http_timeout_msecs = DEFAULT_TIMEOUT_MSECS; + } + push_notification_driver_debug(OX_LOG_LABEL, user, "Using cache lifetime: %u", dconfig->cached_ox_metadata_lifetime); @@ -309,7 +329,7 @@ return; } - push_notification_driver_ox_init_global(user); + push_notification_driver_ox_init_global(user, dconfig); http_req = http_client_request_url(ox_global->http_client, "PUT", dconfig->http_url,