Module: sip-router
Branch: master
Commit: cbce3372cd48246d62504d6949402e008b96d41c
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=cbce337…
Author: Juha Heinanen <jh(a)tutpro.com>
Committer: Juha Heinanen <jh(a)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(a)gmail.com>
+Juha Heinanen
+
+ <jh(a)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@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@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(a)lists.sip-router.org> and e-mails regarding development
- versions should be sent to <sr-dev(a)lists.sip-router.org>rg>.
+ E-mails regarding any stable Kamailio release should be sent to
+ <sr-users(a)lists.sip-router.org> and e-mails regarding development
+ versions should be sent to <sr-dev(a)lists.sip-router.org>rg>.
- If you want to keep the mail private, send it to
- <sr-users(a)lists.sip-router.org>rg>.
+ If you want to keep the mail private, send it to
+ <sr-users(a)lists.sip-router.org>rg>.
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(a)gmail.com</email>
</author>
+ <author>
+ <firstname>Juha</firstname>
+ <surname>Heinanen</surname>
+ <email>jh(a)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(®_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;
}