[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openser-devel
Subject:    [sr-dev] git:master:b00190ff: ims_qos: option to use received ip, port and proto from via
From:       Daniel-Constantin Mierla via sr-dev <sr-dev () lists ! kamailio ! org>
Date:       2023-11-30 10:02:03
Message-ID: E1r8drv-00019V-8e () www ! kamailio ! org
[Download RAW message or body]

Module: kamailio
Branch: master
Commit: b00190ff6927d5ddfcc0ed78a0eb701627eaadbb
URL: https://github.com/kamailio/kamailio/commit/b00190ff6927d5ddfcc0ed78a0eb701627eaadbb

Author: Supreeth Herle <herlesupreeth@gmail.com>
Committer: Daniel-Constantin Mierla <miconda@gmail.com>
Date: 2023-11-30T10:18:47+01:00

ims_qos: option to use received ip, port and proto from via

- can help with Rx_AAR_Register when EPC is behind a NAT
- there could be an Rx AAR failure due to wrong IP address
in Framed IP address field of Rx AAR message when EPC is behind a NAT

---

Modified: src/modules/ims_qos/ims_qos_mod.c
Modified: src/modules/ims_qos/ims_qos_mod.h

---

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

---

diff --git a/src/modules/ims_qos/ims_qos_mod.c b/src/modules/ims_qos/ims_qos_mod.c
index 82057650274..eaa323dcd5b 100644
--- a/src/modules/ims_qos/ims_qos_mod.c
+++ b/src/modules/ims_qos/ims_qos_mod.c
@@ -166,6 +166,8 @@ int omit_flow_ports = 0;
 int rs_default_bandwidth = 0;
 int rr_default_bandwidth = 0;
 
+ims_qos_params_t _imsqos_params = {.recv_mode = 0};
+
 /* commands wrappers and fixups */
 static int w_rx_aar(struct sip_msg *msg, char *route, char *dir, char *id,
 		int id_type, int cfg_type);
@@ -253,7 +255,7 @@ static param_export_t params[] = {{"rx_dest_realm", PARAM_STR, &rx_dest_realm},
 				&regex_sdp_ip_prefix_to_maintain_in_fd},
 		{"include_rtcp_fd", INT_PARAM, &include_rtcp_fd},
 		{"suspend_transaction", INT_PARAM, &_ims_qos_suspend_transaction},
-		{0, 0, 0}};
+		{"recv_mode", PARAM_INT, &_imsqos_params.recv_mode}, {0, 0, 0}};
 
 
 /** module exports */
@@ -1463,19 +1465,30 @@ static int w_rx_aar_register(
 		goto error;
 	}
 
-	//we use the received IP address for the framed_ip_address
-	recv_ip.s = ip_addr2a(&msg->rcv.src_ip);
-	recv_ip.len = strlen(ip_addr2a(&msg->rcv.src_ip));
+	char buff[IP_ADDR_MAX_STR_SIZE];
+	if(_imsqos_params.recv_mode == 0) {
+		//we use the received IP address for the framed_ip_address
+		recv_ip.s = ip_addr2a(&msg->rcv.src_ip);
+		recv_ip.len = strlen(ip_addr2a(&msg->rcv.src_ip));
+
+		recv_port = msg->rcv.src_port;
+		recv_proto = msg->rcv.proto;
+	} else {
+		memset(&recv_ip, 0, sizeof(str));
+		memcpy(&buff, vb->host.s, vb->host.len);
+		buff[vb->host.len] = 0;
+		recv_ip.s = buff;
+		recv_ip.len = strlen(buff);
 
+		recv_port = via_port;
+		recv_proto = via_proto;
+	}
 	ip_version = check_ip_version(recv_ip);
 	if(!ip_version) {
 		LM_ERR("check_ip_version returned 0 \n");
 		goto error;
 	}
 
-	recv_port = msg->rcv.src_port;
-	recv_proto = msg->rcv.proto;
-
 	LM_DBG("Message received IP address is: [%.*s]\n", recv_ip.len, recv_ip.s);
 	LM_DBG("Message via is [%d://%.*s:%d]\n", vb->proto, vb->host.len,
 			vb->host.s, via_port);
diff --git a/src/modules/ims_qos/ims_qos_mod.h b/src/modules/ims_qos/ims_qos_mod.h
index 55a5a9bb356..fe061ec9a92 100644
--- a/src/modules/ims_qos/ims_qos_mod.h
+++ b/src/modules/ims_qos/ims_qos_mod.h
@@ -49,6 +49,11 @@
 
 #define MOD_NAME "ims_qos"
 
+typedef struct ims_qos_params
+{
+	int recv_mode;
+} ims_qos_params_t;
+
 /** callback functions */
 
 struct AAAMessage;

_______________________________________________
Kamailio (SER) - Development Mailing List
To unsubscribe send an email to sr-dev-leave@lists.kamailio.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic