Module: sip-router Branch: master Commit: 0161257895fe421a0c9ee413a8b89d038007ba0d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=01612578...
Author: Richard Good richard.good@smilecoms.com Committer: Richard Good richard.good@smilecoms.com Date: Thu Oct 9 15:08:22 2014 +0200
modules/ims_usrloc_pcscf: added new parameter to contact match using only URI host and port
---
.../doc/ims_usrloc_pcscf_admin.xml | 28 ++++++++++++++++++++ modules/ims_usrloc_pcscf/udomain.c | 17 +++++++++++- modules/ims_usrloc_pcscf/ul_mod.c | 2 + 3 files changed, 46 insertions(+), 1 deletions(-)
diff --git a/modules/ims_usrloc_pcscf/doc/ims_usrloc_pcscf_admin.xml b/modules/ims_usrloc_pcscf/doc/ims_usrloc_pcscf_admin.xml index c904b53..165ba41 100644 --- a/modules/ims_usrloc_pcscf/doc/ims_usrloc_pcscf_admin.xml +++ b/modules/ims_usrloc_pcscf/doc/ims_usrloc_pcscf_admin.xml @@ -235,6 +235,34 @@ modparam("ims_usrloc_pcscf", "lookup_check_received", 0) </programlisting> </example> </section> + <section> + <title>match_contact_host_port (int)</title> + + <para>If set to 1 (default), the contact is matched using only host + and port in the contact URI.</para> + + <itemizedlist> + <listitem> + <para>0 - When matching contact do full contact match procedure.</para> + </listitem> + + <listitem> + <para>1 - When matching contact compare only host and port of the contact URI.</para> + </listitem> + </itemizedlist> + + <para><emphasis>Default value is 1.</emphasis></para> + + <example> + <title>Set match_contact_host_port parameter</title> + + <programlisting format="linespecific">... +modparam("ims_usrloc_pcscf", "match_contact_host_port", 0) +... +</programlisting> + </example> + </section> + </section>
<section> diff --git a/modules/ims_usrloc_pcscf/udomain.c b/modules/ims_usrloc_pcscf/udomain.c index 23e1213..f213c89 100644 --- a/modules/ims_usrloc_pcscf/udomain.c +++ b/modules/ims_usrloc_pcscf/udomain.c @@ -64,6 +64,7 @@ extern int db_mode; extern unsigned int hashing_type; extern int lookup_check_received; +extern int match_contact_host_port;
#ifdef STATISTICS static char *build_stat_name( str* domain, char *var_name) @@ -477,7 +478,21 @@ int get_pcontact(udomain_t* _d, str* _contact, struct pcontact** _c) { *_c = c; return 0; } - + + if(match_contact_host_port) { + LM_DBG("Comparing needle user@host:port [%.*s@%.*s:%d] and contact_user@contact_host:port [%.*s@%.*s:%d]\n", needle_uri.user.len, needle_uri.user.s, + needle_uri.host.len, needle_uri.host.s, needle_uri.port_no, + c->contact_user.len, c->contact_user.s, c->contact_host.len, c->contact_host.s, c->contact_port); + + if((needle_uri.user.len == c->contact_user.len && (memcmp(needle_uri.user.s, c->contact_user.s, needle_uri.user.len) ==0)) && + (needle_uri.host.len == c->contact_host.len && (memcmp(needle_uri.host.s, c->contact_host.s, needle_uri.host.len) ==0)) && + (needle_uri.port_no == c->contact_port)) { + LM_DBG("Match!!\n"); + *_c = c; + return 0; + } + } + LM_DBG("Searching for [%.*s] and comparing to [%.*s]\n", _contact->len, _contact->s, c->aor.len, c->aor.s);
/* hosts HAVE to match */ diff --git a/modules/ims_usrloc_pcscf/ul_mod.c b/modules/ims_usrloc_pcscf/ul_mod.c index 3fbab3c..11079da 100644 --- a/modules/ims_usrloc_pcscf/ul_mod.c +++ b/modules/ims_usrloc_pcscf/ul_mod.c @@ -86,6 +86,7 @@ int ul_fetch_rows = 2000; int hashing_type = 0; /*!< has type for storing P-CSCF contacts - 0 - use full contact AOR, 1 - use IP:PORT only */
int lookup_check_received = 1; /*!< Should we check received on lookup? */ +int match_contact_host_port = 1; /*!< Should we match contact just based on rui host and port*/
db1_con_t* ul_dbh = 0; db_func_t ul_dbf; @@ -112,6 +113,7 @@ static param_export_t params[] = { {"db_mode", INT_PARAM, &db_mode }, {"hashing_type", INT_PARAM, &hashing_type }, {"lookup_check_received", INT_PARAM, &lookup_check_received }, + {"match_contact_host_port", INT_PARAM, &match_contact_host_port },
{0, 0, 0} };