X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fcomstack.c;h=96b841ca38dbd0d38e368ac7932f87350954a4ab;hb=aa8b9d245d1ff378c907669a350a4e484b35eac5;hp=640b09b50b5a444d4210aa4af1edd289385b1e7f;hpb=078ac9ebd245ab061726b49c41218549665dc61e;p=yaz-moved-to-github.git diff --git a/src/comstack.c b/src/comstack.c index 640b09b..96b841c 100644 --- a/src/comstack.c +++ b/src/comstack.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2003, Index Data + * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: comstack.c,v 1.2 2003-11-17 10:40:56 mike Exp $ + * $Id: comstack.c,v 1.5 2004-02-19 23:20:44 adam Exp $ */ #include @@ -14,6 +14,10 @@ #include #include +#ifdef WIN32 +#define strncasecmp _strnicmp +#endif + static const char *cs_errlist[] = { "No error or unspecified error", @@ -136,6 +140,7 @@ int cs_look (COMSTACK cs) return cs->event; } +#define CHUNK_DEBUG 0 int cs_complete_auto(const unsigned char *buf, int len) { if (len > 5 && buf[0] >= 0x20 && buf[0] < 0x7f @@ -156,23 +161,25 @@ int cs_complete_auto(const unsigned char *buf, int len) { if (chunked) { + /* inside chunked body .. */ while(1) { int chunk_len = 0; i += 2; -#if 0 +#if CHUNK_DEBUG /* debugging */ if (i >>"); + printf ("\n<<<"); + int j; for (j = i; j <= i+4; j++) printf ("%c", buf[j]); - printf ("<<<\n"); + printf (">>>\n"); } #endif while (1) if (i >= len-2) { -#if 0 +#if CHUNK_DEBUG /* debugging */ printf ("XXXXXXXX not there yet 1\n"); printf ("i=%d len=%d\n", i, len); @@ -192,6 +199,9 @@ int cs_complete_auto(const unsigned char *buf, int len) if (buf[i] != '\r' || buf[i+1] != '\n' || chunk_len < 0) return i+2; /* bad. stop now */ +#if CHUNK_DEBUG + printf ("XXXXXX chunk_len=%d\n", chunk_len); +#endif if (chunk_len == 0) { /* consider trailing headers .. */ @@ -203,7 +213,7 @@ int cs_complete_auto(const unsigned char *buf, int len) return i+4; i++; } -#if 0 +#if CHUNK_DEBUG /* debugging */ printf ("XXXXXXXXX not there yet 2\n"); printf ("i=%d len=%d\n", i, len); @@ -222,21 +232,21 @@ int cs_complete_auto(const unsigned char *buf, int len) } break; } - else if (i < len - 21 && - !memcmp(buf+i, "Transfer-Encoding: ", 18)) + else if (i < len - 20 && + !strncasecmp(buf+i, "Transfer-Encoding:", 18)) { i+=18; - if (buf[i] == ' ') + while (buf[i] == ' ') i++; if (i < len - 8) - if (!memcmp(buf+i, "chunked", 7)) + if (!strncasecmp(buf+i, "chunked", 7)) chunked = 1; } - else if (i < len - 18 && - !memcmp(buf+i, "Content-Length: ", 15)) + else if (i < len - 17 && + !strncasecmp(buf+i, "Content-Length:", 15)) { i+= 15; - if (buf[i] == ' ') + while (buf[i] == ' ') i++; content_len = 0; while (i <= len-4 && isdigit(buf[i]))