浏览代码

dialog: api function to get the status if dlg var is set or not

Daniel-Constantin Mierla 3 年之前
父节点
当前提交
c2c3211cd3
共有 3 个文件被更改,包括 29 次插入0 次删除
  1. 3 0
      src/modules/dialog/dlg_cb.h
  2. 25 0
      src/modules/dialog/dlg_var.c
  3. 1 0
      src/modules/dialog/dlg_var.h

+ 3 - 0
src/modules/dialog/dlg_cb.h

@@ -63,6 +63,9 @@ typedef int (*get_dlg_varval_f)( struct dlg_cell* dlg,
 /* method to get a variable value pkg-allocated duplicate from a dialog */
 typedef int (*get_dlg_vardup_f)( struct dlg_cell* dlg,
                                     str* key, str* val);
+/* method to get if a variable value is set or not from a dialog */
+typedef int (*get_dlg_varstatus_f)( struct dlg_cell* dlg,
+                                    str* key);
 
 #define CONFIRMED_DIALOG_STATE 1
 

+ 25 - 0
src/modules/dialog/dlg_var.c

@@ -376,6 +376,31 @@ int get_dlg_vardup(struct dlg_cell *dlg, str *key, str *val)
 	return -2;
 }
 
+/**
+ * return the status if the dlg variable value is set or not
+ * - 1 - variable is set
+ * - 0 - variable is not set
+ */
+int get_dlg_varstatus(struct dlg_cell *dlg, str *key)
+{
+    str* var = NULL;
+    int ret = 0;
+
+    if( !dlg || !key || key->len<=0) {
+        LM_ERR("BUG - bad parameters\n");
+        return 0;
+    }
+
+    dlg_lock(d_table, &(d_table->entries[dlg->h_entry]));
+    var = get_dlg_variable_unsafe(dlg, key);
+	if(var && var->s) {
+		ret = 1;
+	}
+    dlg_unlock(d_table, &(d_table->entries[dlg->h_entry]));
+
+    return ret;
+}
+
 int get_dlg_variable_uintval(struct dlg_cell *dlg, str *key, unsigned int *uval)
 {
 	str* var = NULL;

+ 1 - 0
src/modules/dialog/dlg_var.h

@@ -62,6 +62,7 @@ typedef struct dlg_var {
 str* get_dlg_varref(dlg_cell_t *dlg, str *key);
 int get_dlg_varval(dlg_cell_t *dlg, str *key, str *val);
 int get_dlg_vardup(dlg_cell_t *dlg, str *key, str *val);
+int get_dlg_varstatus(dlg_cell_t *dlg, str *key);
 int set_dlg_variable(dlg_cell_t *dlg, str *key, str *val);
 
 int get_dlg_variable_uintval(struct dlg_cell *dlg, str *key, unsigned int *uval);