Module: sip-router Branch: master Commit: 30e26f22600c3f50f0ea556bf2872ef7b0807c6a URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=30e26f22...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: Sat Jun 15 19:08:38 2013 +0200
tm: new module parameter - dns_reuse_rcv_socket
- control reuse of the receive socket for additional branches added by dns failover - if 1, the rcv socket is used, if not it depends on mhomed - when that is 0, the first socket is used, otherwise will be selected based on routing table - default is 0 - therefore beware when setting this parameter and mhomed=1 - based on discussion for FS#313
---
modules/tm/t_fwd.c | 12 +++++++++--- modules/tm/tm.c | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/modules/tm/t_fwd.c b/modules/tm/t_fwd.c index e0b2642..55d45f4 100644 --- a/modules/tm/t_fwd.c +++ b/modules/tm/t_fwd.c @@ -127,6 +127,7 @@
extern int tm_failure_exec_mode; +extern int tm_dns_reuse_rcv_socket;
static int goto_on_branch = 0, branch_route = 0;
@@ -1073,14 +1074,16 @@ int add_uac_dns_fallback(struct cell *t, struct sip_msg* msg, &old_uac->path, (old_uac->request.dst.send_flags.f & SND_F_FORCE_SOCKET)? - old_uac->request.dst.send_sock:0, + old_uac->request.dst.send_sock: + ((tm_dns_reuse_rcv_socket) + ?msg->rcv.bind_address:0), old_uac->request.dst.send_flags, old_uac->request.dst.proto, old_uac->request.buffer, old_uac->request.buffer_len, &old_uac->instance, &old_uac->ruid, &old_uac->location_ua); - }else + } else { /* add_uac will use dns_h => next_hop will be ignored. * Unfortunately we can't reuse the old buffer, the branch id * must be changed and the send_socket might be different => @@ -1088,11 +1091,14 @@ int add_uac_dns_fallback(struct cell *t, struct sip_msg* msg, ret=add_uac(t, msg, &old_uac->uri, 0, &old_uac->path, 0, (old_uac->request.dst.send_flags.f & SND_F_FORCE_SOCKET)? - old_uac->request.dst.send_sock:0, + old_uac->request.dst.send_sock: + ((tm_dns_reuse_rcv_socket) + ?msg->rcv.bind_address:0), old_uac->request.dst.send_flags, old_uac->request.dst.proto, UAC_DNS_FAILOVER_F, &old_uac->instance, &old_uac->ruid, &old_uac->location_ua); + }
if (ret<0){ /* failed, delete the copied dns_h */ diff --git a/modules/tm/tm.c b/modules/tm/tm.c index f7407d6..5b410c1 100644 --- a/modules/tm/tm.c +++ b/modules/tm/tm.c @@ -316,6 +316,8 @@ int tm_remap_503_500 = 1;
int tm_failure_exec_mode = 0;
+int tm_dns_reuse_rcv_socket = 0; + static rpc_export_t tm_rpc[];
static int fixup_t_check_status(void** param, int param_no); @@ -540,6 +542,7 @@ static param_export_t params[]={ {"faked_reply_prio", PARAM_INT, &faked_reply_prio }, {"remap_503_500", PARAM_INT, &tm_remap_503_500 }, {"failure_exec_mode", PARAM_INT, &tm_failure_exec_mode }, + {"dns_reuse_rcv_socket",PARAM_INT, &tm_dns_reuse_rcv_socket }, #ifdef CANCEL_REASON_SUPPORT {"local_cancel_reason", PARAM_INT, &default_tm_cfg.local_cancel_reason }, {"e2e_cancel_reason", PARAM_INT, &default_tm_cfg.e2e_cancel_reason },