From 5e07d01aaae15d3441876d8ee154a53484d08682 Mon Sep 17 00:00:00 2001 From: Charles Chance Date: Fri, 6 Feb 2015 10:59:35 +0000 Subject: [PATCH] dmq: add branches when replicating to multiple nodes - reported by Leonardo Arena (cherry picked from commit ff114281fc2f523ed7bf87ea31448ce7327fdf93) --- modules/dmq/dmq_funcs.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modules/dmq/dmq_funcs.c b/modules/dmq/dmq_funcs.c index 7430193be4f..2ec32d29376 100644 --- a/modules/dmq/dmq_funcs.c +++ b/modules/dmq/dmq_funcs.c @@ -24,6 +24,7 @@ #include "dmq_funcs.h" #include "notification_peer.h" +#include "../../dset.h" /** * @brief register a DMQ peer @@ -385,6 +386,7 @@ int cfg_dmq_t_replicate(struct sip_msg* msg, char* s) dmq_node_t* node; struct socket_info* sock; int i = 0; + int first = 1; /* avoid loops - do not replicate if message has come from another node * (override if optional parameter is set) @@ -413,10 +415,22 @@ int cfg_dmq_t_replicate(struct sip_msg* msg, char* s) node = node->next; continue; } + + if (!first) { + if (append_branch(msg, 0, 0, 0, Q_UNSPECIFIED, 0, sock, 0, 0, 0, 0) == -1) { + LM_ERR("failed to append a branch\n"); + node = node->next; + continue; + } + } else { + first = 0; + } + if(tmb.t_replicate(msg, &node->orig_uri) < 0) { LM_ERR("error calling t_replicate\n"); goto error; } + node = node->next; } lock_release(&node_list->lock);