handle_connection(): factor out failure code

this allows us in a next step to replace goto fail with a call to that
function, so we can see in a backtrace from where the failure was
triggered.
This commit is contained in:
rofl0r 2020-09-10 14:37:56 +01:00
parent b549ba5af3
commit e94cbdb3a5

View File

@ -1485,6 +1485,31 @@ get_request_entity(struct conn_s *connptr)
return ret;
}
static void handle_connection_failure(struct conn_s *connptr)
{
/*
* First, get the body if there is one.
* If we don't read all there is from the socket first,
* it is still marked for reading and we won't be able
* to send our data properly.
*/
if (get_request_entity (connptr) < 0) {
log_message (LOG_WARNING,
"Could not retrieve request entity");
indicate_http_error (connptr, 400, "Bad Request",
"detail",
"Could not retrieve the request entity "
"the client.", NULL);
update_stats (STAT_BADCONN);
}
if (connptr->error_variables) {
send_http_error_message (connptr);
} else if (connptr->show_stats) {
showstats (connptr);
}
}
/*
* This is the main drive for each connection. As you can tell, for the
@ -1712,27 +1737,7 @@ e401:
goto done;
fail:
/*
* First, get the body if there is one.
* If we don't read all there is from the socket first,
* it is still marked for reading and we won't be able
* to send our data properly.
*/
if (get_request_entity (connptr) < 0) {
log_message (LOG_WARNING,
"Could not retrieve request entity");
indicate_http_error (connptr, 400, "Bad Request",
"detail",
"Could not retrieve the request entity "
"the client.", NULL);
update_stats (STAT_BADCONN);
}
if (connptr->error_variables) {
send_http_error_message (connptr);
} else if (connptr->show_stats) {
showstats (connptr);
}
handle_connection_failure(connptr);
done:
free_request_struct (request);