diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 7448951c308e19769193884dfb818767fd1cba55..e3b8afda18aa59d668867a3ceae5adf0f127f0c0 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -9869,8 +9869,10 @@ static void lws2sws(struct ast_str *data) int len = ast_str_strlen(data); int h = 0, t = 0; int lws = 0; + int just_read_eol = 0; + int done_with_headers = 0; - for (; h < len;) { + while (h < len) { /* Eliminate all CRs */ if (msgbuf[h] == '\r') { h++; @@ -9878,11 +9880,17 @@ static void lws2sws(struct ast_str *data) } /* Check for end-of-line */ if (msgbuf[h] == '\n') { + if (just_read_eol) { + done_with_headers = 1; + } else { + just_read_eol = 1; + } /* Check for end-of-message */ if (h + 1 == len) break; /* Check for a continuation line */ - if (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t') { + if (!done_with_headers + && (msgbuf[h + 1] == ' ' || msgbuf[h + 1] == '\t')) { /* Merge continuation line */ h++; continue; @@ -9891,8 +9899,11 @@ static void lws2sws(struct ast_str *data) msgbuf[t++] = msgbuf[h++]; lws = 0; continue; + } else { + just_read_eol = 0; } - if (msgbuf[h] == ' ' || msgbuf[h] == '\t') { + if (!done_with_headers + && (msgbuf[h] == ' ' || msgbuf[h] == '\t')) { if (lws) { h++; continue;