From c924d1a3220247022df9547b22ca93314d9e1738 Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Mon, 26 Apr 2004 03:38:32 +0000 Subject: [PATCH] First pass at handling multi-line headers git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2763 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index ddf8088cd1..086ddce2b8 100755 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -1934,7 +1934,7 @@ static int sip_register(char *value, int lineno) static void parse(struct sip_request *req) { /* Divide fields by NULL's */ - char *c; + char *c, *last = NULL; int f = 0; c = req->data; @@ -1955,9 +1955,18 @@ static void parse(struct sip_request *req) } if (f >= SIP_MAX_HEADERS - 1) { ast_log(LOG_WARNING, "Too many SIP headers...\n"); - } else - f++; - req->header[f] = c + 1; + } else { + if ((c[1] == ' ') || (c[1] == '\t')) { + /* Continuation of previous header */ + if (last) { + while(last < c) + *(last++) = ' '; + } + } else { + f++; + req->header[f] = c + 1; + } + } } else if (*c == '\r') { /* Ignore but eliminate \r's */ *c = 0;