Browse Source

nathelper: Add modparam to not send ping to Path

Stefan Mititelu 7 months ago
parent
commit
31c807aaf2
2 changed files with 24 additions and 2 deletions
  1. 20 0
      src/modules/nathelper/doc/nathelper_admin.xml
  2. 4 2
      src/modules/nathelper/nathelper.c

+ 20 - 0
src/modules/nathelper/doc/nathelper_admin.xml

@@ -428,6 +428,26 @@ modparam("nathelper", "udpping_from_path", 1)
 </programlisting>
 		</example>
 	</section>
+	<section id="nathelper.p.ignore_path">
+		<title><varname>ignore_path</varname> (int)</title>
+		<para>
+		Enable ignore of Path header address when sending UDP pings (keepalives).
+		</para>
+		<para>
+		<emphasis>
+			Default value is <quote>0</quote> (feature disabled).
+			UDP pings are sent to Path header if header is present.
+		</emphasis>
+		</para>
+		<example>
+		<title>Set <varname>ignore_path</varname> parameter</title>
+		<programlisting format="linespecific">
+...
+modparam("nathelper", "ignore_path", 1)
+...
+		</programlisting>
+		</example>
+	</section>
 	<section id="nathelper.p.append_sdp_oldmediaip">
 		<title><varname>append_sdp_oldmediaip</varname> (int)</title>
 		<para>

+ 4 - 2
src/modules/nathelper/nathelper.c

@@ -193,6 +193,7 @@ static avp_name_t rcv_avp_name;
 
 static char *natping_socket = NULL;
 static int udpping_from_path = 0;
+static int ignore_path = 0;
 static int sdp_oldmediaip = 1;
 static int raw_sock = -1;
 static unsigned int raw_ip = 0;
@@ -277,6 +278,7 @@ static param_export_t params[] = {
 	{"natping_socket",        PARAM_STRING, &natping_socket        },
 	{"keepalive_timeout",     PARAM_INT, &nh_keepalive_timeout  },
 	{"udpping_from_path",     PARAM_INT, &udpping_from_path     },
+	{"ignore_path",           PARAM_INT, &ignore_path},
 	{"append_sdp_oldmediaip", PARAM_INT, &sdp_oldmediaip        },
 	{"filter_server_id",      PARAM_INT, &nh_filter_srvid },
 	{"nat_addr_mode",         PARAM_INT, &nh_nat_addr_mode },
@@ -2387,7 +2389,7 @@ static void nh_timer(unsigned int ticks, void *timer_idx)
 			dst_uri = &c;
 
 		/* determine the destination */
-		if(path.len && (flags & sipping_flag) != 0) {
+		if(path.len && (flags & sipping_flag) != 0 && !ignore_path) {
 			/* send to first URI in path */
 			if(get_path_dst_uri(&path, &opt) < 0) {
 				LM_ERR("failed to get dst_uri for Path\n");
@@ -2398,7 +2400,7 @@ static void nh_timer(unsigned int ticks, void *timer_idx)
 				LM_ERR("can't parse contact dst_uri\n");
 				continue;
 			}
-		} else if(path.len && udpping_from_path) {
+		} else if(path.len && udpping_from_path && !ignore_path) {
 			path_ip_str = extract_last_path_ip(path);
 			if(path_ip_str == NULL) {
 				LM_ERR("unable to parse path from location\n");