Hi All,
Can anyone confirm, is this safe? Primary use case is replication of REGISTER after local save().
diff --git a/modules/dmq/dmq_funcs.c b/modules/dmq/dmq_funcs.c index b31deba..a3611e8 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);
Many thanks,
Charles
Hello,
haven't looked at the whole function, but what you are using now is adding the r-uri as a branch. Do you want that? At the end it might be that the r-ruri and the last branch have the same address.
You can look inside registrar module at lookup() function to see how first location record is added as r-uri and the rest as branches.
Cheers, Daniel
On 04/02/15 13:29, Charles Chance wrote:
Hi Daniel,
I believe this is expected, since we are simply replicating the original message to other (multiple, hence the additional branches) nodes so they have a copy. Should we in fact change the r-uri in this case? I'm not sure. It all seems to test ok.
All the best,
Charles On 5 Feb 2015 09:41, "Daniel-Constantin Mierla" miconda@gmail.com wrote:
Hello,
so how is the full code for this case, first you change the r-uri and then call append_branch()?
Cheers, Daniel
On 05/02/15 11:46, Charles Chance wrote:
Hi,
No, the original r-uri is untouched. We loop over each node, adding a branch then calling t_replicate() from the tm API, passing the destination uri as a parameter.
We have to add a branch for each replication node, otherwise tm complains there are none available. The API method t_replicate() maps to t_replicate_uri(), which eventually calls t_relay_to(), setting the replicate/local_trans bit so that replies are ignored.
Cheers,
Charles
On 5 Feb 2015 10:54, "Daniel-Constantin Mierla" miconda@gmail.com wrote:
If you want to replicate the request keeping same r-uri on all replications, then it is fine.
Cheers, Daniel
On 05/02/15 12:31, Charles Chance wrote: