瀏覽代碼

core: new rpc command - core.ppdefines_full

- print preprocess defines with their details
Daniel-Constantin Mierla 7 年之前
父節點
當前提交
f5792d1c61
共有 3 個文件被更改,包括 50 次插入3 次删除
  1. 9 2
      src/core/cfg.lex
  2. 39 0
      src/core/core_cmd.c
  3. 2 1
      src/core/ppcfg.h

+ 9 - 2
src/core/cfg.lex

@@ -1724,6 +1724,13 @@ str* pp_get_define_name(int idx)
 	return &pp_defines[idx].name;
 }
 
+ksr_ppdefine_t* pp_get_define(int idx)
+{
+	if(idx<0 || idx>=pp_num_defines)
+		return NULL;
+	return &pp_defines[idx];
+}
+
 static int pp_lookup(int len, const char * text)
 {
 	str var = {(char *)text, len};
@@ -1768,7 +1775,7 @@ int pp_define(int len, const char * text)
 				pp_defines[ppos].value.len = 0;
 				pp_defines[ppos].value.s = NULL;
 			}
-			pp_defines[ppos].type = pp_define_type;
+			pp_defines[ppos].dtype = pp_define_type;
 			return 0;
 		} else {
 			LM_CRIT("already defined: %.*s\n", len, text);
@@ -1786,7 +1793,7 @@ int pp_define(int len, const char * text)
 	pp_defines[pp_num_defines].name.s[len] = '\0';
 	pp_defines[pp_num_defines].value.len = 0;
 	pp_defines[pp_num_defines].value.s = NULL;
-	pp_defines[pp_num_defines].type = pp_define_type;
+	pp_defines[pp_num_defines].dtype = pp_define_type;
 	pp_define_index = pp_num_defines;
 	pp_num_defines++;
 

+ 39 - 0
src/core/core_cmd.c

@@ -998,6 +998,44 @@ static void core_ppdefines(rpc_t* rpc, void* c)
 	}
 }
 
+/**
+ *
+ */
+static const char* core_ppdefines_full_doc[] = {
+	"List preprocessor defines with full details", /* Documentation string */
+	0                               /* Method signature(s) */
+};
+
+/**
+ * list listen sockets for SIP server
+ */
+static void core_ppdefines_full(rpc_t* rpc, void* c)
+{
+	ksr_ppdefine_t *ppdef;
+	void *vp;
+	int i=0;
+
+	while((ppdef=pp_get_define(i))!=NULL && ppdef->name.s!=NULL) {
+		if (rpc->add(c, "{", &vp) < 0) {
+			rpc->fault(c, 500, "Server Failure");
+			return;
+		}
+		if(ppdef->value.s!=NULL) {
+			rpc->struct_add(vp, "SdS",
+					"name", &ppdef->name,
+					"type", ppdef->dtype,
+					"value", &ppdef->value);
+		} else {
+			rpc->struct_add(vp, "Sds",
+					"name", &ppdef->name,
+					"type", ppdef->dtype,
+					"value", "none");
+		}
+
+		i++;
+	}
+}
+
 /*
  * RPC Methods exported by core
  */
@@ -1036,6 +1074,7 @@ static rpc_export_t core_rpc_methods[] = {
 	{"core.sockets_list",      core_sockets_list,      core_sockets_list_doc, 0},
 	{"core.modules",           core_modules,           core_modules_doc,    RET_ARRAY},
 	{"core.ppdefines",         core_ppdefines,         core_ppdefines_doc,  RET_ARRAY},
+	{"core.ppdefines_full",    core_ppdefines_full,    core_ppdefines_doc,  RET_ARRAY},
 #ifdef USE_DNS_CACHE
 	{"dns.mem_info",          dns_cache_mem_info,     dns_cache_mem_info_doc,
 		0	},

+ 2 - 1
src/core/ppcfg.h

@@ -28,10 +28,11 @@
 typedef struct ksr_ppdefine {
 	str name;
 	str value;
-	int type;
+	int dtype;
 } ksr_ppdefine_t;
 
 str* pp_get_define_name(int idx);
+ksr_ppdefine_t* pp_get_define(int idx);
 
 int pp_subst_add(char *data);
 int pp_substdef_add(char *data, int mode);