Module: kamailio
Branch: 5.7
Commit: 1666d4bce924b8c0d44119491199a164c9642469
URL: 
https://github.com/kamailio/kamailio/commit/1666d4bce924b8c0d44119491199a164c9642469

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2024-03-14T10:12:11+01:00

topos: properly handle cases of no user in contact for mode 1

- contact mode 1 accepted cases with no-user in contact uri but not in
  r-uri, however, requests within dialog can have one's contact in r-uri
  and then processing failed

(cherry picked from commit 24e410f9a20d004f55bcc79cd10fb35cb26e4570)
(cherry picked from commit 45ee72fcf0ae8aeb135196ef8729fe0cea14048e)

---

Modified: src/modules/topos/tps_storage.c

---

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

---

diff --git a/src/modules/topos/tps_storage.c b/src/modules/topos/tps_storage.c
index 1399017cf77..a7b331ca7f4 100644
--- a/src/modules/topos/tps_storage.c
+++ b/src/modules/topos/tps_storage.c
@@ -223,6 +223,7 @@ int tps_storage_fill_contact(
        int i;
        int contact_len;
        int cparam_len;
+       int cuser_len = 0;
        sr_xavp_t *vavu = NULL;
 
        if(dir == TPS_DIR_DOWNSTREAM) {
@@ -315,21 +316,27 @@ int tps_storage_fill_contact(
                                        LM_ERR("failed to parse the contact 
uri\n");
                                        return -1;
                                }
-                               memcpy(td->cp, curi.user.s, curi.user.len);
-                               td->cp += curi.user.len;
+                               if(curi.user.len > 0) {
+                                       memcpy(td->cp, curi.user.s, 
curi.user.len);
+                                       td->cp += curi.user.len;
+                                       cuser_len = curi.user.len;
+                               } else {
+                                       LM_DBG("no contact user - skipping 
it\n");
+                               }
                        } else {
                                /* extract the ruri */
                                if(parse_sip_msg_uri(msg) < 0) {
                                        LM_ERR("failed to parse r-uri\n");
                                        return -1;
                                }
-                               if(msg->parsed_uri.user.len == 0) {
-                                       LM_ERR("no r-uri user\n");
-                                       return -1;
+                               if(msg->parsed_uri.user.len > 0) {
+                                       memcpy(td->cp, msg->parsed_uri.user.s,
+                                                       
msg->parsed_uri.user.len);
+                                       td->cp += msg->parsed_uri.user.len;
+                                       cuser_len = msg->parsed_uri.user.len;
+                               } else {
+                                       LM_DBG("no r-uri user - skipping it\n");
                                }
-                               memcpy(td->cp, msg->parsed_uri.user.s,
-                                               msg->parsed_uri.user.len);
-                               td->cp += msg->parsed_uri.user.len;
                        }
                } else if(ctmode == 2) {
                        if(dir == TPS_DIR_DOWNSTREAM) {
@@ -342,6 +349,7 @@ int tps_storage_fill_contact(
                                }
                                memcpy(td->cp, vavu->val.v.s.s, 
vavu->val.v.s.len);
                                td->cp += vavu->val.v.s.len;
+                               cuser_len = vavu->val.v.s.len;
                        } else {
                                /* extract the b contact */
                                vavu = xavu_get_child_with_sval(
@@ -352,11 +360,11 @@ int tps_storage_fill_contact(
                                }
                                memcpy(td->cp, vavu->val.v.s.s, 
vavu->val.v.s.len);
                                td->cp += vavu->val.v.s.len;
+                               cuser_len = vavu->val.v.s.len;
                        }
                }
 
-               if(!((ctmode == 1) && (dir == TPS_DIR_DOWNSTREAM)
-                                  && (curi.user.len <= 0))) {
+               if(cuser_len > 0) {
                        *td->cp = '@';
                        td->cp++;
                }

_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org

Reply via email to