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

Author: Carsten Bock <[email protected]>
Committer: Carsten Bock <[email protected]>
Date:   Sun Aug 18 17:47:08 2013 +0200

Only update received info, if a contact is "new" contact. In case of multiple 
registration for one AoR, each registration will have a different contact.

---

 modules/ims_registrar_pcscf/save.c |   50 ++++++++++++++++++++----------------
 modules/ims_usrloc_pcscf/udomain.c |    2 +-
 2 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/modules/ims_registrar_pcscf/save.c 
b/modules/ims_registrar_pcscf/save.c
index 5ace6e5..676f949 100644
--- a/modules/ims_registrar_pcscf/save.c
+++ b/modules/ims_registrar_pcscf/save.c
@@ -141,32 +141,38 @@ static inline int update_contacts(struct sip_msg 
*req,struct sip_msg *rpl, udoma
                                ci.num_service_routes = service_route_cnt;
                                ci.reg_state = PCONTACT_REGISTERED;
 
-                               // 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;
+                               ci.received_host.len = 0;
+                               ci.received_host.s = 0;
+                               ci.received_port = 0;
+                               ci.received_proto = 0;
 
                                ul.lock_udomain(_d, &c->uri);
                                if (ul.get_pcontact(_d, &c->uri, &pcontact) != 
0) { //need to insert new contact
                                        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 {
diff --git a/modules/ims_usrloc_pcscf/udomain.c 
b/modules/ims_usrloc_pcscf/udomain.c
index ef15bea..8c0d370 100644
--- a/modules/ims_usrloc_pcscf/udomain.c
+++ b/modules/ims_usrloc_pcscf/udomain.c
@@ -376,7 +376,7 @@ int update_pcontact(struct udomain* _d, struct 
pcontact_info* _ci, struct pconta
                }
        }
 
-       // update received info:
+       // update received info (if info is available):
        if (_ci->received_host.len > 0) {
                if (_c->received_host.s)
                        shm_free(_c->received_host.s);


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to