[sr-dev] git:master: modules/registrar: added 'q' xavp_cfg name

Juha Heinanen jh at tutpro.com
Sat Dec 13 02:53:21 CET 2014


Module: sip-router
Branch: master
Commit: cbce3372cd48246d62504d6949402e008b96d41c
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cbce3372cd48246d62504d6949402e008b96d41c

Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at tutpro.com>
Date:   Sat Dec 13 03:51:43 2014 +0200

modules/registrar: added 'q' xavp_cfg name

---

 modules/registrar/README                  |   84 +++++++++++++++-------------
 modules/registrar/doc/registrar.xml       |    5 ++
 modules/registrar/doc/registrar_admin.xml |    8 +++
 modules/registrar/sip_msg.c               |   23 +++++++-
 4 files changed, 79 insertions(+), 41 deletions(-)

diff --git a/modules/registrar/README b/modules/registrar/README
index 059a210..5f58359 100644
--- a/modules/registrar/README
+++ b/modules/registrar/README
@@ -8,6 +8,10 @@ Daniel-Constantin Mierla
 
    <miconda at gmail.com>
 
+Juha Heinanen
+
+   <jh at tutpro.com>
+
 Edited by
 
 Jan Janak
@@ -16,7 +20,7 @@ Edited by
 
 Bogdan-Andre Iancu
 
-   Copyright © 2003 FhG FOKUS
+   Copyright (c) 2003 FhG FOKUS
      __________________________________________________________________
 
    Table of Contents
@@ -628,6 +632,8 @@ modparam("registrar", "reg_callid_avp", "$avp(s:avp)")
        parameter value.
      * socket - the string representing the socket on which the register
        rquest was received, as alternative to using the sock_hdr.
+     * q - q value of contact (integer 0-1000). It overrides q value given
+       in contact header and default_q parameter.
 
    For example. if this parameter is set to 'reg', then the number of
    maximum contacts can be set in $xavp(reg=>max_contacts).
@@ -754,7 +760,7 @@ modparam("registrar", "flow_timer", 25)
    4.7. reg_fetch_contacts(domain, uri, profile)
    4.8. reg_free_contacts(profile)
 
-4.1. save(domain, [, flags [, uri]])
+4.1.  save(domain, [, flags [, uri]])
 
    The function processes a REGISTER message. It can add, remove or modify
    location records (in usrloc) depending on Contact and Expires HFs in
@@ -799,7 +805,7 @@ save("location", "0x01");
 save("location", "0x00", "sip:test at kamailio.org");
 ...
 
-4.2. lookup(domain [, uri])
+4.2.  lookup(domain [, uri])
 
    The lookup function extracts username and/or domain from Request-URI
    and tries to find all contacts for the username in usrloc. If there are
@@ -839,7 +845,7 @@ switch ($retcode) {
 };
 ...
 
-4.3. lookup_branches(domain)
+4.3.  lookup_branches(domain)
 
    The function performs lookup(domain) on r-uri and additional branches
    (only branches that have no other attributes set than uri).
