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

Author: Jason Penton <[email protected]>
Committer: Jason Penton <[email protected]>
Date:   Fri Mar 14 15:41:27 2014 +0200

modules/ims_registrar_pcscf: when search for contacts also include possible 
security ports
        - with IPSEC, the received port could be different from the initial 
registration
        which occurs after security has been negotiated

---

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

diff --git a/modules/ims_registrar_pcscf/service_routes.c 
b/modules/ims_registrar_pcscf/service_routes.c
index cafed54..8238f3b 100644
--- a/modules/ims_registrar_pcscf/service_routes.c
+++ b/modules/ims_registrar_pcscf/service_routes.c
@@ -117,6 +117,7 @@ pcontact_t * getContactP(struct sip_msg* _m, udomain_t* _d) 
{
        str received_host = {0, 0};
        contact_t *ct;
        char srcip[50]; 
+       int security_server_port = -1;
 
        if (_m->id != current_msg_id) {
                current_msg_id = _m->id;
@@ -127,7 +128,27 @@ pcontact_t * getContactP(struct sip_msg* _m, udomain_t* 
_d) {
                if (b && b->contacts) {
                        for (ct = b->contacts; ct; ct = ct->next) {
                                if (ul.get_pcontact(_d, &ct->uri, &c) == 0) {
-                                       if ((c->reg_state == 
PCONTACT_REGISTERED) && (c->received_port == _m->rcv.src_port) && 
(c->received_proto == _m->rcv.proto)) {
+                                       if (c->security) {
+                                               switch (c->security->type) {
+                                               case SECURITY_IPSEC:
+                                                       security_server_port = 
c->security->data.ipsec->port_uc;
+                                                       break;
+                                               case SECURITY_TLS:
+                                               case SECURITY_NONE:
+                                                       break;
+                                               }
+                                       } else if (c->security_temp) {
+                                               switch (c->security->type) {
+                                               case SECURITY_IPSEC:
+                                                       security_server_port = 
c->security->data.ipsec->port_uc;
+                                                       break;
+                                               case SECURITY_TLS:
+                                               case SECURITY_NONE:
+                                                       break;
+                                               }
+                                       }
+
+                                       if ((c->reg_state == 
PCONTACT_REGISTERED) && ((c->received_port == _m->rcv.src_port) || 
(security_server_port == _m->rcv.src_port)) && (c->received_proto == 
_m->rcv.proto)) {
                                                received_host.len = 
ip_addr2sbuf(&_m->rcv.src_ip, srcip, sizeof(srcip));
                                                received_host.s = srcip;
                                                LM_DBG("Received host len %d 
(search %d)\n", c->received_host.len, received_host.len);


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

Reply via email to