Explorar o código

dmq_usrloc: new value for replicate_socket_info

To always use local dmq server_socket in "Socket:" field of replicated
contacts.
Stefan Mititelu hai 7 meses
pai
achega
7d4cd4cac8

+ 5 - 0
src/modules/dmq_usrloc/doc/dmq_usrloc_admin.xml

@@ -271,6 +271,11 @@ modparam("dmq_usrloc", "usrloc_domain", "my_domain")
 				2 - enabled, replicate socket by socket name
 			</para>
 			</listitem>
+			<listitem>
+			<para>
+				3 - enabled, use local socket from dmq server_socket modparam
+			</para>
+			</listitem>
 			</itemizedlist>
 		</para>
 		<para>

+ 15 - 2
src/modules/dmq_usrloc/usrloc_sync.c

@@ -38,6 +38,7 @@ static str dmq_400_rpl = str_init("Bad Request");
 static str dmq_500_rpl = str_init("Server Internal Error");
 
 static int *usrloc_dmq_recv = 0;
+static struct socket_info *dmq_server_socket_local = 0;
 
 dmq_api_t usrloc_dmqb;
 dmq_peer_t *usrloc_dmq_peer = NULL;
@@ -287,6 +288,7 @@ done:
 int usrloc_dmq_initialize()
 {
 	dmq_peer_t not_peer;
+	str dmq_server_socket;
 
 	/* load the DMQ API */
 	if(dmq_load_api(&usrloc_dmqb) != 0) {
@@ -308,6 +310,15 @@ int usrloc_dmq_initialize()
 	} else {
 		LM_DBG("dmq peer registered\n");
 	}
+
+	/* get local socket from DMQ API */
+	dmq_server_socket = usrloc_dmqb.get_dmq_server_socket();
+	dmq_server_socket_local = lookup_local_socket(&dmq_server_socket);
+	if(dmq_server_socket_local == 0) {
+		LM_DBG("dmq local server socket <%.*s> not found ...ignoring\n",
+				dmq_server_socket.len, dmq_server_socket.s);
+	}
+
 	return 0;
 error:
 	return -1;
@@ -430,8 +441,10 @@ static int usrloc_dmq_execute_action(srjson_t *jdoc_action, dmq_node_t *node)
 	ci.ruid = ruid;
 	ci.c = &c;
 	ci.received = received;
-	if(_dmq_usrloc_replicate_socket_info
-			& (DMQ_USRLOC_REPLICATE_SOCKET | DMQ_USRLOC_REPLICATE_SOCKNAME))
+	if(_dmq_usrloc_replicate_socket_info == DMQ_USRLOC_REPLICATE_SOCKET_LOCAL) {
+		sock = dmq_server_socket_local;
+	}
+	if(_dmq_usrloc_replicate_socket_info != 0)
 		ci.sock = sock;
 	ci.path = &path;
 	ci.expires = expires;

+ 1 - 0
src/modules/dmq_usrloc/usrloc_sync.h

@@ -31,6 +31,7 @@
 
 #define DMQ_USRLOC_REPLICATE_SOCKET 1
 #define DMQ_USRLOC_REPLICATE_SOCKNAME 2
+#define DMQ_USRLOC_REPLICATE_SOCKET_LOCAL 3
 
 extern usrloc_api_t dmq_ul;