Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 136783) +++ channels/chan_sip.c (working copy) @@ -2447,11 +2502,16 @@ } else { context = global_regcontext; } - if (onoff) - ast_add_extension(context, 1, ext, 1, NULL, NULL, "Noop", - ast_strdup(peer->name), ast_free, "SIP"); - else + if (onoff) { + if (!ast_exists_extension(NULL, context, ext, 1, NULL)) { + ast_add_extension(context, 1, ext, 1, NULL, NULL, "Noop", + ast_strdup(peer->name), ast_free, "SIP"); + if (option_verbose > 2) + ast_verbose(VERBOSE_PREFIX_3 "Registered SIP '%s' at %s port %d expires %d\n", peer->name, ast_inet_ntoa(peer->addr.sin_addr), ntohs(peer->addr.sin_port), expiry); + } + } else { ast_context_remove_extension(context, ext, 1, NULL); + } } } @@ -8249,13 +8308,8 @@ ast_db_put("SIP/Registry", peer->name, data); manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "Peer: SIP/%s\r\nPeerStatus: Registered\r\n", peer->name); - /* Is this a new IP address for us? */ - if (inaddrcmp(&peer->addr, &oldsin)) { - sip_poke_peer(peer); - if (option_verbose > 2) - ast_verbose(VERBOSE_PREFIX_3 "Registered SIP '%s' at %s port %d expires %d\n", peer->name, ast_inet_ntoa(peer->addr.sin_addr), ntohs(peer->addr.sin_port), expiry); - register_peer_exten(peer, 1); - } + sip_poke_peer(peer); + register_peer_exten(peer, 1); /* Save User agent */ useragent = get_header(req, "User-Agent");