2
0
Эх сурвалжийг харах

dialog(k): added is_known_dlg() cfg function

- patch by Alex Balasov, closes SF#2270836
Daniel-Constantin Mierla 15 жил өмнө
parent
commit
49bd77d18c

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 571 - 401
modules_k/dialog/README


+ 10 - 0
modules_k/dialog/dialog.c

@@ -137,6 +137,7 @@ static int fixup_dlg_bye(void** param, int param_no);
 static int fixup_dlg_refer(void** param, int param_no);
 static int fixup_dlg_refer(void** param, int param_no);
 static int fixup_dlg_bridge(void** param, int param_no);
 static int fixup_dlg_bridge(void** param, int param_no);
 static int w_dlg_get(struct sip_msg*, char*, char*, char*);
 static int w_dlg_get(struct sip_msg*, char*, char*, char*);
+static int w_is_known_dlg(struct sip_msg *);
 
 
 static cmd_export_t cmds[]={
 static cmd_export_t cmds[]={
 	{"dlg_manage", (cmd_function)w_dlg_manage,            0,0,
 	{"dlg_manage", (cmd_function)w_dlg_manage,            0,0,
@@ -171,6 +172,8 @@ static cmd_export_t cmds[]={
 			0, REQUEST_ROUTE| FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE },
 			0, REQUEST_ROUTE| FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE },
 	{"dlg_get",(cmd_function)w_dlg_get,                   3,fixup_dlg_bridge,
 	{"dlg_get",(cmd_function)w_dlg_get,                   3,fixup_dlg_bridge,
 			0, REQUEST_ROUTE| FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE },
 			0, REQUEST_ROUTE| FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE },
+	{"is_known_dlg", (cmd_function)w_is_known_dlg,        0, NULL,
+			0, REQUEST_ROUTE| FAILURE_ROUTE | ONREPLY_ROUTE | BRANCH_ROUTE },
 	{"load_dlg",  (cmd_function)load_dlg,   0, 0, 0, 0},
 	{"load_dlg",  (cmd_function)load_dlg,   0, 0, 0, 0},
 	{0,0,0,0,0,0}
 	{0,0,0,0,0,0}
 };
 };
@@ -1306,6 +1309,13 @@ static void internal_rpc_profile_print_dlgs(rpc_t *rpc, void *c, str *profile_na
 	}
 	}
 }
 }
 
 
+/*
+ * Wrapper around is_known_dlg().
+ */
+
+static int w_is_known_dlg(struct sip_msg *msg) {
+	return	is_known_dlg(msg);
+}
 
 
 static const char *rpc_print_dlgs_doc[2] = {
 static const char *rpc_print_dlgs_doc[2] = {
 	"Print all dialogs", 0
 	"Print all dialogs", 0

+ 10 - 0
modules_k/dialog/dlg_profile.c

@@ -661,6 +661,16 @@ unsigned int get_profile_size(struct dlg_profile_table *profile, str *value)
 	}
 	}
 }
 }
 
 
+/*
+ * Determine if message is in a dialog currently being tracked
+ */
+int	is_known_dlg(struct sip_msg *msg) {
+	if(get_current_dialog(msg) == NULL)
+		return -1;
+
+	return 1;
+}
+
 /****************************** MI commands *********************************/
 /****************************** MI commands *********************************/
 
 
 /*!
 /*!

+ 5 - 0
modules_k/dialog/dlg_profile.h

@@ -192,4 +192,9 @@ struct mi_root * mi_get_profile(struct mi_root *cmd_tree, void *param );
  */
  */
 struct mi_root * mi_profile_list(struct mi_root *cmd_tree, void *param );
 struct mi_root * mi_profile_list(struct mi_root *cmd_tree, void *param );
 
 
+/*!
+ * \brief return true if the messages belongs to a tracked dialog
+ */
+int is_known_dlg(struct sip_msg *msg);
+
 #endif
 #endif

+ 29 - 0
modules_k/dialog/doc/dialog_admin.xml

@@ -1385,6 +1385,35 @@ if(dlg_get("abcdef", "123", "456"))
 	dlg_bye("all");
 	dlg_bye("all");
 }
 }
 ...
 ...
+</programlisting>
+		</example>
+	</section>
+	
+	<section>
+		<title>
+		<function moreinfo="none">is_known_dlg()</function>
+		</title>
+		<para>
+		This function checks if the dialog module is aware of this
+		dialog, regardless of whether it is in any profiles.   The 
+		dialog module tracks all dialogs irrespectively of profile usage;
+		as such, this function will return affirmatively if the request 
+		corresponds to a dialog that is currently active.
+		</para>
+		<para>
+		This function can be used from REQUEST_ROUTE, BRANCH_ROUTE,
+			REPLY_ROUTE and FAILURE_ROUTE.
+		</para>
+		<example>
+		<title><function>is_known_dlg()</function> usage</title>
+		<programlisting format="linespecific">
+...
+if(!uri == myself) {
+	if(is_known_dlg()) {
+		xlog("Request $rm from $ci is in-dialog\n");
+	}
+}
+...
 </programlisting>
 </programlisting>
 		</example>
 		</example>
 	</section>
 	</section>

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно