(get_all_headers): Added code to ignore a "response" line in a header. This was pointed out as being a problem with eBay (cgi.ebay.com)
(process_server_headers): Added code to make skip blank lines before a response line.
This commit is contained in:
parent
00bf9b0346
commit
cf2bd809fb
33
src/reqs.c
33
src/reqs.c
@ -1,4 +1,4 @@
|
|||||||
/* $Id: reqs.c,v 1.77 2002-05-27 02:00:22 rjkaes Exp $
|
/* $Id: reqs.c,v 1.78 2002-05-28 04:53:33 rjkaes Exp $
|
||||||
*
|
*
|
||||||
* This is where all the work in tinyproxy is actually done. Incoming
|
* This is where all the work in tinyproxy is actually done. Incoming
|
||||||
* connections have a new child created for them. The child then
|
* connections have a new child created for them. The child then
|
||||||
@ -560,6 +560,9 @@ get_all_headers(int fd, hashmap_t hashofheaders)
|
|||||||
char *header;
|
char *header;
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
|
|
||||||
|
assert(fd >= 0);
|
||||||
|
assert(hashofheaders != NULL);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if ((len = readline(fd, &header)) <= 0) {
|
if ((len = readline(fd, &header)) <= 0) {
|
||||||
safefree(header);
|
safefree(header);
|
||||||
@ -575,6 +578,17 @@ get_all_headers(int fd, hashmap_t hashofheaders)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* BUG FIX: Need this code to skip a second "HTTP/1.x ... OK"
|
||||||
|
* response. This was needed because of cgi.ebay.com.
|
||||||
|
*
|
||||||
|
* FIXME: Might need to change this to a more robust check.
|
||||||
|
*/
|
||||||
|
if (strncasecmp(header, "HTTP/", 5) == 0) {
|
||||||
|
safefree(header);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (add_header_to_connection(hashofheaders, header, len) < 0) {
|
if (add_header_to_connection(hashofheaders, header, len) < 0) {
|
||||||
safefree(header);
|
safefree(header);
|
||||||
return -1;
|
return -1;
|
||||||
@ -857,9 +871,24 @@ process_server_headers(struct conn_s *connptr)
|
|||||||
/* FIXME: Remember to handle a "simple_req" type */
|
/* FIXME: Remember to handle a "simple_req" type */
|
||||||
|
|
||||||
/* Get the response line from the remote server. */
|
/* Get the response line from the remote server. */
|
||||||
if ((len = readline(connptr->server_fd, &response_line)) <= 0)
|
retry:
|
||||||
|
len = readline(connptr->server_fd, &response_line);
|
||||||
|
if (len <= 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Strip the new line and character return from the string.
|
||||||
|
*/
|
||||||
|
if (chomp(response_line, len) == len) {
|
||||||
|
/*
|
||||||
|
* If the number of characters removed is the same as the
|
||||||
|
* length then it was a blank line. Free the buffer and
|
||||||
|
* try again (since we're looking for a request line.)
|
||||||
|
*/
|
||||||
|
safefree(response_line);
|
||||||
|
goto retry;
|
||||||
|
}
|
||||||
|
|
||||||
hashofheaders = hashmap_create(HEADER_BUCKETS);
|
hashofheaders = hashmap_create(HEADER_BUCKETS);
|
||||||
if (!hashofheaders) {
|
if (!hashofheaders) {
|
||||||
safefree(response_line);
|
safefree(response_line);
|
||||||
|
Loading…
Reference in New Issue
Block a user