]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix multiple SIP realtime issues
authorTerry Wilson <twilson@digium.com>
Tue, 7 Feb 2012 21:33:42 +0000 (21:33 +0000)
committerTerry Wilson <twilson@digium.com>
Tue, 7 Feb 2012 21:33:42 +0000 (21:33 +0000)
1. Set lastms to 0 when clearing instead of ""
2. Don't set ipaddr or port to the string "(null)" when they are empty
3. Add missing required fields, set default for lastms to 0, and modify
   the length of the ipaddr field to 45 in the Postgresql realtime.sql
   file.

(closes issue ASTERISK-19172)
Review: https://reviewboard.asterisk.org/r/1703/
........

Merged revisions 354348 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 354349 from http://svn.asterisk.org/svn/asterisk/branches/10

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@354360 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c
contrib/realtime/postgresql/realtime.sql

index adc6a3bc8853299b5c90fdb28c4945b8eacc6fb8..73a1dedc439662f864a8c49bfc1eb1670d773636 100644 (file)
@@ -4550,8 +4550,8 @@ static void realtime_update_peer(const char *peername, struct ast_sockaddr *addr
 
        snprintf(str_lastms, sizeof(str_lastms), "%d", lastms);
        snprintf(regseconds, sizeof(regseconds), "%d", (int)nowtime);   /* Expiration time */
-       ast_copy_string(ipaddr, ast_sockaddr_stringify_addr(addr), sizeof(ipaddr));
-       ast_copy_string(port, ast_sockaddr_stringify_port(addr), sizeof(port));
+       ast_copy_string(ipaddr, ast_sockaddr_isnull(addr) ? "" : ast_sockaddr_stringify_addr(addr), sizeof(ipaddr));
+       ast_copy_string(port, ast_sockaddr_port(addr) ? ast_sockaddr_stringify_port(addr) : "", sizeof(port));
 
        if (ast_strlen_zero(sysname))   /* No system name, disable this */
                sysname = NULL;
@@ -14081,7 +14081,7 @@ static void destroy_association(struct sip_peer *peer)
 
        if (!sip_cfg.ignore_regexpire) {
                if (peer->rt_fromcontact && sip_cfg.peer_rtupdate) {
-                       ast_update_realtime(tablename, "name", peer->name, "fullcontact", "", "ipaddr", "", "port", "", "regseconds", "0", "regserver", "", "useragent", "", "lastms", "", SENTINEL);
+                       ast_update_realtime(tablename, "name", peer->name, "fullcontact", "", "ipaddr", "", "port", "", "regseconds", "0", "regserver", "", "useragent", "", "lastms", "0", SENTINEL);
                } else {
                        ast_db_del("SIP/Registry", peer->name);
                        ast_db_del("SIP/PeerMethods", peer->name);
index fb474ebbe2285f35722f4c1a4bee77cba25102fb..d6619061e9c7cee7245619f17964e7c045ee6383 100644 (file)
@@ -64,10 +64,14 @@ username character varying(80) DEFAULT '' NOT NULL,
 allow character varying(200) DEFAULT '!all,g729,ilbc,gsm,ulaw,alaw',
 musiconhold character varying(100),
 regseconds bigint DEFAULT 0::bigint NOT NULL,
-ipaddr character varying(40) DEFAULT '' NOT NULL,
+ipaddr character varying(45) DEFAULT '' NOT NULL,
 regexten character varying(80) DEFAULT '' NOT NULL,
 cancallforward character varying(3) DEFAULT 'yes',
-lastms integer DEFAULT -1 NOT NULL
+lastms integer DEFAULT 0 NOT NULL,
+defaultuser character varying(80),
+fullcontact character varying(80),
+regserver character varying(30),
+useragent character varying(40)
 );
 
 drop table voicemail_users;