Browse Source

Merge pull request #1626 from kamailio/dmq_handle_message-return

dmq: add optional "continue" parameter to dmq_handle_message()
Charles Chance 7 years ago
parent
commit
18c1eb2c05

+ 3 - 1
src/modules/dmq/dmq.c

@@ -91,6 +91,8 @@ static void destroy(void);
 static cmd_export_t cmds[] = {
 static cmd_export_t cmds[] = {
 	{"dmq_handle_message", (cmd_function)dmq_handle_message, 0,
 	{"dmq_handle_message", (cmd_function)dmq_handle_message, 0,
 		0, 0, REQUEST_ROUTE},
 		0, 0, REQUEST_ROUTE},
+	{"dmq_handle_message", (cmd_function)w_dmq_handle_message, 1,
+		fixup_int_1, 0, REQUEST_ROUTE},
 	{"dmq_send_message", (cmd_function)cfg_dmq_send_message, 4,
 	{"dmq_send_message", (cmd_function)cfg_dmq_send_message, 4,
 		fixup_spve_all, 0, ANY_ROUTE},
 		fixup_spve_all, 0, ANY_ROUTE},
 	{"dmq_bcast_message", (cmd_function)cfg_dmq_bcast_message, 3,
 	{"dmq_bcast_message", (cmd_function)cfg_dmq_bcast_message, 3,
@@ -412,4 +414,4 @@ int mod_register(char *path, int *dlflags, void *p1, void *p2)
 {
 {
 	sr_kemi_modules_add(sr_kemi_dmq_exports);
 	sr_kemi_modules_add(sr_kemi_dmq_exports);
 	return 0;
 	return 0;
-}
+}

+ 11 - 1
src/modules/dmq/doc/dmq_admin.xml

@@ -219,12 +219,22 @@ modparam("dmq", "ping_interval", 90)
         <title>Functions</title>
         <title>Functions</title>
         <section id="dmq.f.dmq_handle_message">
         <section id="dmq.f.dmq_handle_message">
                 <title>
                 <title>
-                <function moreinfo="none">dmq_handle_message()</function>
+                <function moreinfo="none">dmq_handle_message([continue])</function>
                 </title>
                 </title>
                 <para>
                 <para>
                 Handles a DMQ message by passing it to the appropriate local peer (module).
                 Handles a DMQ message by passing it to the appropriate local peer (module).
 		The peer is identified by the user part of the To header.
 		The peer is identified by the user part of the To header.
                 </para>
                 </para>
+                <para>Meaning of parameters:</para>
+                <itemizedlist>
+                        <listitem>
+                                <para>
+                                <emphasis>continue</emphasis> - by default, dmq_handle_message() will end
+                                execution of routing script. If this optional parameter is set to "1", dmq_handle_message()
+                                will continue executing the routing script after it's been called.
+                                </para>
+                        </listitem>
+                </itemizedlist>
                 <para>
                 <para>
                 This function can be used from REQUEST_ROUTE.
                 This function can be used from REQUEST_ROUTE.
                 </para>
                 </para>

+ 15 - 5
src/modules/dmq/message.c

@@ -40,7 +40,7 @@ str dmq_404_rpl = str_init("User Not Found");
 /**
 /**
  * @brief config function to handle dmq messages
  * @brief config function to handle dmq messages
  */
  */
-int ki_dmq_handle_message(sip_msg_t *msg)
+int ki_dmq_handle_message(sip_msg_t *msg, int returnval)
 {
 {
 	dmq_peer_t *peer;
 	dmq_peer_t *peer;
 	if((parse_sip_msg_uri(msg) < 0) || (!msg->parsed_uri.user.s)) {
 	if((parse_sip_msg_uri(msg) < 0) || (!msg->parsed_uri.user.s)) {
@@ -60,7 +60,7 @@ int ki_dmq_handle_message(sip_msg_t *msg)
 			LM_ERR("sending reply\n");
 			LM_ERR("sending reply\n");
 			goto error;
 			goto error;
 		}
 		}
-		return 0;
+		return returnval;
 	}
 	}
 	LM_DBG("dmq_handle_message peer found: %.*s\n", msg->parsed_uri.user.len,
 	LM_DBG("dmq_handle_message peer found: %.*s\n", msg->parsed_uri.user.len,
 			msg->parsed_uri.user.s);
 			msg->parsed_uri.user.s);
@@ -68,12 +68,22 @@ int ki_dmq_handle_message(sip_msg_t *msg)
 		LM_ERR("failed to add dmq job\n");
 		LM_ERR("failed to add dmq job\n");
 		goto error;
 		goto error;
 	}
 	}
-	return 0;
+	return returnval;
 error:
 error:
 	return -1;
 	return -1;
 }
 }
 
 
+int w_dmq_handle_message(struct sip_msg *msg, char *str1, char *str2)
+{
+	int i = 0;
+	if(str1) {
+		if(get_int_fparam(&i, msg, (fparam_t*)str1)<0) return -1;
+	}
+	if(i>1) i = 1;
+	return ki_dmq_handle_message(msg, i);
+}
+
 int dmq_handle_message(struct sip_msg *msg, char *str1, char *str2)
 int dmq_handle_message(struct sip_msg *msg, char *str1, char *str2)
 {
 {
-	return ki_dmq_handle_message(msg);
-}
+	return ki_dmq_handle_message(msg, 0);
+}

+ 2 - 1
src/modules/dmq/message.h

@@ -24,7 +24,8 @@
 #ifndef _MESSAGE_H_
 #ifndef _MESSAGE_H_
 #define _MESSAGE_H_
 #define _MESSAGE_H_
 
 
+int w_dmq_handle_message(struct sip_msg *, char *str1, char *str2);
 int dmq_handle_message(struct sip_msg *, char *str1, char *str2);
 int dmq_handle_message(struct sip_msg *, char *str1, char *str2);
-int ki_dmq_handle_message(sip_msg_t *msg);
+int ki_dmq_handle_message(sip_msg_t *msg, int returnval);
 
 
 #endif
 #endif