@@ -856,7 +862,7 @@ switch ($retcode) {
 lookup_branches("location");
 ...
 
-4.4. registered(domain [, uri])
+4.4.  registered(domain [, uri])
 
    The function returns true if the AOR in the Request-URI is registered,
    false otherwise. The function does not modify the message being
@@ -878,7 +884,7 @@ if (registered("location")) {
 };
 ...
 
-4.5. add_sock_hdr(hdr_name)
+4.5.  add_sock_hdr(hdr_name)
 
    Adds a new header to the current REGISTER request with "hdr_name" which
    contains the description of the received socket (proto:ip:port)
@@ -895,7 +901,7 @@ if (registered("location")) {
 add_sock_hdr("Sock-Info");
 ...
 
-4.6. unregister(domain, uri[, ruid])
+4.6.  unregister(domain, uri[, ruid])
 
    The function removes contacts associated with 'uri' from the location
    database. If 'ruid' is provided a specific contact is removed, if
@@ -922,7 +928,7 @@ unregister("location", "$ru", "$ulc(caller=>ruid)");
 unregister("location", "", "$ruid");
 ...
 
-4.7. reg_fetch_contacts(domain, uri, profile)
+4.7.  reg_fetch_contacts(domain, uri, profile)
 
    The function fetches the contacts for 'uri' from table 'domain' to
    pseudo-variable $ulc(profile).
@@ -944,7 +950,7 @@ reg_fetch_contacts("location", "$ru", "callee");
 reg_fetch_contacts("location", "sip:user at kamailio.org", "caller");
 ...
 
-4.8. reg_free_contacts(profile)
+4.8.  reg_free_contacts(profile)
 
    The function frees the contacts from pseudo-variable $ulc(profile).
    Should be called to release the content of a profile. Anyhow, fetching
@@ -1087,60 +1093,60 @@ Chapter 2. Frequently Asked Questions
 
    2.1.
 
-   What happend with the old "nat_flag" module parameter?
+       What happend with the old "nat_flag" module parameter?
 
-   In was removed, as the module internally loads this value from the
-   "USRLOC" module (see the "nat_bflag" USRLOC parameter).
+       In was removed, as the module internally loads this value from the
+       "USRLOC" module (see the "nat_bflag" USRLOC parameter).
 
    2.2.
 
-   What happend with the old "use_domain" module parameter?
+       What happend with the old "use_domain" module parameter?
 
-   In was removed, as the module internally loads this option from the
-   "USRLOC" module. This was done in order to simplify the configuration.
+       In was removed, as the module internally loads this option from the
+       "USRLOC" module. This was done in order to simplify the configuration.
 
    2.3.
 
-   What happened with the old "save_noreply" and "save_memory" functions?
+       What happened with the old "save_noreply" and "save_memory" functions?
 
-   There functions were merged into the new "save(domain,flags)"
-   functions. If a reply should be sent or if the DB should be updated
-   also is controlled via the flags.
+       There functions were merged into the new "save(domain,flags)"
+       functions. If a reply should be sent or if the DB should be updated
+       also is controlled via the flags.
 
    2.4.
 
-   Where can I find more about Kamailio?
+       Where can I find more about Kamailio?
 
-   Take a look at http://www.kamailio.org/.
+       Take a look at http://www.kamailio.org/.
 
    2.5.
 
-   Where can I post a question about this module?
+       Where can I post a question about this module?
 
-   First at all check if your question was already answered on one of our
-   mailing lists:
-     * User Mailing List -
-       http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
-     * Developer Mailing List -
-       http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
+       First at all check if your question was already answered on one of our
+       mailing lists:
+         * User Mailing List -
+           http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
+         * Developer Mailing List -
+           http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
 
-   E-mails regarding any stable Kamailio release should be sent to
-   <sr-users at lists.sip-router.org> and e-mails regarding development
-   versions should be sent to <sr-dev at lists.sip-router.org>.
+       E-mails regarding any stable Kamailio release should be sent to
+       <sr-users at lists.sip-router.org> and e-mails regarding development
+       versions should be sent to <sr-dev at lists.sip-router.org>.
 
-   If you want to keep the mail private, send it to
-   <sr-users at lists.sip-router.org>.
+       If you want to keep the mail private, send it to
+       <sr-users at lists.sip-router.org>.
 
    2.6.
 
-   How can I report a bug?
+       How can I report a bug?
 
-   Please follow the guidelines provided at:
-   http://sip-router.org/tracker.
+       Please follow the guidelines provided at:
+       http://sip-router.org/tracker.
 
    2.7.
 
-   What happened to the desc_time_order parameter?
+       What happened to the desc_time_order parameter?
 
-   It was removed, as its functionality was migrated into usrloc module,
-   were there is a parameter with the same name.
+       It was removed, as its functionality was migrated into usrloc module,
+       were there is a parameter with the same name.
diff --git a/modules/registrar/doc/registrar.xml b/modules/registrar/doc/registrar.xml
index 4328ccf..8e8143c 100644
--- a/modules/registrar/doc/registrar.xml
+++ b/modules/registrar/doc/registrar.xml
@@ -26,6 +26,11 @@
 		<surname>Mierla</surname>
 		<email>miconda at gmail.com</email>
 		</author>
+		<author>
+		<firstname>Juha</firstname>
+		<surname>Heinanen</surname>
+		<email>jh at tutpro.com</email>
+		</author>
 		<editor>
 		<firstname>Jan</firstname>
 		<surname>Janak</surname>
diff --git a/modules/registrar/doc/registrar_admin.xml b/modules/registrar/doc/registrar_admin.xml
index 5530e15..cabf3c7 100644
--- a/modules/registrar/doc/registrar_admin.xml
+++ b/modules/registrar/doc/registrar_admin.xml
@@ -671,6 +671,14 @@ modparam("registrar", "reg_callid_avp", "$avp(s:avp)")
 				to using the sock_hdr.
 			</para>
 		</listitem>
+		<listitem>
+			<para>
+				<emphasis>q</emphasis> - q value of contact
+				(integer 0-1000). It
+				overrides q value given in contact header and
+				default_q parameter.
+			</para>
+		</listitem>
 		</itemizedlist>
 		<para>
 			For example. if this parameter is set to 'reg', then the number
diff --git a/modules/registrar/sip_msg.c b/modules/registrar/sip_msg.c
index 6ccfd5b..fc5bba1 100644
--- a/modules/registrar/sip_msg.c
+++ b/modules/registrar/sip_msg.c
@@ -283,11 +283,29 @@ void calc_contact_expires(struct sip_msg* _m, param_t* _ep, int* _e)
 
 /*! \brief
  * Calculate contact q value as follows:
- * 1) If q parameter exists, use it
- * 2) If the parameter doesn't exist, use the default value
+ * 1) If xavp_cfg q has been defined, use it
+ * 2) If q parameter exists in contact, use it
+ * 3) If the parameter doesn't exist in contact, use the default value
  */
 int calc_contact_q(param_t* _q, qvalue_t* _r)
 {
+	sr_xavp_t *vavp = NULL;
+	str xqname = str_init("q");
+
+	if (reg_xavp_cfg.s != NULL)
+		vavp = xavp_get_child_with_ival(&reg_xavp_cfg, &xqname);
+
+	if (vavp != NULL) {
+		if ((vavp->val.v.i >= 0) && (vavp->val.v.i <= 1000)) {
+			*_r = vavp->val.v.i;
+			return 0;
+		} else {
+			rerrno = R_INV_Q; /* Invalid q parameter */
+			LM_ERR("invalid q parameter\n");
+			return -1;
+		}
+	}
+
 	if (!_q || (_q->body.len == 0)) {
 		*_r = cfg_get(registrar, registrar_cfg, default_q);
 	} else {
@@ -297,5 +315,6 @@ int calc_contact_q(param_t* _q, qvalue_t* _r)
 			return -1;
 		}
 	}
+
 	return 0;
 }




More information about the sr-dev mailing list