Pārlūkot izejas kodu

mqueue: kemi functions to retrieve key and value from mqueue

Daniel-Constantin Mierla 6 gadi atpakaļ
vecāks
revīzija
aa320ea32c

+ 0 - 33
src/modules/mqueue/mqueue_api.c

@@ -35,39 +35,6 @@
 
 #include "mqueue_api.h"
 
-/**
- *
- */
-typedef struct _mq_item
-{
-	str key;
-	str val;
-	struct _mq_item *next;
-} mq_item_t;
-
-/**
- *
- */
-typedef struct _mq_head
-{
-	str name;
-	int msize;
-	int csize;
-	gen_lock_t lock;
-	mq_item_t *ifirst;
-	mq_item_t *ilast;
-	struct _mq_head *next;
-} mq_head_t;
-
-/**
- *
- */
-typedef struct _mq_pv
-{
-	str *name;
-	mq_item_t *item;
-	struct _mq_pv *next;
-} mq_pv_t;
 
 /**
  *

+ 36 - 0
src/modules/mqueue/mqueue_api.h

@@ -26,6 +26,42 @@
 #include "../../core/pvar.h"
 #include "../../core/parser/msg_parser.h"
 
+/**
+ *
+ */
+typedef struct _mq_item
+{
+	str key;
+	str val;
+	struct _mq_item *next;
+} mq_item_t;
+
+/**
+ *
+ */
+typedef struct _mq_head
+{
+	str name;
+	int msize;
+	int csize;
+	gen_lock_t lock;
+	mq_item_t *ifirst;
+	mq_item_t *ilast;
+	struct _mq_head *next;
+} mq_head_t;
+
+/**
+ *
+ */
+typedef struct _mq_pv
+{
+	str *name;
+	mq_item_t *item;
+	struct _mq_pv *next;
+} mq_pv_t;
+
+mq_pv_t *mq_pv_get(str *name);
+
 int pv_parse_mq_name(pv_spec_p sp, str *in);
 int pv_get_mqk(struct sip_msg *msg, pv_param_t *param,
 		pv_value_t *res);

+ 106 - 0
src/modules/mqueue/mqueue_mod.c

@@ -435,6 +435,82 @@ static int ki_mq_pv_free(sip_msg_t* msg, str *mq)
 	return 1;
 }
 
+/**
+ *
+ */
+static sr_kemi_xval_t _sr_kemi_mqueue_xval = {0};
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqx_get_mode(sip_msg_t *msg, str *qname, int qtype,
+			int rmode)
+{
+	mq_pv_t *mp = NULL;
+
+	memset(&_sr_kemi_mqueue_xval, 0, sizeof(sr_kemi_xval_t));
+	mp = mq_pv_get(qname);
+	if(mp == NULL || mp->item==NULL) {
+		sr_kemi_xval_null(&_sr_kemi_mqueue_xval, 0);
+		return &_sr_kemi_mqueue_xval;
+	}
+	_sr_kemi_mqueue_xval.vtype = SR_KEMIP_STR;
+	if(qtype==0) {
+		_sr_kemi_mqueue_xval.v.s = mp->item->key;
+	} else {
+		_sr_kemi_mqueue_xval.v.s = mp->item->val;
+	}
+	return &_sr_kemi_mqueue_xval;
+}
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqk_get(sip_msg_t *msg, str *qname)
+{
+	return ki_mqx_get_mode(msg, qname, 0, SR_KEMI_XVAL_NULL_NONE);
+}
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqk_gete(sip_msg_t *msg, str *qname)
+{
+	return ki_mqx_get_mode(msg, qname, 0, SR_KEMI_XVAL_NULL_EMPTY);
+}
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqk_getw(sip_msg_t *msg, str *qname)
+{
+	return ki_mqx_get_mode(msg, qname, 0, SR_KEMI_XVAL_NULL_PRINT);
+}
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqv_get(sip_msg_t *msg, str *qname)
+{
+	return ki_mqx_get_mode(msg, qname, 1, SR_KEMI_XVAL_NULL_NONE);
+}
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqv_gete(sip_msg_t *msg, str *qname)
+{
+	return ki_mqx_get_mode(msg, qname, 1, SR_KEMI_XVAL_NULL_EMPTY);
+}
+
+/**
+ *
+ */
+static sr_kemi_xval_t* ki_mqv_getw(sip_msg_t *msg, str *qname)
+{
+	return ki_mqx_get_mode(msg, qname, 1, SR_KEMI_XVAL_NULL_PRINT);
+}
+
 /**
  *
  */
@@ -460,6 +536,36 @@ static sr_kemi_t sr_kemi_mqueue_exports[] = {
 		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
 			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
 	},
+	{ str_init("mqueue"), str_init("mqk_get"),
+		SR_KEMIP_XVAL, ki_mqk_get,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("mqueue"), str_init("mqk_gete"),
+		SR_KEMIP_XVAL, ki_mqk_gete,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("mqueue"), str_init("mqk_getw"),
+		SR_KEMIP_XVAL, ki_mqk_getw,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("mqueue"), str_init("mqv_get"),
+		SR_KEMIP_XVAL, ki_mqv_get,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("mqueue"), str_init("mqv_gete"),
+		SR_KEMIP_XVAL, ki_mqv_gete,
+		{ SR_KEMIP_STR, SR_KEMIP_NONE, SR_KEMIP_NONE,
+			SR_KEMIP_NONE, SR_KEMIP_NONE, SR_KEMIP_NONE }
+	},
+	{ str_init("mqueue"), str_init("mqv_getw"),
+		SR_KEMIP_XVAL, ki_mqv_getw,
+		{ 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 } }
 };