Add configuration options for finer control over how Asterisk handles having to poke all peers at seemingly the same time.

(closes issue #13217)
Reported by: cervajs


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@164809 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.2
Joshua Colp 17 years ago
parent 0859a4e30c
commit 92a4edc593

@ -30,6 +30,9 @@ SIP Changes
after T38 is negotiated. This option is disabled by default.
* If ATTENDED_TRANSFER_COMPLETE_SOUND is set, the sound will be played to the
target of an attended transfer
* Added two new configuration options, "pokegap" and "pokepeers", which allow
finer control over how many peers Asterisk will poke and the gap between them
when all peers need to be poked at the same time.
Skinny Changes
--------------

@ -491,6 +491,12 @@ static int max_expiry = DEFAULT_MAX_EXPIRY; /*!< Maximum accepted registr
static int default_expiry = DEFAULT_DEFAULT_EXPIRY;
static int mwi_expiry = DEFAULT_MWI_EXPIRY;
#define DEFAULT_POKE_GAP 100
#define DEFAULT_POKE_PEERS 1
static int global_poke_gap = DEFAULT_POKE_GAP; /*!< Time between our group of peer pokes */
static int global_poke_peers = DEFAULT_POKE_PEERS; /*!< Number of peers to poke at a given time */
#define CALLERID_UNKNOWN "Unknown"
#define DEFAULT_MAXMS 2000 /*!< Qualification: Must be faster than 2 seconds by default */
@ -22544,6 +22550,10 @@ static int reload_config(enum channelreloadreason reason)
global_min_se = DEFAULT_MIN_SE;
global_max_se = DEFAULT_MAX_SE;
/* Peer poking settings */
global_poke_gap = DEFAULT_POKE_GAP;
global_poke_peers = DEFAULT_POKE_PEERS;
/* Initialize some reasonable defaults at SIP reload (used both for channel and as default for devices */
ast_copy_string(default_context, DEFAULT_CONTEXT, sizeof(default_context));
default_subscribecontext[0] = '\0';
@ -23001,6 +23011,16 @@ static int reload_config(enum channelreloadreason reason)
} else {
global_st_refresher = i;
}
} else if (!strcasecmp(v->name, "pokegap")) {
if (sscanf(v->value, "%d", &global_poke_gap) != 1) {
ast_log(LOG_WARNING, "Invalid pokegap '%s' at line %d of %s\n", v->value, v->lineno, config);
global_poke_gap = DEFAULT_POKE_GAP;
}
} else if (!strcasecmp(v->name, "pokepeers")) {
if (sscanf(v->value, "%d", &global_poke_peers) != 1) {
ast_log(LOG_WARNING, "Invalid pokepeers '%s' at line %d of %s\n", v->value, v->lineno, config);
global_poke_peers = DEFAULT_POKE_PEERS;
}
}
}
@ -23675,13 +23695,10 @@ static int sip_get_codec(struct ast_channel *chan)
return p->jointcapability ? p->jointcapability : p->capability;
}
/*! \brief Send a poke to all known peers
Space them out 100 ms apart
XXX We might have a cool algorithm for this or use random - any suggestions?
*/
/*! \brief Send a poke to all known peers */
static void sip_poke_all_peers(void)
{
int ms = 0;
int ms = 0, num = 0;
struct ao2_iterator i;
struct sip_peer *peer;
@ -23692,7 +23709,12 @@ static void sip_poke_all_peers(void)
while ((peer = ao2_t_iterator_next(&i, "iterate thru peers table"))) {
ao2_lock(peer);
ms += 100;
if (num == global_poke_peers) {
ms += global_poke_gap;
num = 0;
} else {
num++;
}
AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, ms, sip_poke_peer_s, peer,
unref_peer(_data, "removing poke peer ref"),
unref_peer(peer, "removing poke peer ref"),

@ -148,6 +148,8 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; host to be up in seconds
; Set to low value if you use low timeout for
; NAT of UDP sessions
;pokegap=100 ; Number of milliseconds between each group of peers being poked
;pokepeers=1 ; Number of peers in a group to be poked at the same time
;notifymimetype=text/plain ; Allow overriding of mime type in MWI NOTIFY
;buggymwi=no ; Cisco SIP firmware doesn't support the MWI RFC
; fully. Enable this option to not get error messages

Loading…
Cancel
Save