]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
automerge commit
authorAutomerge script <automerge@asterisk.org>
Wed, 6 Sep 2006 16:06:48 +0000 (16:06 +0000)
committerAutomerge script <automerge@asterisk.org>
Wed, 6 Sep 2006 16:06:48 +0000 (16:06 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2-netsec@42107 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c

index f57853ae0ef8406602f10b48af983e73c901039f..88dc6556115ddbf761ce63d7b70098aa907e4361 100644 (file)
@@ -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);