diff --git a/adsbus/common.c b/adsbus/common.c index 5449374..874e004 100644 --- a/adsbus/common.c +++ b/adsbus/common.c @@ -11,7 +11,6 @@ #include #include "common.h" -#include "rand.h" #include "uuid.h" #include "wakeup.h" @@ -229,16 +228,3 @@ void hex_from_int_upper(char *out, uint64_t in, size_t bytes) { void hex_from_int_lower(char *out, uint64_t in, size_t bytes) { hex_from_int(out, in, bytes, hex_lower_table); } - - -#define RETRY_MIN_MS 2000 -#define RETRY_MAX_MS 60000 -uint32_t retry_get_delay_ms(uint32_t attempt) { - uint32_t max_delay = RETRY_MIN_MS * (1 << attempt); - max_delay = max_delay > RETRY_MAX_MS ? RETRY_MAX_MS : max_delay; - - uint32_t jitter; - rand_fill(&jitter, sizeof(jitter)); - - return jitter % max_delay; -} diff --git a/adsbus/common.h b/adsbus/common.h index a0d0ea9..f99704c 100644 --- a/adsbus/common.h +++ b/adsbus/common.h @@ -87,10 +87,3 @@ void hex_from_bin_upper(char *, const uint8_t *, size_t); void hex_from_bin_lower(char *, const uint8_t *, size_t); void hex_from_int_upper(char *, uint64_t, size_t); void hex_from_int_lower(char *, uint64_t, size_t); - - -///////// retry timing - -void retry_init(); -void retry_cleanup(); -uint32_t retry_get_delay_ms(uint32_t); diff --git a/adsbus/incoming.c b/adsbus/incoming.c index 1d17681..08ca3ca 100644 --- a/adsbus/incoming.c +++ b/adsbus/incoming.c @@ -32,7 +32,7 @@ static struct incoming *incoming_head = NULL; static void incoming_resolve_wrapper(struct peer *); static void incoming_retry(struct incoming *incoming) { - uint32_t delay = retry_get_delay_ms(incoming->attempt++); + uint32_t delay = wakeup_get_retry_delay_ms(incoming->attempt++); fprintf(stderr, "I %s: Will retry in %ds\n", incoming->id, delay / 1000); incoming->peer.event_handler = incoming_resolve_wrapper; wakeup_add((struct peer *) incoming, delay); diff --git a/adsbus/outgoing.c b/adsbus/outgoing.c index 7b5aa82..1082026 100644 --- a/adsbus/outgoing.c +++ b/adsbus/outgoing.c @@ -34,7 +34,7 @@ static void outgoing_resolve(struct outgoing *); static void outgoing_resolve_wrapper(struct peer *); static void outgoing_retry(struct outgoing *outgoing) { - uint32_t delay = retry_get_delay_ms(outgoing->attempt++); + uint32_t delay = wakeup_get_retry_delay_ms(outgoing->attempt++); fprintf(stderr, "O %s: Will retry in %ds\n", outgoing->id, delay / 1000); outgoing->peer.event_handler = outgoing_resolve_wrapper; wakeup_add((struct peer *) outgoing, delay); diff --git a/adsbus/wakeup.c b/adsbus/wakeup.c index 116dbc5..d35f861 100644 --- a/adsbus/wakeup.c +++ b/adsbus/wakeup.c @@ -11,6 +11,7 @@ #include #include "common.h" +#include "rand.h" #include "wakeup.h" @@ -83,3 +84,15 @@ void wakeup_add(struct peer *peer, uint32_t delay_ms) { head = entry; } } + +#define RETRY_MIN_MS 2000 +#define RETRY_MAX_MS 60000 +uint32_t wakeup_get_retry_delay_ms(uint32_t attempt) { + uint32_t max_delay = RETRY_MIN_MS * (1 << attempt); + max_delay = max_delay > RETRY_MAX_MS ? RETRY_MAX_MS : max_delay; + + uint32_t jitter; + rand_fill(&jitter, sizeof(jitter)); + + return jitter % max_delay; +} diff --git a/adsbus/wakeup.h b/adsbus/wakeup.h index b09291f..66f4852 100644 --- a/adsbus/wakeup.h +++ b/adsbus/wakeup.h @@ -7,3 +7,4 @@ void wakeup_cleanup(); int wakeup_get_delay(); void wakeup_dispatch(); void wakeup_add(struct peer *, uint32_t); +uint32_t wakeup_get_retry_delay_ms(uint32_t);