mirror of
https://github.com/asterisk/asterisk.git
synced 2026-07-23 07:54:50 -07:00
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
This commit is contained in:
@@ -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
|
||||
--------------
|
||||
|
||||
+28
-6
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user