[sr-dev] git:master:1d23f813: rtjson: enforce send socket with the attribute from json

Daniel-Constantin Mierla miconda at gmail.com
Thu Dec 22 09:12:07 CET 2016


Module: kamailio
Branch: master
Commit: 1d23f81353dd7a68b0f537e9a064587a5f733bb7
URL: https://github.com/kamailio/kamailio/commit/1d23f81353dd7a68b0f537e9a064587a5f733bb7

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2016-12-22T09:10:50+01:00

rtjson: enforce send socket with the attribute from json

- reported by Diego Nadares

---

Modified: src/modules/rtjson/rtjson_routing.c

---

Diff:  https://github.com/kamailio/kamailio/commit/1d23f81353dd7a68b0f537e9a064587a5f733bb7.diff
Patch: https://github.com/kamailio/kamailio/commit/1d23f81353dd7a68b0f537e9a064587a5f733bb7.patch

---

diff --git a/src/modules/rtjson/rtjson_routing.c b/src/modules/rtjson/rtjson_routing.c
index 9a12c75..6a44b82 100644
--- a/src/modules/rtjson/rtjson_routing.c
+++ b/src/modules/rtjson/rtjson_routing.c
@@ -318,6 +318,7 @@ int rtjson_init_serial(sip_msg_t *msg, srjson_doc_t *jdoc, sr_xavp_t *iavp)
 	str val;
 	unsigned int bflags = 0;
 	unsigned int old_bflags = 0;
+	struct socket_info* fsocket = NULL;
 
 	tj = srjson_GetObjectItem(jdoc, jdoc->root, "routes");
 	if(tj==NULL || tj->type!=srjson_Array || tj->child==NULL) {
@@ -370,6 +371,17 @@ int rtjson_init_serial(sip_msg_t *msg, srjson_doc_t *jdoc, sr_xavp_t *iavp)
 		}
 	}
 
+	rj = srjson_GetObjectItem(jdoc, nj, "socket");
+	if(rj!=NULL && rj->type==srjson_String && rj->valuestring!=NULL) {
+		val.s = rj->valuestring;
+		val.len = strlen(val.s);
+		LM_DBG("trying to set send socket to: [%.*s]\n", val.len, val.s);
+		fsocket = lookup_local_socket(&val);
+		if(fsocket) {
+			set_force_socket(msg, fsocket);
+		}
+	}
+
 	rj = srjson_GetObjectItem(jdoc, nj, "branch_flags");
 	if(rj!=NULL && rj->type==srjson_Number && SRJSON_GET_UINT(rj)!=0) {
 		bflags = SRJSON_GET_UINT(rj);
@@ -498,6 +510,7 @@ int rtjson_append_branch(sip_msg_t *msg, srjson_doc_t *jdoc, srjson_t *nj)
 	str uri = {0};
 	str duri = {0};
 	str path = {0};
+	str socket = {0};
 	struct socket_info* fsocket = NULL;
 	unsigned int bflags = 0;
 
@@ -519,7 +532,12 @@ int rtjson_append_branch(sip_msg_t *msg, srjson_doc_t *jdoc, srjson_t *nj)
 		path.s = rj->valuestring;
 		path.len = strlen(path.s);
 	}
-	
+	rj = srjson_GetObjectItem(jdoc, nj, "socket");
+	if(rj!=NULL && rj->type==srjson_String && rj->valuestring!=NULL) {
+		socket.s = rj->valuestring;
+		socket.len = strlen(socket.s);
+		fsocket = lookup_local_socket(&socket);
+	}
 	if (append_branch(msg, &uri, &duri, &path, 0, bflags,
 					  fsocket, 0 /*instance*/, 0,
 					  0, 0) <0) {




More information about the sr-dev mailing list