diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 367aeee8e5b3abfc2c5d4ead145e924b014b8ec8..8773ae8e7f391e4a333a395e9eedd5016b56a376 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -15041,14 +15041,14 @@ static void reg_source_db(struct sip_peer *peer) peer->name, peer->username, ast_sockaddr_stringify_host(&sa), expire); ast_sockaddr_copy(&peer->addr, &sa); - if (sipsock < 0) { - /* SIP isn't up yet, so schedule a poke only, pretty soon */ - AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, ast_random() % 5000 + 1, sip_poke_peer_s, peer, + if (peer->maxms) { + /* Don't poke peer immediately, just schedule it within qualifyfreq */ + AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, + ast_random() % ((peer->qualifyfreq) ? peer->qualifyfreq : global_qualifyfreq) + 1, + sip_poke_peer_s, peer, sip_unref_peer(_data, "removing poke peer ref"), sip_unref_peer(peer, "removing poke peer ref"), sip_ref_peer(peer, "adding poke peer ref")); - } else { - sip_poke_peer(peer, 0); } AST_SCHED_REPLACE_UNREF(peer->expire, sched, (expire + 10) * 1000, expire_register, peer, sip_unref_peer(_data, "remove registration ref"), @@ -31886,16 +31886,19 @@ static void sip_poke_all_peers(void) i = ao2_iterator_init(peers, 0); while ((peer = ao2_t_iterator_next(&i, "iterate thru peers table"))) { ao2_lock(peer); - if (num == global_qualify_peers) { - ms += global_qualify_gap; - num = 0; - } else { - num++; + /* Don't schedule poking on a peer without qualify */ + if (peer->maxms) { + if (num == global_qualify_peers) { + ms += global_qualify_gap; + num = 0; + } else { + num++; + } + AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, ms, sip_poke_peer_s, peer, + sip_unref_peer(_data, "removing poke peer ref"), + sip_unref_peer(peer, "removing poke peer ref"), + sip_ref_peer(peer, "adding poke peer ref")); } - AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, ms, sip_poke_peer_s, peer, - sip_unref_peer(_data, "removing poke peer ref"), - sip_unref_peer(peer, "removing poke peer ref"), - sip_ref_peer(peer, "adding poke peer ref")); ao2_unlock(peer); sip_unref_peer(peer, "toss iterator peer ptr"); }