Apache2
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
HTTP Protocol Handling
Collaboration diagram for HTTP Protocol Handling:

Data Structures

struct  ap_bucket_error
 A bucket referring to an HTTP error. More...
 

Macros

#define AP_METHOD_CHECK_ALLOWED(mask, methname)   ((mask) & (AP_METHOD_BIT << ap_method_number_of((methname))))
 
#define ap_rgetline(s, n, read, r, fold, bb)   ap_rgetline_core((s), (n), (read), (r), (fold), (bb))
 
#define AP_PROTOCOL_HTTP1   "http/1.1"
 
#define AP_BUCKET_IS_ERROR(e)   (e->type == &ap_bucket_type_error)
 

Typedefs

typedef struct ap_bucket_error ap_bucket_error
 

Enumerations

enum  ap_condition_e { AP_CONDITION_NONE, AP_CONDITION_NOMATCH, AP_CONDITION_WEAK, AP_CONDITION_STRONG }
 

Functions

request_recap_read_request (conn_rec *c)
 
void ap_get_mime_headers (request_rec *r)
 
void ap_get_mime_headers_core (request_rec *r, apr_bucket_brigade *bb)
 
void ap_finalize_request_protocol (request_rec *r)
 
void ap_send_error_response (request_rec *r, int recursive_error)
 
void ap_set_content_length (request_rec *r, apr_off_t length)
 
int ap_set_keepalive (request_rec *r)
 
apr_time_t ap_rationalize_mtime (request_rec *r, apr_time_t mtime)
 
const char * ap_make_content_type (request_rec *r, const char *type)
 
void ap_setup_make_content_type (apr_pool_t *pool)
 
char * ap_make_etag (request_rec *r, int force_weak)
 
void ap_set_etag (request_rec *r)
 
void ap_set_last_modified (request_rec *r)
 
ap_condition_e ap_condition_if_match (request_rec *r, apr_table_t *headers)
 
ap_condition_e ap_condition_if_unmodified_since (request_rec *r, apr_table_t *headers)
 
ap_condition_e ap_condition_if_none_match (request_rec *r, apr_table_t *headers)
 
ap_condition_e ap_condition_if_modified_since (request_rec *r, apr_table_t *headers)
 
ap_condition_e ap_condition_if_range (request_rec *r, apr_table_t *headers)
 
int ap_meets_conditions (request_rec *r)
 
apr_status_t ap_send_fd (apr_file_t *fd, request_rec *r, apr_off_t offset, apr_size_t length, apr_size_t *nbytes)
 
apr_size_t ap_send_mmap (apr_mmap_t *mm, request_rec *r, apr_size_t offset, apr_size_t length)
 
int ap_method_register (apr_pool_t *p, const char *methname)
 
void ap_method_registry_init (apr_pool_t *p)
 
ap_method_list_tap_make_method_list (apr_pool_t *p, int nelts)
 
void ap_copy_method_list (ap_method_list_t *dest, ap_method_list_t *src)
 
int ap_method_in_list (ap_method_list_t *l, const char *method)
 
void ap_method_list_add (ap_method_list_t *l, const char *method)
 
void ap_method_list_remove (ap_method_list_t *l, const char *method)
 
void ap_clear_method_list (ap_method_list_t *l)
 
void ap_set_content_type (request_rec *r, const char *ct)
 
void ap_set_accept_ranges (request_rec *r)
 
int ap_rputc (int c, request_rec *r)
 
int ap_rwrite (const void *buf, int nbyte, request_rec *r)
 
int ap_rvputs (request_rec *r,...) AP_FN_ATTR_SENTINEL
 
int ap_vrprintf (request_rec *r, const char *fmt, va_list vlist)
 
