First pass at handling multi-line headers
authorMark Spencer <markster@digium.com>
Mon, 26 Apr 2004 03:38:32 +0000 (03:38 +0000)
committerMark Spencer <markster@digium.com>
Mon, 26 Apr 2004 03:38:32 +0000 (03:38 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2763 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c

index ddf8088..086ddce 100755 (executable)
@@ -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;