Apache HTTPD
Classes | Macros | Functions | Variables
mod_reqtimeout.c File Reference
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_connection.h"
#include "http_protocol.h"
#include "http_log.h"
#include "http_core.h"
#include "util_filter.h"
#include "apr_strings.h"
#include "apr_version.h"

Go to the source code of this file.

Classes

struct  reqtimeout_stage_t
 
struct  reqtimeout_srv_cfg
 
struct  reqtimeout_con_cfg
 

Macros

#define APR_WANT_STRFUNC
 
#define UNSET   -1
 
#define MRT_DEFAULT_handshake_TIMEOUT   0 /* disabled */
 
#define MRT_DEFAULT_handshake_MAX_TIMEOUT   0
 
#define MRT_DEFAULT_handshake_MIN_RATE   0
 
#define MRT_DEFAULT_header_TIMEOUT   20
 
#define MRT_DEFAULT_header_MAX_TIMEOUT   40
 
#define MRT_DEFAULT_header_MIN_RATE   500
 
#define MRT_DEFAULT_body_TIMEOUT   20
 
#define MRT_DEFAULT_body_MAX_TIMEOUT   0
 
#define MRT_DEFAULT_body_MIN_RATE   500
 
#define MIN(x, y)   ((x) < (y) ? (x) : (y))
 
#define INIT_STAGE(cfg, ccfg, stage)
 
#define UNSET_STAGE(cfg, stage)
 
#define MERGE_INT(cfg, base, add, val)    cfg->val = (add->val == UNSET) ? base->val : add->val
 
#define MERGE_STAGE(cfg, base, add, stage)
 

Functions

static void extend_timeout (reqtimeout_con_cfg *ccfg, apr_bucket_brigade *bb)
 
static apr_status_t check_time_left (reqtimeout_con_cfg *ccfg, apr_time_t *time_left_p, apr_time_t now)
 
static apr_status_t have_lf_or_eos (apr_bucket_brigade *bb)
 
static apr_status_t brigade_append (apr_bucket_brigade *bbOut, apr_bucket_brigade *bbIn)
 
static apr_status_t reqtimeout_filter (ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
 
static apr_status_t reqtimeout_eor (ap_filter_t *f, apr_bucket_brigade *bb)
 
static int reqtimeout_init (conn_rec *c)
 
static void reqtimeout_before_header (request_rec *r, conn_rec *c)
 
static int reqtimeout_before_body (request_rec *r)
 
static void * reqtimeout_create_srv_config (apr_pool_t *p, server_rec *s)
 
static void * reqtimeout_merge_srv_config (apr_pool_t *p, void *base_, void *add_)
 
static const charparse_int (apr_pool_t *p, const char *arg, int *val)
 
static const charset_reqtimeout_param (reqtimeout_srv_cfg *conf, apr_pool_t *p, const char *key, const char *val)
 
static const charset_reqtimeouts (cmd_parms *cmd, void *mconfig, const char *arg)
 
static void reqtimeout_hooks (apr_pool_t *pool)
 

Variables

static const char *const reqtimeout_filter_name = "reqtimeout"
 
static int default_handshake_rate_factor
 
static int default_header_rate_factor
 
static int default_body_rate_factor
 
static const command_rec reqtimeout_cmds []
 
static int *const aplog_module_index = &( reqtimeout_module.module_index)
 

Macro Definition Documentation

◆ APR_WANT_STRFUNC

#define APR_WANT_STRFUNC

Definition at line 25 of file mod_reqtimeout.c.

◆ INIT_STAGE

#define INIT_STAGE (   cfg,
  ccfg,
  stage 
)
Value:
do { \
if (cfg->stage.timeout != UNSET) { \
ccfg->cur_stage.timeout = cfg->stage.timeout; \
ccfg->cur_stage.max_timeout = cfg->stage.max_timeout; \
ccfg->cur_stage.rate_factor = cfg->stage.rate_factor; \
} \
else { \
ccfg->cur_stage.timeout = MRT_DEFAULT_##stage##_TIMEOUT; \
ccfg->cur_stage.max_timeout = MRT_DEFAULT_##stage##_MAX_TIMEOUT; \
ccfg->cur_stage.rate_factor = default_##stage##_rate_factor; \
} \
} while (0)
apr_size_t size
#define UNSET

Definition at line 357 of file mod_reqtimeout.c.

◆ MERGE_INT

#define MERGE_INT (   cfg,
  base,
  add,
  val 
)     cfg->val = (add->val == UNSET) ? base->val : add->val

Definition at line 473 of file mod_reqtimeout.c.

◆ MERGE_STAGE

#define MERGE_STAGE (   cfg,
  base,
  add,
  stage 
)
Value:
do { \
MERGE_INT(cfg, base, add, stage.timeout); \
MERGE_INT(cfg, base, add, stage.max_timeout); \
MERGE_INT(cfg, base, add, stage.min_rate); \
cfg->stage.rate_factor = (cfg->stage.min_rate == UNSET) \
? base->stage.rate_factor \
: add->stage.rate_factor; \
} while (0)
ap_conf_vector_t * base

Definition at line 475 of file mod_reqtimeout.c.

◆ MIN

#define MIN (   x,
  y 
)    ((x) < (y) ? (x) : (y))

Definition at line 171 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_body_MAX_TIMEOUT

#define MRT_DEFAULT_body_MAX_TIMEOUT   0

Definition at line 39 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_body_MIN_RATE

#define MRT_DEFAULT_body_MIN_RATE   500

Definition at line 40 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_body_TIMEOUT

#define MRT_DEFAULT_body_TIMEOUT   20

Definition at line 38 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_handshake_MAX_TIMEOUT

