Module: sip-router Branch: master Commit: 67de76fce11b3c7ac80955590a441d7be6563368 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=67de76fc...
Author: Carsten Bock carsten@ng-voice.com Committer: Carsten Bock carsten@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 {