From 6fd4756e8a88ec52bb2a5011cb74c64417839377 Mon Sep 17 00:00:00 2001 From: Terry Wilson Date: Tue, 7 Feb 2012 21:17:10 +0000 Subject: [PATCH] Fix multiple SIP realtime issues 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@354349 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 6 +++--- contrib/realtime/postgresql/realtime.sql | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index c0e0bc05ea..d1eeea1447 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -4547,8 +4547,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; @@ -14047,7 +14047,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); diff --git a/contrib/realtime/postgresql/realtime.sql b/contrib/realtime/postgresql/realtime.sql index 74b895738f..f14cd79339 100644 --- a/contrib/realtime/postgresql/realtime.sql +++ b/contrib/realtime/postgresql/realtime.sql @@ -65,10 +65,14 @@ disallow character varying(100) DEFAULT 'all', allow character varying(100) DEFAULT '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; -- 2.47.2