#define MRT_DEFAULT_handshake_MAX_TIMEOUT   0

Definition at line 33 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_handshake_MIN_RATE

#define MRT_DEFAULT_handshake_MIN_RATE   0

Definition at line 34 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_handshake_TIMEOUT

#define MRT_DEFAULT_handshake_TIMEOUT   0 /* disabled */

Definition at line 32 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_header_MAX_TIMEOUT

#define MRT_DEFAULT_header_MAX_TIMEOUT   40

Definition at line 36 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_header_MIN_RATE

#define MRT_DEFAULT_header_MIN_RATE   500

Definition at line 37 of file mod_reqtimeout.c.

◆ MRT_DEFAULT_header_TIMEOUT

#define MRT_DEFAULT_header_TIMEOUT   20

Definition at line 35 of file mod_reqtimeout.c.

◆ UNSET

#define UNSET   -1

Definition at line 31 of file mod_reqtimeout.c.

◆ UNSET_STAGE

#define UNSET_STAGE (   cfg,
  stage 
)
Value:
do { \
cfg->stage.timeout = UNSET; \
cfg->stage.max_timeout = UNSET; \
cfg->stage.min_rate = UNSET; \
} while (0)

Definition at line 456 of file mod_reqtimeout.c.

Function Documentation

◆ brigade_append()

static apr_status_t brigade_append ( apr_bucket_brigade bbOut,
apr_bucket_brigade bbIn 
)
static

Definition at line 139 of file mod_reqtimeout.c.

◆ check_time_left()

static apr_status_t check_time_left ( reqtimeout_con_cfg ccfg,
apr_time_t time_left_p,
apr_time_t  now 
)
static

Definition at line 91 of file mod_reqtimeout.c.

◆ extend_timeout()

static void extend_timeout ( reqtimeout_con_cfg ccfg,
apr_bucket_brigade bb 
)
static

Definition at line 74 of file mod_reqtimeout.c.

◆ have_lf_or_eos()

static apr_status_t have_lf_or_eos ( apr_bucket_brigade bb)
static

Definition at line 107 of file mod_reqtimeout.c.

◆ parse_int()

static const char * parse_int ( apr_pool_t p,
const char arg,
int val 
)
static

Definition at line 497 of file mod_reqtimeout.c.

◆ reqtimeout_before_body()

static int reqtimeout_before_body ( request_rec r)
static

< Module has handled this stage.

< Module has handled this stage.

Definition at line 429 of file mod_reqtimeout.c.

◆ reqtimeout_before_header()

static void reqtimeout_before_header ( request_rec r,
conn_rec c 
)
static

Definition at line 404 of file mod_reqtimeout.c.

◆ reqtimeout_create_srv_config()

static void * reqtimeout_create_srv_config ( apr_pool_t p,
server_rec s 
)
static

Definition at line 462 of file mod_reqtimeout.c.

◆ reqtimeout_eor()

static apr_status_t reqtimeout_eor ( ap_filter_t f,
apr_bucket_brigade bb 
)
static

Definition at line 348 of file mod_reqtimeout.c.

◆ reqtimeout_filter()

static apr_status_t reqtimeout_filter ( ap_filter_t f,
apr_bucket_brigade bb,
ap_input_mode_t  mode,
apr_read_type_e  block,
apr_off_t  readbytes 
)
static

< Can read without blocking

< Hangup occurred

Definition at line 172 of file mod_reqtimeout.c.

◆ reqtimeout_hooks()

static void reqtimeout_hooks ( apr_pool_t pool)
static

Definition at line 607 of file mod_reqtimeout.c.

◆ reqtimeout_init()

static int reqtimeout_init ( conn_rec c)
static

< Module declines to handle

< Module declines to handle

Definition at line 370 of file mod_reqtimeout.c.

◆ reqtimeout_merge_srv_config()

static void * reqtimeout_merge_srv_config ( apr_pool_t p,
void *  base_,
void *  add_ 
)
static

Definition at line 484 of file mod_reqtimeout.c.

◆ set_reqtimeout_param()

static const char * set_reqtimeout_param ( reqtimeout_srv_cfg conf,
apr_pool_t p,
const char key,
const char val 
)
static

Definition at line 514 of file mod_reqtimeout.c.

◆ set_reqtimeouts()

static const char * set_reqtimeouts ( cmd_parms cmd,
void *  mconfig,
const char arg 
)
static

Definition at line 576 of file mod_reqtimeout.c.

Variable Documentation

◆ aplog_module_index

int* const aplog_module_index = &( reqtimeout_module.module_index)
static

Definition at line 662 of file mod_reqtimeout.c.

◆ default_body_rate_factor

int default_body_rate_factor
static

Definition at line 72 of file mod_reqtimeout.c.

◆ default_handshake_rate_factor

int default_handshake_rate_factor
static

Definition at line 70 of file mod_reqtimeout.c.

◆ default_header_rate_factor

int default_header_rate_factor
static

Definition at line 71 of file mod_reqtimeout.c.

◆ reqtimeout_cmds

const command_rec reqtimeout_cmds[]
static
Initial value:
= {
{ "RequestReadTimeout" , set_reqtimeouts , NULL , 128 , RAW_ARGS, "Set various timeout parameters for TLS handshake and/or " "reading request headers and body" },
{NULL}
}
@ RAW_ARGS
Definition http_config.h:50
static const char * set_reqtimeouts(cmd_parms *cmd, void *mconfig, const char *arg)
return NULL
Definition mod_so.c:359

Definition at line 655 of file mod_reqtimeout.c.

◆ reqtimeout_filter_name

const char* const reqtimeout_filter_name = "reqtimeout"
static

Definition at line 69 of file mod_reqtimeout.c.