ソースを参照

siputils: exported is_uri() to kemi interface

Daniel-Constantin Mierla 7 年 前
コミット
f94e6d12c1
1 ファイル変更22 行追加0 行削除
  1. 22 0
      src/modules/siputils/siputils.c

+ 22 - 0
src/modules/siputils/siputils.c

@@ -65,6 +65,7 @@
 #include "../../core/error.h"
 #include "../../core/kemi.h"
 #include "../../core/parser/parse_option_tags.h"
+#include "../../core/parser/parse_uri.h"
 
 #include "ring.h"
 #include "options.h"
@@ -457,6 +458,22 @@ static int fixup_option(void** param, int param_no) {
 	return 0;
 }
 
+/*
+ * Check if pseudo variable contains a valid uri
+ */
+static int ki_is_uri(sip_msg_t* msg, str* suri)
+{
+	sip_uri_t turi;
+
+	if(suri==NULL || suri->s==NULL || suri->len<=0) {
+		return -1;
+	}
+	if(parse_uri(suri->s, suri->len, &turi)!=0) {
+		return -1;
+	}
+	return 1;
+}
+
 /**
  *
  */
@@ -481,6 +498,11 @@ static sr_kemi_t sr_kemi_siputils_exports[] = {
 		{ SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE,
 			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
 	},
+	{ str_init("siputils"), str_init("is_uri"),
+		SR_KEMIP_INT, ki_is_uri,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
 
 	{ {0, 0}, {0, 0}, 0, NULL, { 0, 0, 0, 0, 0, 0 } }
 };