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", +
+ <varname>nortpproxy_str</varname> (string) + + The parameter sets the SDP attribute used by nathelper to mark + the packet SDP informations have already been mangled. + + + + Default value is a=nortpproxy:yes\r\n. + + + + Set <varname>nortpproxy_str</varname> parameter + +... +modparam("nathelper", "nortpproxy_str", "a=sdpmangled:yes") +... + + +
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;