<p>N A has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/18195">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">res_pjsip_outbound_registration: Make max random delay configurable.<br><br>Currently, PJSIP will randomly wait up to 10 seconds for each<br>outbound registration's initial attempt. The reason for this<br>is to avoid having all outbound registrations attempt to register<br>simultaneously.<br><br>This can create limitations with the test suite where we need to<br>be able to receive inbound calls potentially within 10 seconds of<br>starting up. This random behavior can cause inconsistent behavior<br>and cause tests to fail. Ultimately, this requires a smaller random<br>value because there may be no reason to wait for up to 10 seconds<br>in these circumstances.<br><br>To address this, a new config option is introduced which makes this<br>maximum delay configurable. This allows, for instance, this to be<br>set to a very small value in test systems to ensure that registrations<br>happen immediately without an unnecessary delay, and can be used more<br>generally to control how "tight" the initial outbound registrations<br>are.<br><br>ASTERISK-29965 #close<br><br>Change-Id: Iab989a8e94323e645f3a21cbb6082287c7b2f3fd<br>---<br>M configs/samples/pjsip.conf.sample<br>M res/res_pjsip_outbound_registration.c<br>2 files changed, 17 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/95/18195/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configs/samples/pjsip.conf.sample b/configs/samples/pjsip.conf.sample</span><br><span>index 8507b4e..af1297d 100644</span><br><span>--- a/configs/samples/pjsip.conf.sample</span><br><span>+++ b/configs/samples/pjsip.conf.sample</span><br><span>@@ -1342,6 +1342,7 @@</span><br><span> ; (default: "")</span><br><span> ;outbound_proxy= ; Proxy through which to send registrations, a full SIP URI</span><br><span> ; must be provided (default: "")</span><br><span style="color: hsl(120, 100%, 40%);">+;max_random_delay=10 ; Maximum random delay for initial registrations (default: 10)</span><br><span> ;retry_interval=60 ; Interval in seconds between retries if outbound</span><br><span> ; registration is unsuccessful (default: "60")</span><br><span> ;forbidden_retry_interval=0 ; Interval used when receiving a 403 Forbidden</span><br><span>diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c</span><br><span>index 3595124..c9593a1 100644</span><br><span>--- a/res/res_pjsip_outbound_registration.c</span><br><span>+++ b/res/res_pjsip_outbound_registration.c</span><br><span>@@ -109,6 +109,15 @@</span><br><span> <configOption name="outbound_proxy" default=""></span><br><span> <synopsis>Full SIP URI of the outbound proxy used to send registrations</synopsis></span><br><span> </configOption></span><br><span style="color: hsl(120, 100%, 40%);">+ <configOption name="max_random_delay" default="10"></span><br><span style="color: hsl(120, 100%, 40%);">+ <synopsis>Maximum interval in seconds that an initial registration may be delayed for</synopsis></span><br><span style="color: hsl(120, 100%, 40%);">+ <description></span><br><span style="color: hsl(120, 100%, 40%);">+ <para>By default, registrations are randomly delayed by a small amount to prevent</span><br><span style="color: hsl(120, 100%, 40%);">+ too many registrations from being made simultaneously.</para></span><br><span style="color: hsl(120, 100%, 40%);">+ <para>Depending on your system usage, it may be desirable to set this to a smaller</span><br><span style="color: hsl(120, 100%, 40%);">+ or larger value to have fine grained control over the size of this random delay.</para></span><br><span style="color: hsl(120, 100%, 40%);">+ </description></span><br><span style="color: hsl(120, 100%, 40%);">+ </configOption></span><br><span> <configOption name="retry_interval" default="60"></span><br><span> <synopsis>Interval in seconds between retries if outbound registration is unsuccessful</synopsis></span><br><span> </configOption></span><br><span>@@ -319,6 +328,8 @@</span><br><span> );</span><br><span> /*! \brief Requested expiration time */</span><br><span> unsigned int expiration;</span><br><span style="color: hsl(120, 100%, 40%);">+ /*! \brief Maximum random delay interval for initial registrations */</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int max_random_delay;</span><br><span> /*! \brief Interval at which retries should occur for temporal responses */</span><br><span> unsigned int retry_interval;</span><br><span> /*! \brief Interval at which retries should occur for permanent responses */</span><br><span>@@ -1708,6 +1719,7 @@</span><br><span> struct sip_outbound_registration_state *state = data;</span><br><span> struct sip_outbound_registration *registration = ao2_bump(state->registration);</span><br><span> size_t i;</span><br><span style="color: hsl(120, 100%, 40%);">+ int max_delay;</span><br><span> </span><br><span> /* Just in case the client state is being reused for this registration, free the auth information */</span><br><span> ast_sip_auth_vector_destroy(&state->client_state->outbound_auths);</span><br><span>@@ -1728,10 +1740,12 @@</span><br><span> state->client_state->support_path = registration->support_path;</span><br><span> state->client_state->support_outbound = registration->support_outbound;</span><br><span> state->client_state->auth_rejection_permanent = registration->auth_rejection_permanent;</span><br><span style="color: hsl(120, 100%, 40%);">+ max_delay = registration->max_random_delay;</span><br><span> </span><br><span> pjsip_regc_update_expires(state->client_state->client, registration->expiration);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- schedule_registration(state->client_state, (ast_random() % 10) + 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* n mod 0 is undefined, so don't let that happen */</span><br><span style="color: hsl(120, 100%, 40%);">+ schedule_registration(state->client_state, (max_delay ? ast_random() % max_delay : 0) + 1);</span><br><span> </span><br><span> ao2_ref(registration, -1);</span><br><span> ao2_ref(state, -1);</span><br><span>@@ -2540,6 +2554,7 @@</span><br><span> ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "transport", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct sip_outbound_registration, transport));</span><br><span> ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "outbound_proxy", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct sip_outbound_registration, outbound_proxy));</span><br><span> ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "expiration", "3600", OPT_UINT_T, 0, FLDSET(struct sip_outbound_registration, expiration));</span><br><span style="color: hsl(120, 100%, 40%);">+ ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "max_random_delay", "10", OPT_UINT_T, 0, FLDSET(struct sip_outbound_registration, max_random_delay));</span><br><span> ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "retry_interval", "60", OPT_UINT_T, 0, FLDSET(struct sip_outbound_registration, retry_interval));</span><br><span> ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "forbidden_retry_interval", "0", OPT_UINT_T, 0, FLDSET(struct sip_outbound_registration, forbidden_retry_interval));</span><br><span> ast_sorcery_object_field_register(ast_sip_get_sorcery(), "registration", "fatal_retry_interval", "0", OPT_UINT_T, 0, FLDSET(struct sip_outbound_registration, fatal_retry_interval));</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/18195">change 18195</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/18195"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Iab989a8e94323e645f3a21cbb6082287c7b2f3fd </div>
<div style="display:none"> Gerrit-Change-Number: 18195 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: N A <mail@interlinked.x10host.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>