[sr-dev] git:kamailio_3.0: tm: added t_replicate(uri)

Daniel-Constantin Mierla miconda at gmail.com
Wed Jan 6 12:33:21 CET 2010


Module: sip-router
Branch: kamailio_3.0
Commit: 64e19a6a44a21adf6f743420a26a48cc3acd099a
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=64e19a6a44a21adf6f743420a26a48cc3acd099a

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Wed Jan  6 11:57:24 2010 +0100

tm: added t_replicate(uri)

- the parameter has to be a valid SIP uri
- it can be given via a script variable
- K compatibility mode
- reported by Santiago Gimeno

---

 modules/tm/tm.c |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/modules/tm/tm.c b/modules/tm/tm.c
index 2774017..dcd9f83 100644
--- a/modules/tm/tm.c
+++ b/modules/tm/tm.c
@@ -114,6 +114,7 @@
 #include "../../cfg/cfg.h"
 #include "../../globals.h"
 #include "../../timer_ticks.h"
+#include "../../mod_fix.h"
 
 #include "config.h"
 #include "sip_msg.h"
@@ -180,6 +181,9 @@ inline static int w_t_relay_to_sctp( struct sip_msg  *p_msg , char *proxy,
 inline static int w_t_relay_to_sctp_uri( struct sip_msg*, char*, char*);
 #endif
 inline static int w_t_relay_to_avp(struct sip_msg* msg, char* str,char*);
+inline static int w_t_replicate_uri( struct sip_msg  *p_msg ,
+				char *uri,       /* sip uri as string or variable */
+				char *_foo       /* nothing expected */ );
 inline static int w_t_replicate( struct sip_msg  *p_msg ,
 				char *proxy, /* struct proxy_l *proxy expected */
 				char *_foo       /* nothing expected */ );
@@ -289,6 +293,8 @@ static cmd_export_t cmds[]={
 	{T_RELAY_TO_SCTP,       w_t_relay_to_sctp_uri,    0, 0,
 			REQUEST_ROUTE|FAILURE_ROUTE},
 #endif
+	{"t_replicate",        w_t_replicate_uri,       1, fixup_spve_null,
+			REQUEST_ROUTE},
 	{"t_replicate",        w_t_replicate,           2, fixup_hostport2proxy,
 			REQUEST_ROUTE},
 	{"t_replicate_udp",    w_t_replicate_udp,       2, fixup_hostport2proxy,
@@ -1365,6 +1371,39 @@ inline static int w_t_relay_to_avp( struct sip_msg  *p_msg ,
 	return r;
 }
 
+inline static int w_t_replicate_uri(struct sip_msg  *msg ,
+				char *uri,       /* sip uri as string or variable */
+				char *_foo       /* nothing expected */ )
+{
+	struct proxy_l *proxy;
+	struct sip_uri turi;
+	str suri;
+	int r = -1;
+
+	memset(&turi, 0, sizeof(struct sip_uri));
+	if(fixup_get_svalue(msg, (gparam_p)uri, &suri)!=0)
+	{
+		LM_ERR("invalid replicate uri parameter");
+		return -1;
+	}
+	if(parse_uri(suri.s, suri.len, &turi)!=0)
+	{
+		LM_ERR("bad replicate SIP address!\n");
+		return -1;
+	}
+
+	proxy=mk_proxy(&turi.host, turi.port_no, turi.proto);
+	if (proxy==0) {
+		LM_ERR("cannot create proxy from URI <%.*s>\n",
+			suri.len, suri.s );
+		return -1;
+	}
+
+	r = t_replicate(msg, proxy, proxy->proto);
+	free_proxy(proxy);
+	return r;
+
+}
 
 inline static int w_t_replicate( struct sip_msg  *p_msg ,
 	char *proxy, /* struct proxy_l *proxy expected */




More information about the sr-dev mailing list