[sr-dev] git:master:e0b82270: usrloc: rpc ul.add can set also received and socket fields

Daniel-Constantin Mierla miconda at gmail.com
Sun Sep 17 10:57:19 CEST 2017


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2017-09-17T10:49:18+02:00

usrloc: rpc ul.add can set also received and socket fields

---

Modified: src/modules/usrloc/ul_rpc.c

---

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

---

diff --git a/src/modules/usrloc/ul_rpc.c b/src/modules/usrloc/ul_rpc.c
index 88eaa284b7..d9533af262 100644
--- a/src/modules/usrloc/ul_rpc.c
+++ b/src/modules/usrloc/ul_rpc.c
@@ -584,7 +584,6 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 	str aor = {0, 0};
 	str contact = {0, 0};
 	str path = {0, 0};
-	str received = {0, 0};
 	str socket = {0, 0};
 	str temp = {0, 0};
 	double dtemp;
@@ -594,11 +593,12 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 	udomain_t *dom;
 	int ret;
 
-	memset( &ci, 0, sizeof(ucontact_info_t));
+	memset(&ci, 0, sizeof(ucontact_info_t));
 
-	ret = rpc->scan(ctx, "SSSdfSddd", &table, &aor, &contact, &ci.expires,
-			&dtemp, &path, &ci.flags, &ci.cflags, &ci.methods);
-	if ( ret != 9) {
+	ret = rpc->scan(ctx, "SSSdfSddd*SS", &table, &aor, &contact, &ci.expires,
+			&dtemp, &path, &ci.flags, &ci.cflags, &ci.methods, &ci.received,
+			&socket);
+	if (ret < 9) {
 		rpc->fault(ctx, 500, "Not enough parameters or wrong format");
 		return;
 	}
@@ -607,6 +607,19 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 	} else {
 		LM_DBG("path == 0 -> unset\n");
 	}
+	if(ret>9) {
+		/* received parameter */
+		if(!ul_rpc_is_param_set(&ci.received)) {
+			ci.received.s = 0;
+			ci.received.len = 0;
+		}
+	}
+	if(ret>10) {
+		/* socket parameter */
+		if(ul_rpc_is_param_set(&socket)) {
+			ci.sock = lookup_local_socket(&socket);
+		}
+	}
 	LM_DBG("ret: %d table:%.*s aor:%.*s contact:%.*s expires:%d"
 			" dtemp:%f path:%.*s flags:%d bflags:%d methods:%d\n",
 			ret, table.len, table.s, aor.len, aor.s, contact.len, contact.s,
@@ -624,7 +637,7 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 	}
 
 	/* process the aor */
-	if ( rpc_fix_aor(&aor) != 0 ) {
+	if (rpc_fix_aor(&aor) != 0 ) {
 		rpc->fault(ctx, 500, "Domain missing in AOR");
 		return;
 	}
@@ -636,13 +649,13 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 	}
 	ci.ruid = _ul_sruid.uid;
 
-	lock_udomain( dom, &aor);
+	lock_udomain(dom, &aor);
 
-	ret = get_urecord( dom, &aor, &r);
+	ret = get_urecord(dom, &aor, &r);
 	if(ret==1) {
-		if (insert_urecord( dom, &aor, &r) < 0)
+		if (insert_urecord(dom, &aor, &r) < 0)
 		{
-			unlock_udomain( dom, &aor);
+			unlock_udomain(dom, &aor);
 			rpc->fault(ctx, 500, "Can't insert record");
 			return;
 		}
@@ -651,7 +664,7 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 		if (get_ucontact( r, &contact, &rpc_ul_cid, &rpc_ul_path,
 					RPC_UL_CSEQ+1, &c) < 0)
 		{
-			unlock_udomain( dom, &aor);
+			unlock_udomain(dom, &aor);
 			rpc->fault(ctx, 500, "Can't get record");
 			return;
 		}
@@ -670,22 +683,22 @@ static void ul_rpc_add(rpc_t* rpc, void* ctx)
 		if (update_ucontact( r, c, &ci) < 0)
 		{
 			release_urecord(r);
-			unlock_udomain( dom, &aor);
+			unlock_udomain(dom, &aor);
 			rpc->fault(ctx, 500, "Can't update contact");
 			return;
 		}
 	} else {
-		if ( insert_ucontact( r, &contact, &ci, &c) < 0 )
+		if ( insert_ucontact(r, &contact, &ci, &c) < 0 )
 		{
 			release_urecord(r);
-			unlock_udomain( dom, &aor);
+			unlock_udomain(dom, &aor);
 			rpc->fault(ctx, 500, "Can't insert contact");
 			return;
 		}
 	}
 
 	release_urecord(r);
-	unlock_udomain( dom, &aor);
+	unlock_udomain(dom, &aor);
 	return;
 }
 




More information about the sr-dev mailing list