|
|
| |
int done = 0; | int done = 0; |
| |
data_string *ds = NULL; |
|
|
|
/* | /* |
* Request: "^(GET|POST|HEAD) ([^ ]+(\\?[^ ]+|)) (HTTP/1\\.[01])$" | * Request: "^(GET|POST|HEAD) ([^ ]+(\\?[^ ]+|)) (HTTP/1\\.[01])$" |
* Option : "^([-a-zA-Z]+): (.+)$" | * Option : "^([-a-zA-Z]+): (.+)$" |
|
|
switch(*cur) { | switch(*cur) { |
case '\r': | case '\r': |
if (con->parse_request->ptr[i+1] == '\n') { | if (con->parse_request->ptr[i+1] == '\n') { |
|
data_string *ds = NULL; |
|
|
/* End of Headerline */ | /* End of Headerline */ |
con->parse_request->ptr[i] = '\0'; | con->parse_request->ptr[i] = '\0'; |
con->parse_request->ptr[i+1] = '\0'; | con->parse_request->ptr[i+1] = '\0'; |
| |
if (in_folding) { | if (in_folding) { |
if (!ds) { |
buffer *key_b; |
|
/** |
|
* we use a evil hack to handle the line-folding |
|
* |
|
* As array_insert_unique() deletes 'ds' in the case of a duplicate |
|
* ds points somewhere and we get a evil crash. As a solution we keep the old |
|
* "key" and get the current value from the hash and append us |
|
* |
|
* */ |
|
|
|
if (!key || !key_len) { |
/* 400 */ | /* 400 */ |
| |
if (srv->srvconf.log_request_header_on_error) { | if (srv->srvconf.log_request_header_on_error) { |
|
|
con->response.keep_alive = 0; | con->response.keep_alive = 0; |
return 0; | return 0; |
} | } |
buffer_append_string(ds->value, value); |
|
|
key_b = buffer_init(); |
|
buffer_copy_string_len(key_b, key, key_len); |
|
|
|
if (NULL != (ds = (data_string *)array_get_element(con->request.headers, key_b->ptr))) { |
|
buffer_append_string(ds->value, value); |
|
} |
|
|
|
buffer_free(key_b); |
} else { | } else { |
int s_len; | int s_len; |
key = con->parse_request->ptr + first; | key = con->parse_request->ptr + first; |
|
|
first = i+1; | first = i+1; |
is_key = 1; | is_key = 1; |
value = 0; | value = 0; |
key_len = 0; |
#if 0 |
|
/** |
|
* for Bug 1230 keep the key_len a live |
|
*/ |
|
key_len = 0; |
|
#endif |
in_folding = 0; | in_folding = 0; |
} else { | } else { |
if (srv->srvconf.log_request_header_on_error) { | if (srv->srvconf.log_request_header_on_error) { |