X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp.c;h=6819e5f48d1a7125a69a56e7a5f87e2f7c7955e4;hb=beab89a43b1060eff01824c32298128ef83a816e;hp=d16db355bc4840c1c7bc66ce15dd46a3febfcc1b;hpb=4d32d8e976a69219ccbe14572d18e2e6fb75ed27;p=yaz-moved-to-github.git diff --git a/src/http.c b/src/http.c index d16db35..6819e5f 100644 --- a/src/http.c +++ b/src/http.c @@ -17,11 +17,6 @@ #include #include -#ifdef WIN32 -#define strncasecmp _strnicmp -#define strcasecmp _stricmp -#endif - static int decode_headers_content(ODR o, int off, Z_HTTP_Header **headers, char **content_buf, int *content_len) { @@ -64,9 +59,9 @@ static int decode_headers_content(ODR o, int off, Z_HTTP_Header **headers, memcpy ((*headers)->value, o->buf + po, i - po); (*headers)->value[i - po] = '\0'; - if (!strcasecmp((*headers)->name, "Transfer-Encoding") + if (!yaz_strcasecmp((*headers)->name, "Transfer-Encoding") && - !strcasecmp((*headers)->value, "chunked")) + !yaz_strcasecmp((*headers)->value, "chunked")) chunked = 1; headers = &(*headers)->next; if (i < o->size-1 && o->buf[i] == '\r') @@ -211,7 +206,7 @@ void z_HTTP_header_set(ODR o, Z_HTTP_Header **hp, const char *n, { while (*hp) { - if (!strcmp((*hp)->name, n)) + if (!yaz_strcasecmp((*hp)->name, n)) { (*hp)->value = odr_strdup(o, v); return; @@ -224,10 +219,25 @@ void z_HTTP_header_set(ODR o, Z_HTTP_Header **hp, const char *n, (*hp)->next = 0; } +const char *z_HTTP_header_remove(Z_HTTP_Header **hp, const char *n) +{ + while (*hp) + { + if (!yaz_strcasecmp((*hp)->name, n)) + { + const char *v = (*hp)->value; + *hp = (*hp)->next; + return v; + } + hp = &(*hp)->next; + } + return 0; +} + const char *z_HTTP_header_lookup(const Z_HTTP_Header *hp, const char *n) { for (; hp; hp = hp->next) - if (!yaz_matchstr(hp->name, n)) + if (!yaz_strcasecmp(hp->name, n)) return hp->value; return 0; } @@ -578,7 +588,8 @@ int yaz_encode_http_response(ODR o, Z_HTTP_Response *hr) odr_write2(o, sbuf, strlen(sbuf)); for (h = hr->headers; h; h = h->next) { - if (yaz_matchstr(h->name, "Content-Length")) + if (yaz_strcasecmp(h->name, "Content-Length") + && yaz_strcasecmp(h->name, "Transfer-Encoding")) { /* skip Content-Length if given. content_len rules */ odr_write2(o, h->name, strlen(h->name)); odr_write2(o, ": ", 2);