-const char jcc_rcs[] = "$Id: jcc.c,v 1.399 2012/10/21 12:53:33 fabiankeil Exp $";
+const char jcc_rcs[] = "$Id: jcc.c,v 1.405 2012/10/21 13:04:34 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/jcc.c,v $
"Possible pipeline attempt detected. The connection will not "
"be kept alive and we will only serve the first request.");
/* Nuke the pipelined requests from orbit, just to be sure. */
- csp->client_iob->buf[0] = '\0';
- csp->client_iob->eod = csp->client_iob->cur = csp->client_iob->buf;
+ clear_iob(csp->client_iob);
}
else
{
struct list header_list;
struct list *headers = &header_list;
+ /* We don't care if the arriving data is a valid HTTP request or not. */
+ csp->requests_received_total++;
+
http = csp->http;
memset(buf, 0, sizeof(buf));
{
if (csp->server_connection.sfd != JB_INVALID_SOCKET)
{
- log_error(LOG_LEVEL_CONNECT,
- "Closing server socket %u. Opened for %s.",
- csp->server_connection.sfd, csp->server_connection.host);
- close_socket(csp->server_connection.sfd);
+#ifdef FEATURE_CONNECTION_SHARING
+ if (csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)
+ {
+ remember_connection(&csp->server_connection);
+ }
+ else
+#endif /* def FEATURE_CONNECTION_SHARING */
+ {
+ log_error(LOG_LEVEL_CONNECT,
+ "Closing server socket %d connected to %s. Total requests: %u.",
+ csp->server_connection.sfd, csp->server_connection.host,
+ csp->server_connection.requests_sent_total);
+ close_socket(csp->server_connection.sfd);
+ }
mark_connection_closed(&csp->server_connection);
}
#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
{
return;
}
- IOB_RESET(csp->client_iob);
+ clear_iob(csp->client_iob);
}
log_error(LOG_LEVEL_CONNECT, "to %s successful", http->hostport);
csp->expected_content_length = 0;
csp->expected_client_content_length = 0;
list_remove_all(csp->headers);
- IOB_RESET(csp->iob);
+ clear_iob(csp->iob);
freez(csp->error_message);
free_http_request(csp->http);
destroy_list(csp->headers);
* Freeing the buffer itself isn't technically necessary,
* but makes debugging more convenient.
*/
- IOB_RESET(csp->client_iob);
+ clear_iob(csp->client_iob);
}
}
#endif /* def FEATURE_CONNECTION_KEEP_ALIVE */
& RUNTIME_FEATURE_CONNECTION_KEEP_ALIVE)
&& !(csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED)
&& (csp->cfd != JB_INVALID_SOCKET)
- && ((csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE)
- || (csp->config->feature_flags &
- RUNTIME_FEATURE_CONNECTION_SHARING));
+ && (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE);
if (!(csp->flags & CSP_FLAG_CRUNCHED)
&& (csp->server_connection.sfd != JB_INVALID_SOCKET))
|| !(latency < csp->server_connection.keep_alive_timeout))
{
log_error(LOG_LEVEL_CONNECT,
- "Closing connection on server socket %d to %s: "
- "keep-alive %u, tainted: %u, socket alive %u. %s timeout: %u.",
+ "Closing server socket %d connected to %s: "
+ "Keep-alive %u. Tainted: %u. Socket alive %u. Timeout: %u.",
csp->server_connection.sfd, csp->server_connection.host,
0 != (csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE),
0 != (csp->flags & CSP_FLAG_SERVER_SOCKET_TAINTED),
socket_is_still_alive(csp->server_connection.sfd),
- ((csp->flags & CSP_FLAG_SERVER_KEEP_ALIVE_TIMEOUT_SET) ?
- "Specified" : "Assumed"), csp->server_connection.keep_alive_timeout);
+ csp->server_connection.keep_alive_timeout);
#ifdef FEATURE_CONNECTION_SHARING
if (csp->config->feature_flags & RUNTIME_FEATURE_CONNECTION_SHARING)
{
if (((csp->flags & CSP_FLAG_PIPELINED_REQUEST_WAITING) != 0)
&& socket_is_still_alive(csp->cfd))
{
- log_error(LOG_LEVEL_CONNECT, "A client request has been "
+ log_error(LOG_LEVEL_CONNECT, "Client request %d has been "
"pipelined on socket %d and the socket is still alive.",
- csp->cfd);
+ csp->requests_received_total+1, csp->cfd);
prepare_csp_for_next_request(csp);
continue;
}
&& socket_is_still_alive(csp->cfd))
{
log_error(LOG_LEVEL_CONNECT,
- "Client request arrived in time on socket %d.", csp->cfd);
+ "Client request %u arrived in time on socket %d.",
+ csp->requests_received_total+1, csp->cfd);
prepare_csp_for_next_request(csp);
}
else
else if (csp->server_connection.sfd != JB_INVALID_SOCKET)
{
log_error(LOG_LEVEL_CONNECT,
- "Closing server socket %d connected to %s. Keep-alive %u. "
- "Tainted: %u. Socket alive %u. Timeout: %u. "
+ "Closing server socket %d connected to %s. Keep-alive: %u. "
+ "Tainted: %u. Socket alive: %u. Timeout: %u. "
"Configuration file change detected: %u",
csp->server_connection.sfd, csp->server_connection.host,
0 != (csp->flags & CSP_FLAG_SERVER_CONNECTION_KEEP_ALIVE),
if (csp->cfd != JB_INVALID_SOCKET)
{
log_error(LOG_LEVEL_CONNECT, "Closing client socket %d. "
- "Keep-alive: %u, Socket alive: %u. Data available: %u. "
- "Configuration file change detected: %u.",
+ "Keep-alive: %u. Socket alive: %u. Data available: %u. "
+ "Configuration file change detected: %u. Requests received: %u.",
csp->cfd, 0 != (csp->flags & CSP_FLAG_CLIENT_CONNECTION_KEEP_ALIVE),
socket_is_still_alive(csp->cfd), data_is_available(csp->cfd, 0),
- config_file_change_detected);
+ config_file_change_detected, csp->requests_received_total);
drain_and_close_socket(csp->cfd);
}