Skip to content

Commit

Permalink
Randomize consent check interval (follow rfc7675). (#270)
Browse files Browse the repository at this point in the history
* Randomize consent check interval (follow rfc7675).
  • Loading branch information
bgrozev authored Aug 23, 2023
1 parent a947919 commit 9fe2d69
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
14 changes: 13 additions & 1 deletion src/main/java/org/ice4j/ice/Agent.java
Original file line number Diff line number Diff line change
Expand Up @@ -2656,7 +2656,19 @@ protected Duration getDelayUntilNextRun()
{
if (shouldRunStunKeepAlive())
{
return Duration.ofMillis(keepAliveSent == 0 ? 0 : consentFreshnessInterval);
if (keepAliveSent == 0)
{
return Duration.ZERO;
}
else
{
double r = 1;
if (config.getRandomizeConsentFreshnessInterval())
{
r = 0.8d + ThreadLocalRandom.current().nextDouble() * 0.4;
}
return Duration.ofMillis((long) (consentFreshnessInterval * r));
}
}
return Duration.ofMillis(-1);
}
Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/org/ice4j/ice/AgentConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ class AgentConfig {
"ice4j.consent-freshness.interval".from(configSource)
}

val randomizeConsentFreshnessInterval: Boolean by config {
"ice4j.consent-freshness.randomize".from(configSource)
}

val consentFreshnessOriginalWaitInterval: Duration by config {
"org.ice4j.ice.CONSENT_FRESHNESS_WAIT_INTERVAL".from(configSource)
.convertFrom<Long> { Duration.ofMillis(it) }
Expand Down
3 changes: 3 additions & 0 deletions src/main/resources/reference.conf
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ ice4j {
// The maximum number of retransmissions of a STUN Binding request without a valid STUN Binding response after which
// consent freshness is to be considered unconfirmed according to `STUN Usage for Consent Freshness` (RFC7675).
max-retransmissions = 30
// Whether to randomize the period between any two checks between 0.8 and 1.2 of the configured interval as
// recommended in RFC7675 Section 5.1. We keep this configurable in case the previous behavior is desired.
randomize-interval = true
}

// Configuration related to harvesting (aka gathering) of local candidates.
Expand Down

0 comments on commit 9fe2d69

Please sign in to comment.