[sr-dev] git:master: ims_registrar_pcscf: Bugfix: Update Received Info, when updating contact (it may have changed)

Carsten Bock carsten at ng-voice.com
Tue Jun 10 12:22:54 CEST 2014


Module: sip-router
Branch: master
Commit: 67de76fce11b3c7ac80955590a441d7be6563368
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=67de76fce11b3c7ac80955590a441d7be6563368

Author: Carsten Bock <carsten at ng-voice.com>
Committer: Carsten Bock <carsten at ng-voice.com>
Date:   Tue Jun 10 12:22:03 2014 +0200

ims_registrar_pcscf: Bugfix: Update Received Info, when updating contact (it may have changed)

---

 modules/ims_registrar_pcscf/save.c |   46 ++++++++++++++++++------------------
 1 files changed, 23 insertions(+), 23 deletions(-)

diff --git a/modules/ims_registrar_pcscf/save.c b/modules/ims_registrar_pcscf/save.c
index 2843278..4a625a7 100644
--- a/modules/ims_registrar_pcscf/save.c
+++ b/modules/ims_registrar_pcscf/save.c
@@ -156,6 +156,29 @@ static inline int update_contacts(struct sip_msg *req,struct sip_msg *rpl, udoma
 				ci.received_port = 0;
 				ci.received_proto = 0;
 
+				// Received Info: First try AVP, otherwise simply take the source of the request:
+				memset(&val, 0, sizeof(int_str));
+				if (rcv_avp_name.n!=0 && search_first_avp(rcv_avp_type, rcv_avp_name, &val, 0) && val.s.len > 0) {
+					if (val.s.len>RECEIVED_MAX_SIZE) {
+						LM_ERR("received too long\n");
+						goto error;
+					}
+					if (parse_uri(val.s.s, val.s.len, &parsed_received) < 0) {
+						LM_DBG("Error parsing Received URI <%.*s>\n", val.s.len, val.s.s);
+						continue;
+					}
+					ci.received_host = parsed_received.host;
+					ci.received_port = parsed_received.port_no;
+					ci.received_proto = parsed_received.proto;
+				} else {
+					ci.received_host.len = ip_addr2sbuf(&req->rcv.src_ip, srcip, sizeof(srcip));
+					ci.received_host.s = srcip;
+					ci.received_port = req->rcv.src_port;
+					ci.received_proto = req->rcv.proto;
+				}
+				// Set to default, if not set:
+				if (ci.received_port == 0) ci.received_port = 5060;
+
 				ul.lock_udomain(_d, &c->uri);
 				if (ul.get_pcontact(_d, &c->uri, &pcontact) != 0) { //need to insert new contact
 					if ((expires-local_time_now)<=0) { //remove contact - de-register
@@ -165,29 +188,6 @@ static inline int update_contacts(struct sip_msg *req,struct sip_msg *rpl, udoma
 				    
 					LM_DBG("Adding pcontact: <%.*s>, expires: %d which is in %d seconds\n", c->uri.len, c->uri.s, expires, expires-local_time_now);
 
-					// Received Info: First try AVP, otherwise simply take the source of the request:
-					memset(&val, 0, sizeof(int_str));
-					if (rcv_avp_name.n!=0 && search_first_avp(rcv_avp_type, rcv_avp_name, &val, 0) && val.s.len > 0) {
-						if (val.s.len>RECEIVED_MAX_SIZE) {
-							LM_ERR("received too long\n");
-							goto error;
-						}
-						if (parse_uri(val.s.s, val.s.len, &parsed_received) < 0) {
-							LM_DBG("Error parsing Received URI <%.*s>\n", val.s.len, val.s.s);
-							continue;
-						}
-						ci.received_host = parsed_received.host;
-						ci.received_port = parsed_received.port_no;
-						ci.received_proto = parsed_received.proto;
-					} else {
-						ci.received_host.len = ip_addr2sbuf(&req->rcv.src_ip, srcip, sizeof(srcip));
-						ci.received_host.s = srcip;
-						ci.received_port = req->rcv.src_port;
-						ci.received_proto = req->rcv.proto;
-					}
-					// Set to default, if not set:
-					if (ci.received_port == 0) ci.received_port = 5060;
-
 					if (ul.insert_pcontact(_d, &c->uri, &ci, &pcontact) != 0) {
 						LM_ERR("Failed inserting new pcontact\n");
 					} else {




More information about the sr-dev mailing list