Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (Revision 349449) +++ channels/chan_sip.c (Arbeitskopie) @@ -13600,14 +13600,14 @@ 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 > 0) { + /* dont poke peer immediately just schedule it pending to the qualifyfreq */ + AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched, + ast_random() % ((peer->qualifyfreq) ? peer->qualifyfreq : global_qualifyfreq) + 1, + sip_poke_peer_s, peer, unref_peer(_data, "removing poke peer ref"), unref_peer(peer, "removing poke peer ref"), 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, unref_peer(_data, "remove registration ref"), @@ -29286,16 +29286,18 @@ 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++; + if (peer->maxms > 0) { /* dont schedule poking on a peer without qualify */ + 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, + unref_peer(_data, "removing poke peer ref"), + unref_peer(peer, "removing poke peer ref"), + ref_peer(peer, "adding poke peer ref")); } - 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"), - ref_peer(peer, "adding poke peer ref")); ao2_unlock(peer); unref_peer(peer, "toss iterator peer ptr"); }