Add support for specifying the registration expiry on a per registration basis in...
authorJoshua Colp <jcolp@digium.com>
Wed, 30 Apr 2008 20:51:17 +0000 (20:51 +0000)
committerJoshua Colp <jcolp@digium.com>
Wed, 30 Apr 2008 20:51:17 +0000 (20:51 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@114912 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
channels/chan_sip.c
configs/sip.conf.sample

diff --git a/CHANGES b/CHANGES
index 1c1fa07..253f020 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -63,6 +63,8 @@ SIP Changes
    and restore this performance improvement. Astobj2 refcounting is now used
    for users, peers, and dialogs.  Users are encouraged to assist in regression
    testing and problem reporting!
+ * Added ability to specify registration expiry time on a per registration basis in
+   the register line.
 
 IAX Changes
 -----------
index c9275b8..68fb035 100644 (file)
@@ -6294,7 +6294,7 @@ static int sip_register(const char *value, int lineno)
        enum sip_transport transport = SIP_TRANSPORT_UDP;
        char buf[256] = "";
        char *username = NULL;
-       char *hostname=NULL, *secret=NULL, *authuser=NULL;
+       char *hostname=NULL, *secret=NULL, *authuser=NULL, *expiry=NULL;
        char *porta=NULL;
        char *callback=NULL;
        char *trans=NULL;
@@ -6330,7 +6330,7 @@ static int sip_register(const char *value, int lineno)
        if (hostname)
                *hostname++ = '\0';
        if (ast_strlen_zero(username) || ast_strlen_zero(hostname)) {
-               ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact] at line %d\n", lineno);
+               ast_log(LOG_WARNING, "Format for registration is user[:secret[:authuser]]@host[:port][/contact][~expiry] at line %d\n", lineno);
                return -1;
        }
        /* split user[:secret[:authuser]] */
@@ -6342,6 +6342,9 @@ static int sip_register(const char *value, int lineno)
                        *authuser++ = '\0';
        }
        /* split host[:port][/contact] */
+       expiry = strchr(hostname, '~');
+       if (expiry)
+               *expiry++ = '\0';
        callback = strchr(hostname, '/');
        if (callback)
                *callback++ = '\0';
@@ -6380,9 +6383,9 @@ static int sip_register(const char *value, int lineno)
                ast_string_field_set(reg, secret, secret);
        reg->transport = transport;
        reg->expire = -1;
-       reg->expiry = default_expiry;
+       reg->expiry = (expiry ? atoi(expiry) : default_expiry);
        reg->timeout =  -1;
-       reg->refresh = default_expiry;
+       reg->refresh = reg->expiry;
        reg->portno = portnum;
        reg->callid_valid = FALSE;
        reg->ocseq = INITIAL_CSEQ;
index 7a3d114..1b2a1c8 100644 (file)
@@ -390,7 +390,7 @@ srvlookup=yes                       ; Enable DNS SRV lookups on outbound calls
 ;----------------------------------------- OUTBOUND SIP REGISTRATIONS  ------------------------
 ; Asterisk can register as a SIP user agent to a SIP proxy (provider)
 ; Format for the register statement is:
-;       register => [transport://]user[:secret[:authuser]]@host[:port][/extension]
+;       register => [transport://]user[:secret[:authuser]]@host[:port][/extension][~expiry]
 ;
 ; 
 ;