int ap_rprintf (request_rec *r, const char *fmt,...) __attribute__((format(printf
 
int int ap_rflush (request_rec *r)
 
int ap_index_of_response (int status)
 
const char * ap_get_status_line (int status)
 
int ap_setup_client_block (request_rec *r, int read_policy)
 
int ap_should_client_block (request_rec *r)
 
long ap_get_client_block (request_rec *r, char *buffer, apr_size_t bufsiz)
 
int ap_map_http_request_error (apr_status_t rv, int status)
 
int ap_discard_request_body (request_rec *r)
 
void ap_note_auth_failure (request_rec *r)
 
void ap_note_basic_auth_failure (request_rec *r)
 
void ap_note_digest_auth_failure (request_rec *r)
 
int note_auth_failure (request_rec *r, const char *auth_type)
 
int ap_get_basic_auth_pw (request_rec *r, const char **pw)
 
void ap_parse_uri (request_rec *r, const char *uri)
 
int ap_getline (char *s, int n, request_rec *r, int fold)
 
apr_status_t ap_rgetline_core (char **s, apr_size_t n, apr_size_t *read, request_rec *r, int fold, apr_bucket_brigade *bb)
 
int ap_method_number_of (const char *method)
 
const char * ap_method_name_of (apr_pool_t *p, int methnum)
 
void pre_read_request (request_rec *r, conn_rec *c)
 
int post_read_request (request_rec *r)
 
int log_transaction (request_rec *r)
 
const char * http_scheme (const request_rec *r)
 
apr_port_t default_port (const request_rec *r)
 
int protocol_propose (conn_rec *c, request_rec *r, server_rec *s, const apr_array_header_t *offers, apr_array_header_t *proposals)
 
int protocol_switch (conn_rec *c, request_rec *r, server_rec *s, const char *protocol)
 
const char * protocol_get (const conn_rec *c)
 
apr_status_t ap_get_protocol_upgrades (conn_rec *c, request_rec *r, server_rec *s, int report_all, const apr_array_header_t **pupgrades)
 
const char * ap_select_protocol (conn_rec *c, request_rec *r, server_rec *s, const apr_array_header_t *choices)
 
apr_status_t ap_switch_protocol (conn_rec *c, request_rec *r, server_rec *s, const char *protocol)
 
const char * ap_get_protocol (conn_rec *c)
 
int ap_is_allowed_protocol (conn_rec *c, request_rec *r, server_rec *s, const char *protocol)
 
apr_bucketap_bucket_error_make (apr_bucket *b, int error, const char *buf, apr_pool_t *p)
 
apr_bucketap_bucket_error_create (int error, const char *buf, apr_pool_t *p, apr_bucket_alloc_t *list)
 
apr_status_t ap_byterange_filter (ap_filter_t *f, apr_bucket_brigade *b)
 
apr_status_t ap_http_header_filter (ap_filter_t *f, apr_bucket_brigade *b)
 
apr_status_t ap_content_length_filter (ap_filter_t *, apr_bucket_brigade *)
 
apr_status_t ap_old_write_filter (ap_filter_t *f, apr_bucket_brigade *b)
 
void ap_set_sub_req_protocol (request_rec *rnew, const request_rec *r)
 
void ap_finalize_sub_req_protocol (request_rec *sub_r)
 
void ap_send_interim_response (request_rec *r, int send_headers)
 

Variables

AP_DECLARE_DATA ap_filter_rec_tap_old_write_func
 
AP_DECLARE_DATA const
apr_bucket_type_t 
ap_bucket_type_error
 

Detailed Description

Macro Definition Documentation

#define AP_BUCKET_IS_ERROR (   e)    (e->type == &ap_bucket_type_error)

Determine if a bucket is an error bucket

Parameters
eThe bucket to inspect
Returns
true or false
#define AP_METHOD_CHECK_ALLOWED (   mask,
  methname 
)    ((mask) & (AP_METHOD_BIT << ap_method_number_of((methname))))

This is a convenience macro to ease with checking a mask against a method name.

#define AP_PROTOCOL_HTTP1   "http/1.1"
#define ap_rgetline (   s,
  n,
  read,
  r,
  fold,
  bb 
)    ap_rgetline_core((s), (n), (read), (r), (fold), (bb))

Get the next line of input for the request

Note: on ASCII boxes, ap_rgetline is a macro which simply calls ap_rgetline_core to get the line of input.

on EBCDIC boxes, ap_rgetline is a wrapper function which translates ASCII protocol lines to the local EBCDIC code page after getting the line of input.

Parameters
sPointer to the pointer to the buffer into which the line should be read; if *s==NULL, a buffer of the necessary size to hold the data will be allocated from the request pool
nThe size of the buffer
readThe length of the line.
rThe request
foldWhether to merge continuation lines
bbWorking brigade to use when reading buckets
Returns
APR_SUCCESS, if successful APR_ENOSPC, if the line is too big to fit in the buffer Other errors where appropriate

Typedef Documentation

Enumeration Type Documentation

Enumerator
AP_CONDITION_NONE 
AP_CONDITION_NOMATCH 
AP_CONDITION_WEAK 
AP_CONDITION_STRONG 

Function Documentation

apr_bucket* ap_bucket_error_create ( int  error,
const char *  buf,
apr_pool_t p,
apr_bucket_alloc_t list 
)

Create a bucket referring to an HTTP error.

Parameters
errorThe HTTP error code to put in the bucket.
bufAn optional error string to put in the bucket.
pA pool to allocate the error string out of.
listThe bucket allocator from which to allocate the bucket
Returns
The new bucket, or NULL if allocation failed
apr_bucket* ap_bucket_error_make ( apr_bucket b,
int  error,
const char *  buf,
apr_pool_t p 
)

Make the bucket passed in an error bucket

Parameters
bThe bucket to make into an error bucket
errorThe HTTP error code to put in the bucket.
bufAn optional error string to put in the bucket.
pA pool to allocate out of.
Returns
The new bucket, or NULL if allocation failed
apr_status_t ap_byterange_filter ( ap_filter_t f,
apr_bucket_brigade b 
)
void ap_clear_method_list ( ap_method_list_t l)

Reset a method list to be completely empty.

Parameters
lPointer to a method list, such as r->allowed_methods.
Returns
None.
ap_condition_e ap_condition_if_match ( request_rec r,
apr_table_t headers 
)

Tests conditional request rules for the If-Match header.

Parameters
rThe current request
headersThe response headers to check against
Returns
AP_CONDITION_NONE if the header is missing, AP_CONDITION_NOMATCH if the header does not match, AP_CONDITION_STRONG for a strong match. Weak matches are not permitted for the If-Match header.
ap_condition_e ap_condition_if_modified_since ( request_rec r,
apr_table_t headers 
)

Tests conditional request rules for the If-Modified-Since header.

Parameters
rThe current request
headersThe response headers to check against
Returns
AP_CONDITION_NONE if the header is missing, AP_CONDITION_NOMATCH if the header does not match, AP_CONDITION_WEAK if a weak match was present and allowed by RFC2616, AP_CONDITION_STRONG for a strong match.
ap_condition_e ap_condition_if_none_match ( request_rec r,
apr_table_t headers 
)

Tests conditional request rules for the If-None-Match header.

Parameters
rThe current request
headersThe response headers to check against
Returns
AP_CONDITION_NONE if the header is missing, AP_CONDITION_NOMATCH if the header does not match, AP_CONDITION_WEAK if a weak match was present and allowed by RFC2616, AP_CONDITION_STRONG for a strong match.
ap_condition_e ap_condition_if_range ( request_rec r,
apr_table_t headers 
)

Tests conditional request rules for the If-Range header.

Parameters
rThe current request
headersThe response headers to check against
Returns
AP_CONDITION_NONE if either the If-Range or Range header is missing, AP_CONDITION_NOMATCH if the header does not match, AP_CONDITION_STRONG for a strong match. Weak matches are not permitted for the If-Range header.
ap_condition_e ap_condition_if_unmodified_since ( request_rec r,
apr_table_t headers 
)

Tests conditional request rules for the If-Unmodified-Since header.

Parameters
rThe current request
headersThe response headers to check against
Returns
AP_CONDITION_NONE if the header is missing, AP_CONDITION_NOMATCH if the header does not match, AP_CONDITION_WEAK if a weak match was present and allowed by RFC2616, AP_CONDITION_STRONG for a strong match.
apr_status_t ap_content_length_filter ( ap_filter_t ,
apr_bucket_brigade  
)
void ap_copy_method_list ( ap_method_list_t dest,
ap_method_list_t src 
)

Copy a method list

Parameters
destList to copy to
srcList to copy from
int ap_discard_request_body ( request_rec r)

In HTTP/1.1, any method can have a body. However, most GET handlers wouldn't know what to do with a request body if they received one. This helper routine tests for and reads any message body in the request, simply discarding whatever it receives. We need to do this because failing to read the request body would cause it to be interpreted as the next request on a persistent connection.

Parameters
rThe current request
Returns
error status if request is malformed, OK otherwise
void ap_finalize_request_protocol ( request_rec r)

Called at completion of sending the response. It sends the terminating protocol information.

Parameters
rThe current request
void ap_finalize_sub_req_protocol ( request_rec sub_r)

A wrapup function to keep the internal accounting straight. Indicates that there is no more content coming.

Parameters
sub_rSubrequest that is now compete
int ap_get_basic_auth_pw ( request_rec r,
const char **  pw 
)

Get the password from the request headers

Parameters
rThe current request
pwThe password as set in the headers
Returns
0 (OK) if it set the 'pw' argument (and assured a correct value in r->user); otherwise it returns an error code, either HTTP_INTERNAL_SERVER_ERROR if things are really confused, HTTP_UNAUTHORIZED if no authentication at all seemed to be in use, or DECLINED if there was authentication but it wasn't Basic (in which case, the caller should presumably decline as well).
long ap_get_client_block ( request_rec r,
char *  buffer,
apr_size_t  bufsiz 
)

Call this in a loop. It will put data into a buffer and return the length of the input block

Parameters
rThe current request
bufferThe buffer in which to store the data
bufsizThe size of the buffer
Returns
Number of bytes inserted into the buffer. When done reading, 0 if EOF, or -1 if there was an error
void ap_get_mime_headers ( request_rec r)

Read the mime-encoded headers.

Parameters
rThe current request
void ap_get_mime_headers_core ( request_rec r,
apr_bucket_brigade bb 
)

Optimized version of ap_get_mime_headers() that requires a temporary brigade to work with

Parameters
rThe current request
bbtemp brigade
const char* ap_get_protocol ( conn_rec c)

Call the protocol_get hook to determine the protocol currently in use for the given connection.

Unless another protocol has been switch to, will default to

See Also
AP_PROTOCOL_HTTP1 and modules implementing a new protocol must report a switched connection via the protocol_get hook.
Parameters
cThe connection to determine the protocol for
Returns
the protocol in use, never NULL
apr_status_t ap_get_protocol_upgrades ( conn_rec c,
request_rec r,
server_rec s,
int  report_all,
const apr_array_header_t **  pupgrades 
)

Get the protocols that the connection and optional request may upgrade to - besides the protocol currently active on the connection. These values may be used to announce to a client what choices it has.

If report_all == 0, only protocols more preferable than the one currently being used, are reported. Otherwise, all available protocols beside the current one are being reported.

Parameters
cThe current connection
rThe current request or NULL
sThe server/virtual host selected or NULL
report_allinclude also protocols less preferred than the current one
pupgradeson return, possible protocols to upgrade to in descending order of preference. Maybe NULL if none are available.
const char* ap_get_status_line ( int  status)

Return the Status-Line for a given status code (excluding the HTTP-Version field). If an invalid or unknown status code is passed, "500 Internal Server Error" will be returned.

Parameters
statusThe HTTP status code
Returns
The Status-Line
int ap_getline ( char *  s,
int  n,
request_rec r,
int  fold 
)

Get the next line of input for the request

Parameters
sThe buffer into which to read the line
nThe size of the buffer
rThe request
foldWhether to merge continuation lines
Returns
The length of the line, if successful n, if the line is too big to fit in the buffer -1 for miscellaneous errors
apr_status_t ap_http_header_filter ( ap_filter_t f,
apr_bucket_brigade b 
)
int ap_index_of_response ( int  status)

Index used in custom_responses array for a specific error code (only use outside protocol.c is in getting them configured).

Parameters
statusHTTP status code
Returns
The index of the response
int ap_is_allowed_protocol ( conn_rec c,
request_rec r,
server_rec s,
const char *  protocol 
)

Check if the given protocol is an allowed choice on the given combination of connection, request and server.

When server is NULL, it is taken from request_rec, unless request_rec is NULL. Then it is taken from the connection base server.

Parameters
cThe current connection
rThe current request or NULL
sThe server/virtual host selected or NULL
protocolthe protocol to switch to
Returns
!= 0 iff protocol is allowed
const char* ap_make_content_type ( request_rec r,
const char *  type 
)

Build the content-type that should be sent to the client from the content-type specified. The following rules are followed:

  • if type is NULL or "", return NULL (do not set content-type).
  • if charset adding is disabled, stop processing and return type.
  • then, if there are no parameters on type, add the default charset
  • return type
    Parameters
    rThe current request
    typeThe content type
    Returns
    The content-type
char* ap_make_etag ( request_rec r,
int  force_weak 
)

Construct an entity tag from the resource information. If it's a real file, build in some of the file characteristics.

Parameters
rThe current request
force_weakForce the entity tag to be weak - it could be modified again in as short an interval.
Returns
The entity tag
ap_method_list_t* ap_make_method_list ( apr_pool_t p,
int  nelts 
)

Create a new method list with the specified number of preallocated slots for extension methods.

Parameters
pPointer to a pool in which the structure should be allocated.
neltsNumber of preallocated extension slots
Returns
Pointer to the newly created structure.
int ap_map_http_request_error ( apr_status_t  rv,
int  status 
)
int ap_meets_conditions ( request_rec r)

Implements condition GET rules for HTTP/1.1 specification. This function inspects the client headers and determines if the response fulfills the requirements specified.

Parameters
rThe current request
Returns
OK if the response fulfills the condition GET rules, some other status code otherwise
int ap_method_in_list ( ap_method_list_t l,
const char *  method 
)

Search for an HTTP method name in an ap_method_list_t structure, and return true if found.

Parameters
methodString containing the name of the method to check.
lPointer to a method list, such as r->allowed_methods.
Returns
1 if method is in the list, otherwise 0
void ap_method_list_add ( ap_method_list_t l,
const char *  method 
)

Add an HTTP method name to an ap_method_list_t structure if it isn't already listed.

Parameters
methodString containing the name of the method to check.
lPointer to a method list, such as r->allowed_methods.
Returns
None.
void ap_method_list_remove ( ap_method_list_t l,
const char *  method 
)

Remove an HTTP method name from an ap_method_list_t structure.

Parameters
lPointer to a method list, such as r->allowed_methods.
methodString containing the name of the method to remove.
Returns
None.
const char* ap_method_name_of ( apr_pool_t p,
int  methnum 
)

Get the method name associated with the given internal method number. Returns NULL if not recognized.

Parameters
pA pool to use for temporary allocations.
methnumAn integer value corresponding to an internal method number
Returns
The name corresponding to the method number
int ap_method_number_of ( const char *  method)

Get the method number associated with the given string, assumed to contain an HTTP method. Returns M_INVALID if not recognized.

Parameters
methodA string containing a valid HTTP method
Returns
The method number
int ap_method_register ( apr_pool_t p,
const char *  methname 
)

Register a new request method, and return the offset that will be associated with that method.

Parameters
pThe pool to create registered method numbers from.
methnameThe name of the new method to register.
Returns
An int value representing an offset into a bitmask.
void ap_method_registry_init ( apr_pool_t p)

Initialize the method_registry and allocate memory for it.

Parameters
pPool to allocate memory for the registry from.
void ap_note_auth_failure ( request_rec r)

Setup the output headers so that the client knows how to authenticate itself the next time, if an authentication request failed.

Parameters
rThe current request
void ap_note_basic_auth_failure ( request_rec r)
void ap_note_digest_auth_failure ( request_rec r)
apr_status_t ap_old_write_filter ( ap_filter_t f,
apr_bucket_brigade b 
)
void ap_parse_uri ( request_rec r,
const char *  uri 
)

parse_uri: break apart the uri

Warning
Side Effects:
  • sets r->args to rest after '?' (or NULL if no '?')
  • sets r->uri to request uri (without r->args part)
  • sets r->hostname (if not set already) from request (scheme://host:port)
Parameters
rThe current request
uriThe uri to break apart
apr_time_t ap_rationalize_mtime ( request_rec r,
apr_time_t  mtime 
)

Return the latest rational time from a request/mtime pair. Mtime is returned unless it's in the future, in which case we return the current time.

Parameters
rThe current request
mtimeThe last modified time
Returns
the latest rational time.
request_rec* ap_read_request ( conn_rec c)

Read a request and fill in the fields.

Parameters
cThe current connection
Returns
The new request_rec
int int ap_rflush ( request_rec r)

Flush all of the data for the current request to the client

Parameters
rThe current request
Returns
0 on success, -1 if an error occurred
apr_status_t ap_rgetline_core ( char **  s,
apr_size_t  n,
apr_size_t read,
request_rec r,
int  fold,
apr_bucket_brigade bb 
)
See Also
ap_rgetline
int ap_rprintf ( request_rec r,
const char *  fmt,
  ... 
)

Output data to the client in a printf format

Parameters
rThe current request
fmtThe format string
...The arguments to use to fill out the format string
Returns
The number of bytes sent
int ap_rputc ( int  c,
request_rec r 
)

Output one character for this request

Parameters
cthe character to output
rthe current request
Returns
The number of bytes sent
int ap_rvputs ( request_rec r,
  ... 
)

Write an unspecified number of strings to the request

Parameters
rThe current request
...The strings to write
Returns
The number of bytes sent
int ap_rwrite ( const void buf,
int  nbyte,
request_rec r 
)

Write a buffer for the current request

Parameters
bufThe buffer to write
nbyteThe number of bytes to send from the buffer
rThe current request
Returns
The number of bytes sent
const char* ap_select_protocol ( conn_rec c,
request_rec r,
server_rec s,
const apr_array_header_t choices 
)

Select a protocol for the given connection and optional request. Will return the protocol identifier selected which may be the protocol already in place on the connection. The selected protocol will be NULL if non of the given choices could be agreed upon (e.g. no proposal as made).

A special case is where the choices itself is NULL (instead of empty). In this case there are no restrictions imposed on protocol selection.

Parameters
cThe current connection
rThe current request or NULL
sThe server/virtual host selected
choicesA list of protocol identifiers, normally the clients whishes
Returns
The selected protocol or NULL if no protocol could be agreed upon
void ap_send_error_response ( request_rec r,
int  recursive_error 
)

Send error back to client.

Parameters
rThe current request
recursive_errorlast arg indicates error status in case we get an error in the process of trying to deal with an ErrorDocument to handle some other error. In that case, we print the default report for the first thing that went wrong, and more briefly report on the problem with the ErrorDocument.
apr_status_t ap_send_fd ( apr_file_t fd,
request_rec r,
apr_off_t  offset,
apr_size_t  length,
apr_size_t nbytes 
)

Send an entire file to the client, using sendfile if supported by the current platform

Parameters
fdThe file to send.
rThe current request
offsetOffset into the file to start sending.
lengthAmount of data to send
nbytesAmount of data actually sent
void ap_send_interim_response ( request_rec r,
int  send_headers 
)

Send an interim (HTTP 1xx) response immediately.

Parameters
rThe request
send_headersWhether to send&clear headers in r->headers_out
apr_size_t ap_send_mmap ( apr_mmap_t mm,
request_rec r,
apr_size_t  offset,
apr_size_t  length 
)

Send an MMAP'ed file to the client

Parameters
mmThe MMAP'ed file to send
rThe current request
offsetThe offset into the MMAP to start sending
lengthThe amount of data to send
Returns
The number of bytes sent
void ap_set_accept_ranges ( request_rec r)

Set the Accept-Ranges header for this response

Parameters
rThe current request
void ap_set_content_length ( request_rec r,
apr_off_t  length 
)

Set the content length for this request

Parameters
rThe current request
lengthThe new content length
void ap_set_content_type ( request_rec r,
const char *  ct 
)

Set the content type for this request (r->content_type).

Parameters
rThe current request
ctThe new content type
Warning
This function must be called to set r->content_type in order for the AddOutputFilterByType directive to work correctly.
void ap_set_etag ( request_rec r)

Set the E-tag outgoing header

Parameters
rThe current request
int ap_set_keepalive ( request_rec r)

Set the keepalive status for this request

Parameters
rThe current request
Returns
1 if keepalive can be set, 0 otherwise
void ap_set_last_modified ( request_rec r)

Set the last modified time for the file being sent

Parameters
rThe current request
void ap_set_sub_req_protocol ( request_rec rnew,
const request_rec r 
)

Sett up the protocol fields for subsidiary requests

Parameters
rnewNew Sub Request
rcurrent request
int ap_setup_client_block ( request_rec r,
int  read_policy 
)

Setup the client to allow Apache to read the request body.

Parameters
rThe current request
read_policyHow the server should interpret a chunked transfer-encoding. One of:
   REQUEST_NO_BODY          Send 413 error if message has any body
   REQUEST_CHUNKED_ERROR    Send 411 error if body without Content-Length
   REQUEST_CHUNKED_DECHUNK  If chunked, remove the chunks for me.
Returns
either OK or an error code
void ap_setup_make_content_type ( apr_pool_t pool)

Precompile metadata structures used by ap_make_content_type()

Parameters
poolThe pool to use for allocations
int ap_should_client_block ( request_rec r)

Determine if the client has sent any data. This also sends a 100 Continue response to HTTP/1.1 clients, so modules should not be called until the module is ready to read content.

Warning
Never call this function more than once.
Parameters
rThe current request
Returns
0 if there is no message to read, 1 otherwise
apr_status_t ap_switch_protocol ( conn_rec c,
request_rec r,
server_rec s,
const char *  protocol 
)

Perform the actual protocol switch. The protocol given must have been selected before on the very same connection and request pair.

Parameters
cThe current connection
rThe current request or NULL
sThe server/virtual host selected
protocolthe protocol to switch to
Returns
APR_SUCCESS, if caller may continue processing as usual APR_EOF, if caller needs to stop processing the connection APR_EINVAL, if the protocol is already in place APR_NOTIMPL, if no module performed the switch Other errors where appropriate
int ap_vrprintf ( request_rec r,
const char *  fmt,
va_list  vlist 
)

Output data to the client in a printf format

Parameters
rThe current request
fmtThe format string
vlistThe arguments to use to fill out the format string
Returns
The number of bytes sent
apr_port_t default_port ( const request_rec r)

Return the default port from the current request

Parameters
rThe current request
Returns
The current port
const char* http_scheme ( const request_rec r)

This hook allows modules to retrieve the http scheme for a request. This allows Apache modules to easily extend the schemes that Apache understands

Parameters
rThe current request
Returns
The http scheme from the request
int log_transaction ( request_rec r)

This hook allows modules to perform any module-specific logging activities over and above the normal server things.

Parameters
rThe current request
Returns
OK, DECLINED, or HTTP_...
int note_auth_failure ( request_rec r,
const char *  auth_type 
)

This hook allows modules to add support for a specific auth type to ap_note_auth_failure

Parameters
rthe current request
auth_typethe configured auth_type
Returns
OK, DECLINED
int post_read_request ( request_rec r)

This hook allows modules to affect the request immediately after the request has been read, and before any other phases have been processes. This allows modules to make decisions based upon the input header fields

Parameters
rThe current request
Returns
OK or DECLINED
void pre_read_request ( request_rec r,
conn_rec c 
)

This hook allows modules to affect the request or connection immediately before the request has been read, and before any other phases have been processes.

Parameters
rThe current request of the soon-to-be-read request
cThe connection
Returns
None/void
const char* protocol_get ( const conn_rec c)

Return the protocol used on the connection. Modules implementing protocol switching must register here and return the correct protocol identifier for connections they switched.

To find out the protocol for the current connection, better call

See Also
ap_get_protocol which internally uses this hook.
Parameters
cThe current connection
Returns
The identifier of the protocol in place or NULL
int protocol_propose ( conn_rec c,
request_rec r,
server_rec s,
const apr_array_header_t offers,
apr_array_header_t proposals 
)

Determine the list of protocols available for a connection/request. This may be collected with or without any request sent, in which case the request is NULL. Or it may be triggered by the request received, e.g. through the "Upgrade" header.

This hook will be run whenever protocols are being negotiated (ALPN as one example). It may also be invoked at other times, e.g. when the server wants to advertise protocols it is capable of switching to.

The identifiers for protocols are taken from the TLS extension type ALPN: https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xml

If no protocols are added to the proposals, the server not perform any switch. If the protocol selected from the proposals is the protocol already in place, also no protocol switch will be invoked.

The client may already have announced the protocols it is willing to accept. These will then be listed as offers. This parameter may also be NULL, indicating that offers from the client are not known and the hooks should propose all protocols that are valid for the current connection/request.

All hooks are run, unless one returns an error. Proposals may contain duplicates. The order in which proposals are added is usually ignored.

Parameters
cThe current connection
rThe current request or NULL
sThe server/virtual host selected
offersA list of protocol identifiers offered by the client or NULL to indicated that the hooks are free to propose
proposalsThe list of protocol identifiers proposed by the hooks
Returns
OK or DECLINED
int protocol_switch ( conn_rec c,
request_rec r,
server_rec s,
const char *  protocol 
)

Perform a protocol switch on the connection. The exact requirements for that depend on the protocol in place and the one switched to. The first protocol module to handle the switch is the last module run.

For a connection level switch (r == NULL), the handler must on return leave the conn_rec in a state suitable for processing the switched protocol, e.g. correct filters in place.

For a request triggered switch (r != NULL), the protocol switch is done before the response is sent out. When switching from "http/1.1" via Upgrade header, the 101 intermediate response will have been sent. The hook needs then to process the connection until it can be closed. Which the server will enforce on hook return. Any error the hook might encounter must already be sent by the hook itself to the client in whatever form the new protocol requires.

Parameters
cThe current connection
rThe current request or NULL
sThe server/virtual host selected
choicesA list of protocol identifiers, normally the clients whishes
proposalsthe list of protocol identifiers proposed by the hooks
Returns
OK or DECLINED

Variable Documentation

AP_DECLARE_DATA const apr_bucket_type_t ap_bucket_type_error
AP_DECLARE_DATA ap_filter_rec_t* ap_old_write_func

This is an optimization. We keep a record of the filter_rec that stores the old_write filter, so that we can avoid strcmp's later.