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!
    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
 -----------
 
 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;
        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;
        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)) {
        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]] */
                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] */
                        *authuser++ = '\0';
        }
        /* split host[:port][/contact] */
+       expiry = strchr(hostname, '~');
+       if (expiry)
+               *expiry++ = '\0';
        callback = strchr(hostname, '/');
        if (callback)
                *callback++ = '\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;
                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->timeout =  -1;
-       reg->refresh = default_expiry;
+       reg->refresh = reg->expiry;
        reg->portno = portnum;
        reg->callid_valid = FALSE;
        reg->ocseq = INITIAL_CSEQ;
        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:
 ;----------------------------------------- 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]
 ;
 ; 
 ;
 ;
 ; 
 ;