Module: kamailio Branch: master Commit: 454798654c2b2acd252df411d64e55bee0a70f52 URL: https://github.com/kamailio/kamailio/commit/454798654c2b2acd252df411d64e55be...
Author: lazedo luis.azedo@factorlusitano.com Committer: lazedo luis.azedo@factorlusitano.com Date: 2018-10-04T12:40:11Z
siputils: add is_uri function
---
Modified: src/modules/siputils/checks.c Modified: src/modules/siputils/checks.h Modified: src/modules/siputils/doc/siputils_admin.xml Modified: src/modules/siputils/siputils.c
---
Diff: https://github.com/kamailio/kamailio/commit/454798654c2b2acd252df411d64e55be... Patch: https://github.com/kamailio/kamailio/commit/454798654c2b2acd252df411d64e55be...
---
diff --git a/src/modules/siputils/checks.c b/src/modules/siputils/checks.c index 0a33bddbd6..b700c620c0 100644 --- a/src/modules/siputils/checks.c +++ b/src/modules/siputils/checks.c @@ -129,6 +129,37 @@ int w_has_totag(struct sip_msg* _m, char* _foo, char* _bar) return has_totag(_m); }
+/* + * Check if pseudo variable contains a valid uri + */ +int is_uri(struct sip_msg* _m, char* _sp, char* _s2) +{ + pv_spec_t *sp; + pv_value_t pv_val; + sip_uri_t turi; + + sp = (pv_spec_t *)_sp; + + if (sp && (pv_get_spec_value(_m, sp, &pv_val) == 0)) { + if (pv_val.flags & PV_VAL_STR) { + if (pv_val.rs.len == 0 || pv_val.rs.s == NULL) { + LM_DBG("missing argument\n"); + return -1; + } + if(parse_uri(pv_val.rs.s, pv_val.rs.len, &turi)!=0) { + return -1; + } + return 1; + } else { + LM_ERR("pseudo variable value is not string\n"); + return -1; + } + } else { + LM_ERR("failed to get pseudo variable value\n"); + return -1; + } +} + /* * Check if the username matches the username in credentials */ diff --git a/src/modules/siputils/checks.h b/src/modules/siputils/checks.h index 39a575d94c..a9186386a2 100644 --- a/src/modules/siputils/checks.h +++ b/src/modules/siputils/checks.h @@ -75,6 +75,10 @@ int add_uri_param(struct sip_msg* _msg, char* _param, char* _s2); */ int tel2sip(struct sip_msg* _msg, char* _uri, char* _hostpart, char* _res);
+/* + * Check if pseudo variable contains a valid uri + */ +int is_uri(struct sip_msg* _m, char* _sp, char* _s2);
/* * Check if user part of URI in pseudo variable is an e164 number diff --git a/src/modules/siputils/doc/siputils_admin.xml b/src/modules/siputils/doc/siputils_admin.xml index a882c3b069..58dd81adcf 100644 --- a/src/modules/siputils/doc/siputils_admin.xml +++ b/src/modules/siputils/doc/siputils_admin.xml @@ -608,6 +608,33 @@ if (is_uri_user_e164("$avp(i:705)") { </example> </section>
+ <section id="siputils.f.is_uri"> + <title> + <function moreinfo="none">is_uri(pseudo-variable)</function> + </title> + <para> + Checks if string value of pseudo variable argument is a + valid uri. + </para> + <para> + This function can be used from ANY_ROUTE. + </para> + <example> + <title><function>is_uri</function> usage</title> + <programlisting format="linespecific"> +... +if (is_uri("$var(x)")) { # Check if variable contains a uri + ... +} +if (is_uri("$avp(i:705)") { + # Check value stored in avp i:705 + ... +}; +... +</programlisting> + </example> + </section> + <section id="siputils.f.is_tel_number"> <title> <function moreinfo="none">is_tel_number(tval)</function> diff --git a/src/modules/siputils/siputils.c b/src/modules/siputils/siputils.c index af8cb29d4b..50cd7425aa 100644 --- a/src/modules/siputils/siputils.c +++ b/src/modules/siputils/siputils.c @@ -137,6 +137,8 @@ static cmd_export_t cmds[]={ free_fixup_get_uri_param, REQUEST_ROUTE|LOCAL_ROUTE}, {"tel2sip", (cmd_function)tel2sip, 3, fixup_tel2sip, 0, REQUEST_ROUTE|FAILURE_ROUTE|BRANCH_ROUTE|ONREPLY_ROUTE}, + {"is_uri", (cmd_function)is_uri, 1, fixup_pvar_null, + fixup_free_pvar_null, ANY_ROUTE}, {"is_e164", (cmd_function)is_e164, 1, fixup_pvar_null, fixup_free_pvar_null, REQUEST_ROUTE|FAILURE_ROUTE|LOCAL_ROUTE}, {"is_uri_user_e164", (cmd_function)w_is_uri_user_e164, 1, fixup_pvar_null,