Add rtsavesysname to chan_iax
authorDavid Vossel <dvossel@digium.com>
Wed, 17 Jun 2009 21:56:42 +0000 (21:56 +0000)
committerDavid Vossel <dvossel@digium.com>
Wed, 17 Jun 2009 21:56:42 +0000 (21:56 +0000)
chan_sip has an option to save the sysname on rtupdate.  This patch copies that same logic to chan_iax.

(closes issue #14837)
Reported by: barthpbx
Patches:
      iax2-rtsavesysname.patch uploaded by barthpbx (license 744)
      rt_iax.diff uploaded by dvossel (license 671)

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

CHANGES
channels/chan_iax2.c
configs/iax.conf.sample

diff --git a/CHANGES b/CHANGES
index 087a7a9..64f6fba 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -34,6 +34,11 @@ SIP Changes
    but will generate a warning in the log indicating that the SIP peer that sent
    the SDP should have the 'ignoresdpversion' option set.
 
+IAX2 Changes
+-----------
+ * Added rtsavesysname option into iax.conf to allow the systname to be saved
+   on realtime updates.
+
 Applications
 ------------
  * Added progress option to the app_dial D() option.  When progress DTMF is
index 4e0cc1e..a5c6b41 100644 (file)
@@ -398,7 +398,7 @@ struct iax2_context {
 #define IAX_USEJITTERBUF        (uint64_t)(1 << 5)    /*!< Use jitter buffer */
 #define IAX_DYNAMIC             (uint64_t)(1 << 6)    /*!< dynamic peer */
 #define IAX_SENDANI             (uint64_t)(1 << 7)    /*!< Send ANI along with CallerID */
-        /* (1 << 8) is currently unused due to the deprecation of an old option. Go ahead, take it! */
+#define IAX_RTSAVE_SYSNAME      (uint64_t)(1 << 8)    /*!< Save Systname on Realtime Updates */
 #define IAX_ALREADYGONE         (uint64_t)(1 << 9)    /*!< Already disconnected */
 #define IAX_PROVISION           (uint64_t)(1 << 10)   /*!< This is a provisioning request */
 #define IAX_QUELCH              (uint64_t)(1 << 11)   /*!< Whether or not we quelch audio */
@@ -3627,12 +3627,19 @@ static void realtime_update_peer(const char *peername, struct sockaddr_in *sin,
 {
        char port[10];
        char regseconds[20];
-       
+       const char *sysname = ast_config_AST_SYSTEM_NAME;
+       char *syslabel = NULL;
+
+       if (ast_strlen_zero(sysname))   /* No system name, disable this */
+               sysname = NULL;
+       else if (ast_test_flag64(&globalflags, IAX_RTSAVE_SYSNAME))
+               syslabel = "regserver";
+
        snprintf(regseconds, sizeof(regseconds), "%d", (int)regtime);
        snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port));
        ast_update_realtime("iaxpeers", "name", peername, 
                "ipaddr", ast_inet_ntoa(sin->sin_addr), "port", port, 
-               "regseconds", regseconds, SENTINEL);
+               "regseconds", regseconds, syslabel, sysname, SENTINEL); /* note syslable can be NULL */
 }
 
 struct create_addr_info {
@@ -11644,6 +11651,8 @@ static int set_config(char *config_file, int reload)
                        ast_set2_flag64((&globalflags), ast_true(v->value), IAX_RTIGNOREREGEXPIRE);
                else if (!strcasecmp(v->name, "rtupdate"))
                        ast_set2_flag64((&globalflags), ast_true(v->value), IAX_RTUPDATE);
+               else if (!strcasecmp(v->name, "rtsavesysname"))
+                       ast_set2_flag64((&globalflags), ast_true(v->value), IAX_RTSAVE_SYSNAME);
                else if (!strcasecmp(v->name, "trunktimestamps"))
                        ast_set2_flag64(&globalflags, ast_true(v->value), IAX_TRUNKTIMESTAMPS);
                else if (!strcasecmp(v->name, "rtautoclear")) {
index 562a4e6..ffe433b 100644 (file)
@@ -287,6 +287,9 @@ autokill=yes
                        ; just like friends added from the config file only on a
                        ; as-needed basis? (yes|no)
 
+;rtsavesysname=yes    ; Save systemname in realtime database at registration
+                      ; Default = no
+
 ;rtupdate=yes          ; Send registry updates to database using realtime? (yes|no)
                        ; If set to yes, when a IAX2 peer registers successfully,
                        ; the ip address, the origination port, the registration period,