-const char parsers_rcs[] = "$Id: parsers.c,v 1.188 2009/07/05 12:02:54 fabiankeil Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.193 2009/07/11 11:15:53 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/parsers.c,v $
static jb_err create_fake_referrer(char **header, const char *fake_referrer);
static jb_err handle_conditional_hide_referrer_parameter(char **header,
const char *host, const int parameter_conditional_block);
-static const char *get_appropiate_connection_header(const struct client_state *csp);
static void create_content_length_header(unsigned long long content_length,
char *header, size_t buffer_length);
/* XXX: Is this log worthy? */
log_error(LOG_LEVEL_HEADER,
"Client keep-alive timeout is %u. Sticking with %u.",
- keep_alive_timeout, csp->server_connection.keep_alive_timeout);
+ keep_alive_timeout, csp->config->keep_alive_timeout);
}
}
assert(*(*header+14) == ':');
+#ifdef _WIN32
+ if (1 != sscanf(*header+14, ": %I64u", &content_length))
+#else
if (1 != sscanf(*header+14, ": %llu", &content_length))
+#endif
{
log_error(LOG_LEVEL_ERROR, "Crunching invalid header: %s", *header);
freez(*header);
{
const unsigned int flags = csp->flags;
const char *response_status_line = csp->headers->first->str;
- const char *wanted_header = get_appropiate_connection_header(csp);
+ static const char connection_close[] = "Connection: close";
if ((flags & CSP_FLAG_CLIENT_HEADER_PARSING_DONE)
&& (flags & CSP_FLAG_SERVER_CONNECTION_HEADER_SET))
log_error(LOG_LEVEL_HEADER, "A HTTP/1.1 response "
"without Connection header implies keep-alive.");
csp->flags |= CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE;
+ return JB_ERR_OK;
}
- log_error(LOG_LEVEL_HEADER, "Adding: %s", wanted_header);
+ log_error(LOG_LEVEL_HEADER, "Adding: %s", connection_close);
- return enlist(csp->headers, wanted_header);
+ return enlist(csp->headers, connection_close);
}
*********************************************************************/
static jb_err client_connection_header_adder(struct client_state *csp)
{
- const char *wanted_header = get_appropiate_connection_header(csp);
+ static const char connection_close[] = "Connection: close";
if (!(csp->flags & CSP_FLAG_CLIENT_HEADER_PARSING_DONE)
&& (csp->flags & CSP_FLAG_CLIENT_CONNECTION_HEADER_SET))
&& !strcmpic(csp->http->ver, "HTTP/1.1"))
{
csp->flags |= CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE;
+ return JB_ERR_OK;
}
#endif /* FEATURE_CONNECTION_KEEP_ALIVE */
- log_error(LOG_LEVEL_HEADER, "Adding: %s", wanted_header);
+ log_error(LOG_LEVEL_HEADER, "Adding: %s", connection_close);
- return enlist(csp->headers, wanted_header);
+ return enlist(csp->headers, connection_close);
}
}
-/*********************************************************************
- *
- * Function : get_appropiate_connection_header
- *
- * Description : Returns an appropiate Connection header
- * depending on whether or not we try to keep
- * the connection to the server alive.
- *
- * Parameters :
- * 1 : csp = Current client state (buffers, headers, etc...)
- *
- * Returns : Pointer to statically allocated header buffer.
- *
- *********************************************************************/
-static const char *get_appropiate_connection_header(const struct client_state *csp)
-{
- static const char connection_keep_alive[] = "Connection: keep-alive";
- static const char connection_close[] = "Connection: close";
-
- if ((csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)
-#ifdef FEATURE_CONNECTION_KEEP_ALIVE
- && !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)
-#endif
- && (csp->http->ssl == 0))
- {
- return connection_keep_alive;
- }
- return connection_close;
-}
-
-
/*********************************************************************
*
* Function : create_content_length_header