Browse Source

[mod_ajp13,mod_fastcgi] recv_parse smaller funcs

break *_recv_parse() into a pair of slightly smaller funcs
Glenn Strauss 1 month ago
parent
commit
a24ee2a56a
  1. 34
      src/mod_ajp13.c
  2. 29
      src/mod_fastcgi.c

34
src/mod_ajp13.c

@ -764,32 +764,30 @@ enum {
};
__attribute_cold__
static handler_t
ajp13_recv_parse (request_st * const r, struct http_response_opts_t * const opts, buffer * const b, size_t n)
ajp13_recv_0(const request_st * const r, const handler_ctx * const hctx)
{
handler_ctx * const hctx = (handler_ctx *)opts->pdata;
log_error_st * const errh = r->conf.errh;
int fin = 0;
if (0 == n) {
if (-1 == hctx->request_id) /*(flag request ended)*/
return HANDLER_FINISHED;
if (!(fdevent_fdnode_interest(hctx->fdn) & FDEVENT_IN)
&& !(r->conf.stream_response_body
& FDEVENT_STREAM_RESPONSE_POLLRDHUP))
return HANDLER_GO_ON;
log_error(errh, __FILE__, __LINE__,
log_error(r->conf.errh, __FILE__, __LINE__,
"unexpected end-of-file (perhaps the ajp13 process died):"
"pid: %d socket: %s",
hctx->proc->pid, hctx->proc->connection_name->ptr);
return HANDLER_ERROR;
}
}
/* future: might try to elide copying if buffer contains full packet(s)
* and prior read did not end in a partial packet */
chunkqueue_append_buffer(hctx->rb, b);
static handler_t
ajp13_recv_parse_loop (request_st * const r, handler_ctx * const hctx)
{
log_error_st * const errh = r->conf.errh;
int fin = 0;
do {
uint8_t header[7];
const off_t rblen = chunkqueue_length(hctx->rb);
@ -838,7 +836,7 @@ ajp13_recv_parse (request_st * const r, struct http_response_opts_t * const opts
(r->http_status == 0 || r->http_status == 200)) {
/* authorizer approved request; ignore the content here */
hctx->send_content_body = 0;
opts->authorizer |= /*(save response streaming flags)*/
hctx->opts.authorizer |= /*(save response streaming flags)*/
(r->conf.stream_response_body
& (FDEVENT_STREAM_RESPONSE
|FDEVENT_STREAM_RESPONSE_BUFMIN)) << 1;
@ -946,6 +944,18 @@ ajp13_recv_parse (request_st * const r, struct http_response_opts_t * const opts
}
static handler_t
ajp13_recv_parse (request_st * const r, struct http_response_opts_t * const opts, buffer * const b, size_t n)
{
handler_ctx * const hctx = (handler_ctx *)opts->pdata;
if (0 == n) return ajp13_recv_0(r, hctx);
/* future: might try to elide copying if buffer contains full packet(s)
* and prior read did not end in a partial packet */
chunkqueue_append_buffer(hctx->rb, b);
return ajp13_recv_parse_loop(r, hctx);
}
static handler_t
ajp13_check_extension (request_st * const r, void *p_d)
{

29
src/mod_fastcgi.c

@ -353,11 +353,8 @@ static void fastcgi_get_packet_body(buffer * const b, handler_ctx * const hctx,
buffer_truncate(b, blen + packet->len - packet->padding);
}
static handler_t fcgi_recv_parse(request_st * const r, struct http_response_opts_t *opts, buffer *b, size_t n) {
handler_ctx *hctx = (handler_ctx *)opts->pdata;
int fin = 0;
if (0 == n) {
__attribute_cold__
static handler_t fcgi_recv_0(const request_st * const r, const handler_ctx * const hctx) {
if (-1 == hctx->request_id) return HANDLER_FINISHED; /*(flag request ended)*/
if (!(fdevent_fdnode_interest(hctx->fdn) & FDEVENT_IN)
&& !(r->conf.stream_response_body & FDEVENT_STREAM_RESPONSE_POLLRDHUP))
@ -368,17 +365,16 @@ static handler_t fcgi_recv_parse(request_st * const r, struct http_response_opts
hctx->proc->pid, hctx->proc->connection_name->ptr);
return HANDLER_ERROR;
}
chunkqueue_append_buffer(hctx->rb, b);
}
static handler_t fcgi_recv_parse_loop(request_st * const r, handler_ctx * const hctx) {
/*
* parse the fastcgi packets and forward the content to the write-queue
*
*/
while (fin == 0) {
fastcgi_response_packet packet;
fastcgi_response_packet packet;
int fin = 0;
do {
/* check if we have at least one packet */
if (0 != fastcgi_get_packet(hctx, &packet)) {
/* no full packet */
@ -413,7 +409,7 @@ static handler_t fcgi_recv_parse(request_st * const r, struct http_response_opts
(r->http_status == 0 || r->http_status == 200)) {
/* authorizer approved request; ignore the content here */
hctx->send_content_body = 0;
opts->authorizer |= /*(save response streaming flags)*/
hctx->opts.authorizer |= /*(save response streaming flags)*/
(r->conf.stream_response_body
& (FDEVENT_STREAM_RESPONSE
|FDEVENT_STREAM_RESPONSE_BUFMIN)) << 1;
@ -465,11 +461,18 @@ static handler_t fcgi_recv_parse(request_st * const r, struct http_response_opts
chunkqueue_mark_written(hctx->rb, packet.len);
break;
}
}
} while (0 == fin);
return 0 == fin ? HANDLER_GO_ON : HANDLER_FINISHED;
}
static handler_t fcgi_recv_parse(request_st * const r, struct http_response_opts_t *opts, buffer *b, size_t n) {
handler_ctx * const hctx = (handler_ctx *)opts->pdata;
if (0 == n) return fcgi_recv_0(r, hctx);
chunkqueue_append_buffer(hctx->rb, b);
return fcgi_recv_parse_loop(r, hctx);
}
static handler_t fcgi_check_extension(request_st * const r, void *p_d, int uri_path_handler) {
plugin_data *p = p_d;
handler_t rc;

Loading…
Cancel
Save