From b58dc4054ff05c66acfd9612181d85cdb5062738 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 28 Aug 2012 14:09:30 +0000 Subject: [PATCH] append a= lines at the end of each m= section --- modules_k/nathelper/nathelper.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules_k/nathelper/nathelper.c b/modules_k/nathelper/nathelper.c index bec490c13..91d5d96a9 100644 --- a/modules_k/nathelper/nathelper.c +++ b/modules_k/nathelper/nathelper.c @@ -1370,7 +1370,7 @@ fix_nated_sdp_f(struct sip_msg* msg, char* str1, char* str2) str body; str ip; int level, rest_len; - char *buf, *m_start, *m_end, *rest_s; + char *buf, *m_start, *m_end; struct lump* anchor; level = (int)(long)str1; @@ -1389,12 +1389,15 @@ fix_nated_sdp_f(struct sip_msg* msg, char* str1, char* str2) if (level & ADD_ADIRECTION) { m_start = ser_memmem(body.s, "\r\nm=", body.len, 4); while (m_start != NULL) { - m_start = m_start + 2; + m_start += 4; rest_len = body.len - (m_start - body.s); - m_end = ser_memmem(m_start, "\r\n", rest_len, 2); - if (m_end == NULL) { - LM_ERR("m line is not crlf terminated\n"); - return -1; + m_start = m_end = ser_memmem(m_start, "\r\nm=", rest_len, 4); + if (!m_end) { + m_end = body.s + body.len - 2; + if (memcmp(m_end, "\r\n", 2) != 0) { + LM_ERR("SDP body is missing trailing CRLF\n"); + return -1; + } } anchor = anchor_lump(msg, m_end - msg->buf, 0, 0); if (anchor == NULL) { @@ -1413,9 +1416,6 @@ fix_nated_sdp_f(struct sip_msg* msg, char* str1, char* str2) pkg_free(buf); return -1; } - rest_s = m_end + 2; - rest_len = body.len - (rest_s - body.s); - m_start = ser_memmem(rest_s, "\r\nm=", rest_len, 4); } }