[Users] Configurable nathelper nortpproxy string

Daniel-Constantin Mierla daniel at voice-system.ro
Mon Sep 4 12:26:03 CEST 2006


Hello Jeremie,

not to loose the patch, please register it to the tracker.

http://sourceforge.net/tracker/?atid=743022&group_id=139143&func=browse

We will check it. Right now you can enable/disable "a=nortpproxy:yes" 
when using fix_nated_sdp():

http://www.openser.org/docs/modules/1.1.x/nathelper.html#AEN229

Cheers,
Daniel


On 09/01/06 21:56, Jeremie Le Hen wrote:
> Hi list,
>
> I have made a small patch to the nathelper module, that allows to
> configure the "a=nortpproxy:yes\r\n" string.
>
> Basically, as noticed in user documentation, you can add this to your
> configuration file, once the patch is applied and OpenSER recompiled :
>
> % modparam("nathelper", "nortpproxy_str", "a=sdpmangled:yes")
>
>
> I needed to do this because I have the following setup:
>
> SoftPhone1_
>            \____
>             ____NATing Proxy_______Registrar Proxy_______(outside)
>           _/
> SoftPhone2
>
>
> For some reason, the registrar also uses nathelper/rtpproxy.  I first used
> the "f" flag for force_rtp_proxy() in my NATing proxy, in order to
> circumvent the nortpproxy flag that the registrar proxy has set.  This
> worked perfectly except if softphone1 tries to call softphone2.  In this
> case my NATing proxy would replace the SDP twice.  With my patch, I simply
> turn the nortpproxy string to something else that only my NATing proxy
> cares about.
>
> Please, commit it if you find it worth enough.
>
> Thank you.
> Best regards,
>   
> ------------------------------------------------------------------------
>
> diff -urNp openser-1.1.0-notls/modules/nathelper/doc/nathelper_user.sgml openser-1.1.0-notls-nortpproxy_str/modules/nathelper/doc/nathelper_user.sgml
> --- openser-1.1.0-notls/modules/nathelper/doc/nathelper_user.sgml	2006-06-07 15:29:07.000000000 +0200
> +++ openser-1.1.0-notls-nortpproxy_str/modules/nathelper/doc/nathelper_user.sgml	2006-09-01 20:31:53.000000000 +0200
> @@ -344,6 +344,26 @@ modparam("nathelper", "sipping_method", 
>  </programlisting>
>  		</example>
>  	</section>
> +	<section>
> +		<title><varname>nortpproxy_str</varname> (string)</title>
> +		<para>
> +		The parameter sets the SDP attribute used by nathelper to mark
> +		the packet SDP informations have already been mangled.
> +		</para>
> +		<para>
> +		<emphasis>
> +			Default value is <quote>a=nortpproxy:yes\r\n</quote>.
> +		</emphasis>
> +		</para>
> +		<example>
> +		<title>Set <varname>nortpproxy_str</varname> parameter</title>
> +		<programlisting format="linespecific">
> +...
> +modparam("nathelper", "nortpproxy_str", "a=sdpmangled:yes")
> +...
> +</programlisting>
> +		</example>
> +	</section>
>  	</section>
>  
>  
> diff -urNp openser-1.1.0-notls/modules/nathelper/nathelper.c openser-1.1.0-notls-nortpproxy_str/modules/nathelper/nathelper.c
> --- openser-1.1.0-notls/modules/nathelper/nathelper.c	2006-06-07 15:52:44.000000000 +0200
> +++ openser-1.1.0-notls-nortpproxy_str/modules/nathelper/nathelper.c	2006-09-01 20:31:47.000000000 +0200
> @@ -286,6 +286,15 @@ static pid_t mypid;
>  static unsigned int myseqn = 0;
>  static int rcv_avp_no = 42;
>  
> +/*
> + * This should have been defined right above replace_sdp_ip() but
> + * it is needed here.
> + */
> +#define	ANORTPPROXY	"a=nortpproxy:yes\r\n"
> +#define	ANORTPPROXY_LEN	(sizeof(ANORTPPROXY) - 1)
> +static str nortpproxy_str = { ANORTPPROXY, ANORTPPROXY_LEN };
> +static char *nortpproxy = NULL;
> +
>  
>  struct rtpp_head {
>  	struct rtpp_node	*rn_first;
> @@ -336,6 +345,7 @@ static cmd_export_t cmds[] = {
>  static param_export_t params[] = {
>  	{"natping_interval",      INT_PARAM, &natping_interval      },
>  	{"ping_nated_only",       INT_PARAM, &ping_nated_only       },
> +	{"nortpproxy_str",        STR_PARAM, &nortpproxy            },
>  	{"rtpproxy_sock",         STR_PARAM, &rtpproxy_sock         },
>  	{"rtpproxy_disable",      INT_PARAM, &rtpproxy_disable      },
>  	{"rtpproxy_disable_tout", INT_PARAM, &rtpproxy_disable_tout },
> @@ -400,6 +410,11 @@ mod_init(void)
>  		force_socket=grep_sock_info(&socket_str,0,0);
>  	}
>  
> +	if (nortpproxy != NULL) {
> +		nortpproxy_str.s = nortpproxy;
> +		nortpproxy_str.len = strlen(nortpproxy);
> +	}
> +
>  	if (natping_interval > 0) {
>  		bind_usrloc = (bind_usrloc_t)find_export("ul_bind_usrloc", 1, 0);
>  		if (!bind_usrloc) {
> @@ -936,9 +951,6 @@ nat_uac_test_f(struct sip_msg* msg, char
>  #define	AOLDMEDPRT	"a=oldmediaport:"
>  #define	AOLDMEDPRT_LEN	(sizeof(AOLDMEDPRT) - 1)
>  
> -#define	ANORTPPROXY	"a=nortpproxy:yes\r\n"
> -#define	ANORTPPROXY_LEN	(sizeof(ANORTPPROXY) - 1)
> -
>  
>  static inline int 
>  replace_sdp_ip(struct sip_msg* msg, str *org_body, char *line, str *ip)
> @@ -1031,13 +1043,13 @@ fix_nated_sdp_f(struct sip_msg* msg, cha
>  			}
>  		}
>  		if (level & ADD_ANORTPPROXY) {
> -			buf = pkg_malloc(ANORTPPROXY_LEN * sizeof(char));
> +			buf = pkg_malloc(nortpproxy_str.len * sizeof(char));
>  			if (buf == NULL) {
>  				LOG(L_ERR, "ERROR: fix_nated_sdp: out of memory\n");
>  				return -1;
>  			}
> -			memcpy(buf, ANORTPPROXY, ANORTPPROXY_LEN);
> -			if (insert_new_lump_after(anchor, buf, ANORTPPROXY_LEN, 0)==NULL) {
> +			memcpy(buf, nortpproxy_str.s, nortpproxy_str.len);
> +			if (insert_new_lump_after(anchor, buf, nortpproxy_str.len, 0)==NULL) {
>  				LOG(L_ERR, "ERROR: fix_nated_sdp: insert_new_lump_after "
>  					"failed\n");
>  				pkg_free(buf);
> @@ -1811,15 +1823,15 @@ force_rtp_proxy2_f(struct sip_msg* msg, 
>  		to_tag = tmp;
>  	}
>  	proxied = 0;
> -	for (cp = body.s; (len = body.s + body.len - cp) >= ANORTPPROXY_LEN;) {
> -		cp1 = ser_memmem(cp, ANORTPPROXY, len, ANORTPPROXY_LEN);
> +	for (cp = body.s; (len = body.s + body.len - cp) >= nortpproxy_str.len;) {
> +		cp1 = ser_memmem(cp, nortpproxy_str.s, len, nortpproxy_str.len);
>  		if (cp1 == NULL)
>  			break;
>  		if (cp1[-1] == '\n' || cp1[-1] == '\r') {
>  			proxied = 1;
>  			break;
>  		}
> -		cp = cp1 + ANORTPPROXY_LEN;
> +		cp = cp1 + nortpproxy_str.len;
>  	}
>  	if (proxied != 0 && force == 0)
>  		return -1;
> @@ -2037,7 +2049,7 @@ force_rtp_proxy2_f(struct sip_msg* msg, 
>  	} /* Iterate sessions */
>  
>  	if (proxied == 0) {
> -		cp = pkg_malloc(ANORTPPROXY_LEN * sizeof(char));
> +		cp = pkg_malloc(nortpproxy_str.len * sizeof(char));
>  		if (cp == NULL) {
>  			LOG(L_ERR, "ERROR: force_rtp_proxy2: out of memory\n");
>  			return -1;
> @@ -2048,8 +2060,8 @@ force_rtp_proxy2_f(struct sip_msg* msg, 
>  			pkg_free(cp);
>  			return -1;
>  		}
> -		memcpy(cp, ANORTPPROXY, ANORTPPROXY_LEN);
> -		if (insert_new_lump_after(anchor, cp, ANORTPPROXY_LEN, 0) == NULL) {
> +		memcpy(cp, nortpproxy_str.s, nortpproxy_str.len);
> +		if (insert_new_lump_after(anchor, cp, nortpproxy_str.len, 0) == NULL) {
>  			LOG(L_ERR, "ERROR: force_rtp_proxy2: insert_new_lump_after failed\n");
>  			pkg_free(cp);
>  			return -1;
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/users
>   




More information about the sr-users mailing list