Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 172437) +++ channels/chan_sip.c (working copy) @@ -2657,10 +2657,12 @@ struct sip_peer *peer_ptr = peer; ASTOBJ_UNREF(peer_ptr, sip_destroy_peer); } - peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, ASTOBJ_REF(peer)); - if (peer->expire == -1) { - struct sip_peer *peer_ptr = peer; - ASTOBJ_UNREF(peer_ptr, sip_destroy_peer); + if (!ast_test_flag(&global_flags[1], SIP_PAGE2_IGNOREREGEXPIRE)) { + peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, ASTOBJ_REF(peer)); + if (peer->expire == -1) { + struct sip_peer *peer_ptr = peer; + ASTOBJ_UNREF(peer_ptr, sip_destroy_peer); + } } } ASTOBJ_CONTAINER_LINK(&peerl,peer); @@ -8137,10 +8139,12 @@ struct sip_peer *peer_ptr = peer; ASTOBJ_UNREF(peer_ptr, sip_destroy_peer); } - peer->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, ASTOBJ_REF(peer)); - if (peer->expire == -1) { - struct sip_peer *peer_ptr = peer; - ASTOBJ_UNREF(peer_ptr, sip_destroy_peer); + if (!ast_test_flag(&global_flags[1], SIP_PAGE2_IGNOREREGEXPIRE)) { + peer->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, ASTOBJ_REF(peer)); + if (peer->expire == -1) { + struct sip_peer *peer_ptr = peer; + ASTOBJ_UNREF(peer_ptr, sip_destroy_peer); + } } register_peer_exten(peer, TRUE); } @@ -8372,7 +8376,7 @@ expiry = max_expiry; if (expiry < min_expiry) expiry = min_expiry; - if (ast_test_flag(&peer->flags[0], SIP_REALTIME) && !ast_test_flag(&peer->flags[1], SIP_PAGE2_RTCACHEFRIENDS)) { + if (ast_test_flag(&peer->flags[0], SIP_REALTIME) && (!ast_test_flag(&peer->flags[1], SIP_PAGE2_RTCACHEFRIENDS) || ast_test_flag(&global_flags[1], SIP_PAGE2_IGNOREREGEXPIRE))) { peer->expire = -1; } else { peer->expire = ast_sched_add(sched, (expiry + 10) * 1000, expire_register, ASTOBJ_REF(peer));