[sr-dev] git:master:76c5da5e: siputils: added is_alphanumex(tval, eset) function

Daniel-Constantin Mierla miconda at gmail.com
Fri Mar 3 09:32:19 CET 2017


Module: kamailio
Branch: master
Commit: 76c5da5ec048cd62c0f3cab6bf38aef5f3c19248
URL: https://github.com/kamailio/kamailio/commit/76c5da5ec048cd62c0f3cab6bf38aef5f3c19248

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2017-03-03T09:32:05+01:00

siputils: added is_alphanumex(tval, eset) function

- check if tval contains only alphanumeric characters or those from the
  eset parameter

---

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/76c5da5ec048cd62c0f3cab6bf38aef5f3c19248.diff
Patch: https://github.com/kamailio/kamailio/commit/76c5da5ec048cd62c0f3cab6bf38aef5f3c19248.patch

---

diff --git a/src/modules/siputils/checks.c b/src/modules/siputils/checks.c
index 1fb6060..cfddfda 100644
--- a/src/modules/siputils/checks.c
+++ b/src/modules/siputils/checks.c
@@ -808,18 +808,26 @@ int is_numeric(sip_msg_t *msg, char *_sp, char* _s2)
 }
 
 /*
- * Check if the parameter contains alphanumeric characters
+ * Check if the parameter contains alphanumeric characters or are part of
+ * the second parameter
  */
-int is_alphanum(sip_msg_t *msg, char *_sp, char* _s2)
+int is_alphanumex(sip_msg_t *msg, char *_sp, char* _se)
 {
 	str tval = {0, 0};
+	str eset = {0, 0};
 	int i;
+	int j;
+	int found;
 
-	if(fixup_get_svalue(msg, (gparam_t*)_sp, &tval)!=0)
-	{
-		LM_ERR("cannot get parameter value\n");
+	if(fixup_get_svalue(msg, (gparam_t*)_sp, &tval)!=0) {
+		LM_ERR("cannot get tval parameter value\n");
 		return -1;
 	}
+	if(fixup_get_svalue(msg, (gparam_t*)_se, &eset)!=0) {
+		LM_ERR("cannot get eset parameter value\n");
+		return -1;
+	}
+
 	if(tval.len<=0)
 		return -2;
 
@@ -827,8 +835,21 @@ int is_alphanum(sip_msg_t *msg, char *_sp, char* _s2)
 	for(; i<tval.len; i++) {
 		if( !((tval.s[i]>='0' && tval.s[i]<='9')
 				|| (tval.s[i]>='A' && tval.s[i]<='Z')
-				|| (tval.s[i]>='z' && tval.s[i]<='z')) )
-			return -3;
+				|| (tval.s[i]>='z' && tval.s[i]<='z')) ) {
+			if(eset.len<=0) {
+				return -3;
+			}
+			found = 0;
+			for(j=0; j<eset.len; j++) {
+				if(tval.s[i]==eset.s[j]) {
+					found = 1;
+					break;
+				}
+			}
+			if(found==0) {
+				return -3;
+			}
+		}
 	}
 
 	return 1;
diff --git a/src/modules/siputils/checks.h b/src/modules/siputils/checks.h
index 9b5be13..f071e24 100644
--- a/src/modules/siputils/checks.h
+++ b/src/modules/siputils/checks.h
@@ -129,4 +129,10 @@ int is_numeric(sip_msg_t *msg, char *_sp, char* _s2);
  */
 int is_alphanum(sip_msg_t *msg, char *_sp, char* _s2);
 
+/*
+ * Check if the parameter contains alphanumeric characters or are part of
+ * the second parameter
+ */
+int is_alphanumex(sip_msg_t *msg, char *_sp, char* _se);
+
 #endif /* CHECKS_H */
diff --git a/src/modules/siputils/doc/siputils_admin.xml b/src/modules/siputils/doc/siputils_admin.xml
index 60cb3d4..e28f7a2 100644
--- a/src/modules/siputils/doc/siputils_admin.xml
+++ b/src/modules/siputils/doc/siputils_admin.xml
@@ -681,6 +681,30 @@ if (is_alphanum("$rU")) {
 		</example>
 	</section>
 
+	<section id="siputils.f.is_alphanumex">
+		<title>
+		<function moreinfo="none">is_alphanumex(tval, eset)</function>
+		</title>
+		<para>
+			Checks if the value of parameter 'tval' consists solely of decimal
+			digits, alphabetic ASCII characters and the characters in the
+			second parameter 'eset'. The parameters can include variables.
+		</para>
+		<para>
+		This function can be used from ANY_ROUTE.
+		</para>
+		<example>
+		<title><function>is_alphanumex</function> usage</title>
+		<programlisting format="linespecific">
+...
+if (is_alphanumex("$rU", "+.-_")) {
+   ...
+}
+...
+</programlisting>
+		</example>
+	</section>
+
 	<section id="siputils.f.encode_contact">
 		<title>
 		<function moreinfo="none">encode_contact(encoding_prefix,hostpart)</function>
diff --git a/src/modules/siputils/siputils.c b/src/modules/siputils/siputils.c
index 3677086..f01bf6f 100644
--- a/src/modules/siputils/siputils.c
+++ b/src/modules/siputils/siputils.c
@@ -181,6 +181,8 @@ static cmd_export_t cmds[]={
 		0, ANY_ROUTE},
 	{"is_alphanum", (cmd_function)is_alphanum,               1, fixup_spve_null,
 		0, ANY_ROUTE},
+	{"is_alphanumex", (cmd_function)is_alphanumex,           2, fixup_spve_spve,
+		0, ANY_ROUTE},
 	{"sip_p_charging_vector", (cmd_function)sip_handle_pcv,  1, fixup_spve_null,
 		fixup_free_spve_null, ANY_ROUTE},
 	{0,0,0,0,0,0}




More information about the sr-dev mailing list