X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp.c;h=e4eecb9e2d81cda8c7b6a3588906791a72b66c46;hb=94b1547e5951e1e01bf5180159e74095cd0527f4;hp=62bfa6fe2dda54875f9081f3fd3ad3ab8aa95dc0;hpb=bd0fee845a611e98d52590ade70c5ef414289e24;p=yaz-moved-to-github.git diff --git a/src/http.c b/src/http.c index 62bfa6f..e4eecb9 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') @@ -191,7 +186,7 @@ void z_HTTP_header_add_basic_auth(ODR o, Z_HTTP_Header **hp, buf = (char *) odr_malloc(o, (len+1) * 8/6 + 12); strcpy(buf, "Basic "); yaz_base64encode(tmp, &buf[strlen(buf)]); - z_HTTP_header_add(o, hp, "Authorization", buf); + z_HTTP_header_set(o, hp, "Authorization", buf); } @@ -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; @@ -227,7 +222,7 @@ void z_HTTP_header_set(ODR o, Z_HTTP_Header **hp, const char *n, 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; } @@ -573,21 +568,19 @@ int yaz_encode_http_response(ODR o, Z_HTTP_Response *hr) hr->code, z_HTTP_errmsg(hr->code)); odr_write2(o, sbuf, strlen(sbuf)); - /* apply Content-Length if not already applied */ - if (!z_HTTP_header_lookup(hr->headers, - "Content-Length")) - { - char lstr[60]; - sprintf(lstr, "Content-Length: %d\r\n", - hr->content_len); - odr_write2(o, lstr, strlen(lstr)); - } + /* use content_len for Content-Length */ + sprintf(sbuf, "Content-Length: %d\r\n", hr->content_len); + odr_write2(o, sbuf, strlen(sbuf)); for (h = hr->headers; h; h = h->next) { - odr_write2(o, h->name, strlen(h->name)); - odr_write2(o, ": ", 2); - odr_write2(o, h->value, strlen(h->value)); - odr_write2(o, "\r\n", 2); + 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); + odr_write2(o, h->value, strlen(h->value)); + odr_write2(o, "\r\n", 2); + } } odr_write(o, (unsigned char *) "\r\n", 2); if (hr->content_buf)