From 942974c8df1a5ca9e05d646b59c73c8d9c10117e Mon Sep 17 00:00:00 2001 From: Automerge script Date: Wed, 6 Sep 2006 16:06:48 +0000 Subject: [PATCH] automerge commit git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42107 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_iax2.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index f57853ae0e..88dc655611 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -2740,18 +2740,16 @@ static struct iax2_user *realtime_user(const char *username) return user; } -static void realtime_update_peer(const char *peername, struct sockaddr_in *sin) +static void realtime_update_peer(const char *peername, struct sockaddr_in *sin, time_t regtime) { - char port[10]; - char ipaddr[20]; - char regseconds[20]; - time_t nowtime; + char port[10]; + char ipaddr[20]; + char regseconds[20]; - time(&nowtime); - snprintf(regseconds, sizeof(regseconds), "%d", (int)nowtime); - ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr); - snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port)); - ast_update_realtime("iaxpeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, NULL); + snprintf(regseconds, sizeof(regseconds), "%d", (int)regtime); + ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr); + snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port)); + ast_update_realtime("iaxpeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, NULL); } struct create_addr_info { @@ -5654,6 +5652,8 @@ static int expire_registry(void *data) struct iax2_peer *p = data; ast_log(LOG_DEBUG, "Expiring registration for peer '%s'\n", p->name); + if (ast_test_flag((&globalflags), IAX_RTUPDATE) && (ast_test_flag(p, IAX_TEMPONLY|IAX_RTCACHEFRIENDS))) + realtime_update_peer(p->name, &p->addr, 0); /* Reset the address */ memset(&p->addr, 0, sizeof(p->addr)); /* Reset expire notice */ @@ -5735,8 +5735,14 @@ static int update_registry(char *name, struct sockaddr_in *sin, int callno, char return -1; } - if (ast_test_flag((&globalflags), IAX_RTUPDATE) && (ast_test_flag(p, IAX_TEMPONLY|IAX_RTCACHEFRIENDS))) - realtime_update_peer(name, sin); + if (ast_test_flag((&globalflags), IAX_RTUPDATE) && (ast_test_flag(p, IAX_TEMPONLY|IAX_RTCACHEFRIENDS))) { + if (sin->sin_addr.s_addr) { + time_t nowtime; + time(&nowtime); + realtime_update_peer(name, sin, nowtime); + } else + realtime_update_peer(name, sin, 0); + } if (inaddrcmp(&p->addr, sin)) { if (iax2_regfunk) iax2_regfunk(p->name, 1);