diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index ef8cae8b43..d185f1ad5f 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -8838,6 +8838,22 @@ static int update_registry(struct sockaddr_in *sin, int callno, char *devtype, i } } + /* treat an unspecified refresh interval as the minimum */ + if (!refresh) { + refresh = min_reg_expire; + } + if (refresh > max_reg_expire) { + ast_log(LOG_NOTICE, "Restricting registration for peer '%s' to %d seconds (requested %d)\n", + p->name, max_reg_expire, refresh); + p->expiry = max_reg_expire; + } else if (refresh < min_reg_expire) { + ast_log(LOG_NOTICE, "Restricting registration for peer '%s' to %d seconds (requested %d)\n", + p->name, min_reg_expire, refresh); + p->expiry = min_reg_expire; + } else { + p->expiry = refresh; + } + if (ast_sockaddr_cmp(&p->addr, &sockaddr)) { if (iax2_regfunk) { iax2_regfunk(p->name, 1); @@ -8890,20 +8906,7 @@ static int update_registry(struct sockaddr_in *sin, int callno, char *devtype, i peer_unref(p); } } - /* treat an unspecified refresh interval as the minimum */ - if (!refresh) - refresh = min_reg_expire; - if (refresh > max_reg_expire) { - ast_log(LOG_NOTICE, "Restricting registration for peer '%s' to %d seconds (requested %d)\n", - p->name, max_reg_expire, refresh); - p->expiry = max_reg_expire; - } else if (refresh < min_reg_expire) { - ast_log(LOG_NOTICE, "Restricting registration for peer '%s' to %d seconds (requested %d)\n", - p->name, min_reg_expire, refresh); - p->expiry = min_reg_expire; - } else { - p->expiry = refresh; - } + if (p->expiry && sin->sin_addr.s_addr) { p->expire = iax2_sched_add(sched, (p->expiry + 10) * 1000, expire_registry, peer_ref(p)); if (p->expire == -1)