浏览代码

core: allow to specify that rpc worker may handle sip commands

- a sip child process can handle rpc (e.g., xmlops module) and a rpc
  child process can handle sip commands (e.g., mi cmd to end dlg and
  event_route[tm:local-request])
Daniel-Constantin Mierla 14 年之前
父节点
当前提交
df1958c017
共有 2 个文件被更改,包括 23 次插入8 次删除
  1. 20 6
      sr_module.c
  2. 3 2
      sr_module.h

+ 20 - 6
sr_module.c

@@ -113,23 +113,37 @@ int mod_response_cbk_no=0;
 response_function* mod_response_cbks=0;
 
 /**
- * if set to 1, SIP worker processes handle RPC commands as well
+ * if bit 1 set, SIP worker processes handle RPC commands as well
+ * if bit 2 set, RPC worker processes handle SIP commands as well
  */
 static int child_sip_rpc_mode = 0;
 
-void set_sip_rpc_mode(int mode)
+#define CHILD_SIP_RPC	1<<0
+#define CHILD_RPC_SIP	1<<1
+
+void set_child_sip_rpc_mode(void)
 {
-	child_sip_rpc_mode = mode;
+	child_sip_rpc_mode |= CHILD_SIP_RPC;
 }
 
-int get_sip_rpc_mode(void)
+void set_child_rpc_sip_mode(void)
 {
-	return child_sip_rpc_mode;
+	child_sip_rpc_mode |= CHILD_RPC_SIP;
 }
 
 int is_rpc_worker(int rank)
 {
-	if(rank==PROC_RPC || (rank>PROC_MAIN && child_sip_rpc_mode!=0))
+	if(rank==PROC_RPC
+			|| (rank>PROC_MAIN && (child_sip_rpc_mode&CHILD_SIP_RPC)!=0))
+		return 1;
+	return 0;
+}
+
+int is_sip_worker(int rank)
+{
+	if(rank>PROC_MAIN
+			|| ((rank==PROC_RPC || rank==PROC_NOCHLDINIT)
+					&& (child_sip_rpc_mode&CHILD_RPC_SIP)!=0))
 		return 1;
 	return 0;
 }

+ 3 - 2
sr_module.h

@@ -655,8 +655,9 @@ int fixup_free_fparam_2(void** param, int param_no);
  */
 free_fixup_function get_fixup_free(fixup_function f);
 
-void set_sip_rpc_mode(int mode);
-int get_sip_rpc_mode(void);
+void set_child_sip_rpc_mode(void);
+void set_child_rpc_sip_mode(void);
+int is_sip_worker(int rank);
 int is_rpc_worker(int rank);
 
 #endif /* sr_module_h */