--resolve FS-5432
This commit is contained in:
parent
fe27589af7
commit
bf89fbd81d
|
@ -311,6 +311,10 @@
|
||||||
|
|
||||||
<!--force suscription expires to a lower value than requested-->
|
<!--force suscription expires to a lower value than requested-->
|
||||||
<!--<param name="force-subscription-expires" value="60"/>-->
|
<!--<param name="force-subscription-expires" value="60"/>-->
|
||||||
|
|
||||||
|
<!-- add a random deviation to the expires value of the 202 Accepted -->
|
||||||
|
<!--<param name="sip-subscription-max-deviation" value="120"/>-->
|
||||||
|
|
||||||
<!-- disable register and transfer which may be undesirable in a public switch -->
|
<!-- disable register and transfer which may be undesirable in a public switch -->
|
||||||
<!--<param name="disable-transfer" value="true"/>-->
|
<!--<param name="disable-transfer" value="true"/>-->
|
||||||
<!--<param name="disable-register" value="true"/>-->
|
<!--<param name="disable-register" value="true"/>-->
|
||||||
|
|
|
@ -353,6 +353,10 @@
|
||||||
|
|
||||||
<!-- force suscription expires to a lower value than requested -->
|
<!-- force suscription expires to a lower value than requested -->
|
||||||
<!-- <param name="force-subscription-expires" value="60"/> -->
|
<!-- <param name="force-subscription-expires" value="60"/> -->
|
||||||
|
|
||||||
|
<!-- add a random deviation to the expires value of the 202 Accepted -->
|
||||||
|
<!--<param name="sip-subscription-max-deviation" value="120"/>-->
|
||||||
|
|
||||||
<!-- disable register and transfer which may be undesirable in a public
|
<!-- disable register and transfer which may be undesirable in a public
|
||||||
switch -->
|
switch -->
|
||||||
<!-- <param name="disable-transfer" value="true"/> -->
|
<!-- <param name="disable-transfer" value="true"/> -->
|
||||||
|
|
|
@ -672,6 +672,7 @@ struct sofia_profile {
|
||||||
su_strlst_t *tls_verify_in_subjects;
|
su_strlst_t *tls_verify_in_subjects;
|
||||||
uint32_t sip_force_expires;
|
uint32_t sip_force_expires;
|
||||||
uint32_t sip_expires_max_deviation;
|
uint32_t sip_expires_max_deviation;
|
||||||
|
uint32_t sip_subscription_max_deviation;
|
||||||
int ireg_seconds;
|
int ireg_seconds;
|
||||||
sofia_paid_type_t paid_type;
|
sofia_paid_type_t paid_type;
|
||||||
uint32_t rtp_digit_delay;
|
uint32_t rtp_digit_delay;
|
||||||
|
|
|
@ -3685,6 +3685,7 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
||||||
profile->rtp_digit_delay = 40;
|
profile->rtp_digit_delay = 40;
|
||||||
profile->sip_force_expires = 0;
|
profile->sip_force_expires = 0;
|
||||||
profile->sip_expires_max_deviation = 0;
|
profile->sip_expires_max_deviation = 0;
|
||||||
|
profile->sip_subscription_max_deviation = 0;
|
||||||
profile->tls_version = 0;
|
profile->tls_version = 0;
|
||||||
profile->tls_timeout = 300;
|
profile->tls_timeout = 300;
|
||||||
profile->mflags = MFLAG_REFER | MFLAG_REGISTER;
|
profile->mflags = MFLAG_REFER | MFLAG_REGISTER;
|
||||||
|
@ -4635,6 +4636,13 @@ switch_status_t config_sofia(sofia_config_t reload, char *profile_name)
|
||||||
} else {
|
} else {
|
||||||
profile->sip_expires_max_deviation = 0;
|
profile->sip_expires_max_deviation = 0;
|
||||||
}
|
}
|
||||||
|
} else if (!strcasecmp(var, "sip-subscription-max-deviation")) {
|
||||||
|
int32_t sip_subscription_max_deviation = atoi(val);
|
||||||
|
if (sip_subscription_max_deviation >= 0) {
|
||||||
|
profile->sip_subscription_max_deviation = sip_subscription_max_deviation;
|
||||||
|
} else {
|
||||||
|
profile->sip_subscription_max_deviation = 0;
|
||||||
|
}
|
||||||
} else if (!strcasecmp(var, "reuse-connections")) {
|
} else if (!strcasecmp(var, "reuse-connections")) {
|
||||||
switch_bool_t value = switch_true(val);
|
switch_bool_t value = switch_true(val);
|
||||||
if (!value) {
|
if (!value) {
|
||||||
|
|
|
@ -3516,6 +3516,7 @@ void sofia_presence_handle_sip_i_subscribe(int status,
|
||||||
|
|
||||||
long exp_delta = 0;
|
long exp_delta = 0;
|
||||||
char exp_delta_str[30] = "";
|
char exp_delta_str[30] = "";
|
||||||
|
uint32_t sub_max_deviation_var = 0;
|
||||||
sip_to_t const *to;
|
sip_to_t const *to;
|
||||||
const char *from_user = NULL, *from_host = NULL;
|
const char *from_user = NULL, *from_host = NULL;
|
||||||
const char *to_user = NULL, *to_host = NULL;
|
const char *to_user = NULL, *to_host = NULL;
|
||||||
|
@ -3615,6 +3616,18 @@ void sofia_presence_handle_sip_i_subscribe(int status,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((sub_max_deviation_var = profile->sip_subscription_max_deviation)) {
|
||||||
|
if (sub_max_deviation_var > 0) {
|
||||||
|
int sub_deviation;
|
||||||
|
srand( (unsigned) ( (unsigned)(intptr_t)switch_thread_self() + switch_micro_time_now() ) );
|
||||||
|
/* random negative number between 0 and negative sub_max_deviation_var: */
|
||||||
|
sub_deviation = ( rand() % sub_max_deviation_var ) - sub_max_deviation_var;
|
||||||
|
if ( (exp_delta + sub_deviation) > 45 ) {
|
||||||
|
exp_delta += sub_deviation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mod_sofia_globals.debug_presence > 0 || mod_sofia_globals.debug_sla > 0) {
|
if (mod_sofia_globals.debug_presence > 0 || mod_sofia_globals.debug_sla > 0) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DELTA %ld\n", exp_delta);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "DELTA %ld\n", exp_delta);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue