Apache HTTPD
Classes | Macros | Typedefs | Enumerations | Functions | Variables
mod_negotiation.c File Reference
#include "apr.h"
#include "apr_strings.h"
#include "apr_file_io.h"
#include "apr_lib.h"
#include "apr_want.h"
#include "ap_config.h"
#include "httpd.h"
#include "http_config.h"
#include "http_request.h"
#include "http_protocol.h"
#include "http_core.h"
#include "http_log.h"
#include "util_script.h"

Go to the source code of this file.

Classes

struct  neg_dir_config
 
struct  accept_rec
 
struct  var_rec
 
struct  negotiation_state
 

Macros

#define APR_WANT_STRFUNC
 
#define MAP_FILE_MAGIC_TYPE   "application/x-type-map"
 
#define FLP_UNDEF   0 /* Same as FLP_DEFAULT, but base overrides */
 
#define FLP_NONE   1 /* Return 406, HTTP_NOT_ACCEPTABLE */
 
#define FLP_PREFER   2 /* Use language_priority rather than MC */
 
#define FLP_FALLBACK   4 /* Use language_priority rather than NA */
 
#define FLP_DEFAULT   FLP_PREFER
 
#define DISCARD_ALL_ENCODINGS   1 /* no-gzip */
 
#define DISCARD_ALL_BUT_HTML   2 /* gzip-only-text/html */
 

Typedefs

typedef struct accept_rec accept_rec
 
typedef struct var_rec var_rec
 

Enumerations

enum  header_state { header_eof , header_seen , header_sep }
 
enum  algorithm_results { alg_choice = 1 , alg_list }
 

Functions

static void * create_neg_dir_config (apr_pool_t *p, char *dummy)
 
static void * merge_neg_dir_configs (apr_pool_t *p, void *basev, void *addv)
 
static const charset_language_priority (cmd_parms *cmd, void *n_, const char *lang)
 
static const charset_force_priority (cmd_parms *cmd, void *n_, const char *w)
 
static const charcache_negotiated_docs (cmd_parms *cmd, void *dummy, int arg)
 
static int do_cache_negotiated_docs (server_rec *s)
 
static void clean_var_rec (var_rec *mime_info)
 
static void set_mime_fields (var_rec *var, accept_rec *mime_info)
 
static void set_vlist_validator (request_rec *r, request_rec *vlistr)
 
static float atoq (const char *string)
 
static const charget_entry (apr_pool_t *p, accept_rec *result, const char *accept_line)
 
static apr_array_header_tdo_header_line (apr_pool_t *p, const char *accept_line)
 
static apr_array_header_tdo_languages_line (apr_pool_t *p, const char **lang_line)
 
static negotiation_stateparse_accept_headers (request_rec *r)
 
static void parse_negotiate_header (request_rec *r, negotiation_state *neg)
 
static void maybe_add_default_accepts (negotiation_state *neg, int prefer_scripts)
 
static enum header_state get_header_line (char *buffer, int len, apr_file_t *map)
 
static apr_off_t get_body (char *buffer, apr_size_t *len, const char *tag, apr_file_t *map)
 
static void strip_paren_comments (char *hdr)
 
static charlcase_header_name_return_body (char *header, request_rec *r)
 
static int read_type_map (apr_file_t **map, negotiation_state *neg, request_rec *rr)
 
static int variantsortf (var_rec *a, var_rec *b)
 
static int read_types_multi (negotiation_state *neg)
 
static int mime_match (accept_rec *accept_r, var_rec *avail)
 
static int level_cmp (var_rec *var1, var_rec *var2)
 
static int find_lang_index (apr_array_header_t *accept_langs, char *lang)
 
static void set_default_lang_quality (negotiation_state *neg)
 
static void set_language_quality (negotiation_state *neg, var_rec *variant)
 
static apr_off_t find_content_length (negotiation_state *neg, var_rec *variant)
 
static void set_accept_quality (negotiation_state *neg, var_rec *variant)
 
static void set_charset_quality (negotiation_state *neg, var_rec *variant)
 
static int is_identity_encoding (const char *enc)
 
static void set_encoding_quality (negotiation_state *neg, var_rec *variant)
 
static int is_variant_better_rvsa (negotiation_state *neg, var_rec *variant, var_rec *best, float *p_bestq)
 
static int is_variant_better (negotiation_state *neg, var_rec *variant, var_rec *best, float *p_bestq)
 
static int variant_has_language (var_rec *variant, const char *lang)
 
static int discard_variant_by_env (var_rec *variant, int discard)
 
static int best_match (negotiation_state *neg, var_rec **pbest)
 
static void set_neg_headers (request_rec *r, negotiation_state *neg, int alg_result)
 
static charmake_variant_list (request_rec *r, negotiation_state *neg)
 
static void store_variant_list (request_rec *r, negotiation_state *neg)
 
static int setup_choice_response (request_rec *r, negotiation_state *neg, var_rec *variant)
 
static int do_negotiation (request_rec *r, negotiation_state *neg, var_rec **bestp, int prefer_scripts)
 
static int handle_map_file (request_rec *r)
 
static int handle_multi (request_rec *r)
 
static int fix_encoding (request_rec *r)
 
static void register_hooks (apr_pool_t *p)
 

Variables

static const command_rec negotiation_cmds []
 
static int *const aplog_module_index = &( negotiation_module.module_index)
 

Macro Definition Documentation

◆ APR_WANT_STRFUNC

#define APR_WANT_STRFUNC

Definition at line 29 of file mod_negotiation.c.

◆ DISCARD_ALL_BUT_HTML

#define DISCARD_ALL_BUT_HTML   2 /* gzip-only-text/html */

Definition at line 65 of file mod_negotiation.c.

◆ DISCARD_ALL_ENCODINGS

#define DISCARD_ALL_ENCODINGS   1 /* no-gzip */

Definition at line 64 of file mod_negotiation.c.

◆ FLP_DEFAULT

#define FLP_DEFAULT   FLP_PREFER

Definition at line 60 of file mod_negotiation.c.

◆ FLP_FALLBACK

#define FLP_FALLBACK   4 /* Use language_priority rather than NA */

Definition at line 58 of file mod_negotiation.c.

◆ FLP_NONE

#define FLP_NONE   1 /* Return 406, HTTP_NOT_ACCEPTABLE */

Definition at line 56 of file mod_negotiation.c.

◆ FLP_PREFER

#define FLP_PREFER   2 /* Use language_priority rather than MC */

Definition at line 57 of file mod_negotiation.c.

◆ FLP_UNDEF

#define FLP_UNDEF   0 /* Same as FLP_DEFAULT, but base overrides */

Definition at line 55 of file mod_negotiation.c.

◆ MAP_FILE_MAGIC_TYPE

#define MAP_FILE_MAGIC_TYPE   "application/x-type-map"

Definition at line 42 of file mod_negotiation.c.

Typedef Documentation

◆ accept_rec

◆ var_rec

Enumeration Type Documentation

◆ algorithm_results

Enumerator
alg_choice 
alg_list 

Definition at line 2005 of file mod_negotiation.c.

◆ header_state

Enumerator
header_eof 
header_seen 
header_sep 

Definition at line 740 of file mod_negotiation.c.

Function Documentation

◆ atoq()

static float atoq ( const char string)
static

Definition at line 363 of file mod_negotiation.c.

◆ best_match()

static int best_match ( negotiation_state neg,
var_rec **  pbest 
)
static

Definition at line 2271 of file mod_negotiation.c.

◆ cache_negotiated_docs()

static const char * cache_negotiated_docs ( cmd_parms cmd,
void *  dummy,
int  arg 
)
static

Definition at line 142 of file mod_negotiation.c.

◆ clean_var_rec()

static void clean_var_rec ( var_rec mime_info)
static

Definition at line 279 of file mod_negotiation.c.

◆ create_neg_dir_config()

static void * create_neg_dir_config ( apr_pool_t p,
char dummy 
)
static

Definition at line 69 of file mod_negotiation.c.

◆ discard_variant_by_env()

static int discard_variant_by_env ( var_rec variant,
int  discard 
)
static

Definition at line 2258 of file mod_negotiation.c.

◆ do_cache_negotiated_docs()

static int do_cache_negotiated_docs ( server_rec s)
static

Definition at line 150 of file mod_negotiation.c.

◆ do_header_line()

static apr_array_header_t * do_header_line ( apr_pool_t p,
const char accept_line 
)
static

Definition at line 516 of file mod_negotiation.c.

◆ do_languages_line()

static apr_array_header_t * do_languages_line ( apr_pool_t p,
const char **  lang_line 
)
static

Definition at line 539 of file mod_negotiation.c.

◆ do_negotiation()

static int do_negotiation ( request_rec r,
negotiation_state neg,
var_rec **  bestp,
int  prefer_scripts 
)
static

RFC 2616: HTTP

< Module has handled this stage.

Definition at line 2808 of file mod_negotiation.c.

◆ find_content_length()

static apr_off_t find_content_length ( negotiation_state neg,
var_rec variant 
)
static

< Size of the file

< Size of the file

Definition at line 1736 of file mod_negotiation.c.

◆ find_lang_index()

static int find_lang_index ( apr_array_header_t accept_langs,
char lang 
)
static

Definition at line 1448 of file mod_negotiation.c.

◆ fix_encoding()

static int fix_encoding ( request_rec r)
static

< Module declines to handle

< Module declines to handle

< Module has handled this stage.

< Module has handled this stage.

< Module declines to handle

Definition at line 3163 of file mod_negotiation.c.

◆ get_body()

static apr_off_t get_body ( char buffer,
apr_size_t len,
const char tag,
apr_file_t map 
)
static

Definition at line 828 of file mod_negotiation.c.

◆ get_entry()

static const char * get_entry ( apr_pool_t p,
accept_rec result,
const char accept_line 
)
static

Definition at line 409 of file mod_negotiation.c.

◆ get_header_line()

static enum header_state get_header_line ( char buffer,
int  len,
apr_file_t map 
)
static

Definition at line 744 of file mod_negotiation.c.

◆ handle_map_file()

static int handle_map_file ( request_rec r)
static

< Module declines to handle

RFC 2616: HTTP

RFC 2616: HTTP

< Module has handled this stage.

< Module has handled this stage.

< Module has handled this stage.

Definition at line 2954 of file mod_negotiation.c.

◆ handle_multi()

static int handle_multi ( request_rec r)
static

< Module declines to handle

< Module declines to handle

RFC 2616: HTTP

< Module has handled this stage.

Definition at line 3073 of file mod_negotiation.c.

◆ is_identity_encoding()

static int is_identity_encoding ( const char enc)
static

Definition at line 1920 of file mod_negotiation.c.

◆ is_variant_better()

static int is_variant_better ( negotiation_state neg,
var_rec variant,
var_rec best,
float p_bestq 
)
static

Definition at line 2100 of file mod_negotiation.c.

◆ is_variant_better_rvsa()

static int is_variant_better_rvsa ( negotiation_state neg,
var_rec variant,
var_rec best,
float p_bestq 
)
static

Definition at line 2033 of file mod_negotiation.c.

◆ lcase_header_name_return_body()

static char * lcase_header_name_return_body ( char header,
request_rec r 
)
static

Definition at line 905 of file mod_negotiation.c.

◆ level_cmp()

static int level_cmp ( var_rec var1,
var_rec var2 
)
static

Definition at line 1390 of file mod_negotiation.c.

◆ make_variant_list()

static char * make_variant_list ( request_rec r,
negotiation_state neg 
)
static

Definition at line 2618 of file mod_negotiation.c.

◆ maybe_add_default_accepts()

static void maybe_add_default_accepts ( negotiation_state neg,
int  prefer_scripts 
)
static

Definition at line 703 of file mod_negotiation.c.

◆ merge_neg_dir_configs()

static void * merge_neg_dir_configs ( apr_pool_t p,
void *  basev,
void *  addv 
)
static

Definition at line 79 of file mod_negotiation.c.

◆ mime_match()

static int mime_match ( accept_rec accept_r,
var_rec avail 
)
static

< Module has handled this stage.

Definition at line 1327 of file mod_negotiation.c.

◆ parse_accept_headers()

static negotiation_state * parse_accept_headers ( request_rec r)
static

Definition at line 565 of file mod_negotiation.c.

◆ parse_negotiate_header()

static void parse_negotiate_header ( request_rec r,
negotiation_state neg 
)
static

Definition at line 610 of file mod_negotiation.c.

◆ read_type_map()

static int read_type_map ( apr_file_t **  map,
negotiation_state neg,
request_rec rr 
)
static

< Open the file for reading

<

Deprecated:
See also
APR_FOPEN_READ

< Open the file for buffered I/O

<

Deprecated:
See also
APR_FOPEN_BUFFERED

< use OS's default permissions

<

Deprecated:
See also
APR_FPROT_OS_DEFAULT

< Module has handled this stage.

Definition at line 934 of file mod_negotiation.c.

◆ read_types_multi()

static int read_types_multi ( negotiation_state neg)
static

< Module declines to handle

< Module declines to handle

< an atomic unix apr_dir_read()

< Type

< Module has handled this stage.

Definition at line 1084 of file mod_negotiation.c.

◆ register_hooks()

static void register_hooks ( apr_pool_t p)
static

Definition at line 3207 of file mod_negotiation.c.

◆ set_accept_quality()

static void set_accept_quality ( negotiation_state neg,
var_rec variant 
)
static

Definition at line 1765 of file mod_negotiation.c.

◆ set_charset_quality()

static void set_charset_quality ( negotiation_state neg,
var_rec variant 
)
static

Definition at line 1845 of file mod_negotiation.c.

◆ set_default_lang_quality()

static void set_default_lang_quality ( negotiation_state neg)
static

Definition at line 1484 of file mod_negotiation.c.

◆ set_encoding_quality()

static void set_encoding_quality ( negotiation_state neg,
var_rec variant 
)
static

Definition at line 1938 of file mod_negotiation.c.

◆ set_force_priority()

static const char * set_force_priority ( cmd_parms cmd,
void *  n_,
const char w 
)
static

Definition at line 110 of file mod_negotiation.c.

◆ set_language_priority()

static const char * set_language_priority ( cmd_parms cmd,
void *  n_,
const char lang 
)
static

Definition at line 96 of file mod_negotiation.c.

◆ set_language_quality()

static void set_language_quality ( negotiation_state neg,
var_rec variant 
)
static

Definition at line 1534 of file mod_negotiation.c.

◆ set_mime_fields()

static void set_mime_fields ( var_rec var,
accept_rec mime_info 
)
static

Definition at line 309 of file mod_negotiation.c.

◆ set_neg_headers()

static void set_neg_headers ( request_rec r,
negotiation_state neg,
int  alg_result 
)
static

Definition at line 2433 of file mod_negotiation.c.

◆ set_vlist_validator()

static void set_vlist_validator ( request_rec r,
request_rec vlistr 
)
static

Definition at line 323 of file mod_negotiation.c.

◆ setup_choice_response()

static int setup_choice_response ( request_rec r,
negotiation_state neg,
var_rec variant 
)
static

Definition at line 2693 of file mod_negotiation.c.

◆ store_variant_list()

static void store_variant_list ( request_rec r,
negotiation_state neg 
)
static

Definition at line 2676 of file mod_negotiation.c.

◆ strip_paren_comments()

static void strip_paren_comments ( char hdr)
static

Definition at line 875 of file mod_negotiation.c.

◆ variant_has_language()

static int variant_has_language ( var_rec variant,
const char lang 
)
static

Definition at line 2239 of file mod_negotiation.c.

◆ variantsortf()

static int variantsortf ( var_rec a,
var_rec b 
)
static

Definition at line 1061 of file mod_negotiation.c.

Variable Documentation

◆ aplog_module_index

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

Definition at line 3214 of file mod_negotiation.c.

◆ negotiation_cmds

const command_rec negotiation_cmds[]
static
Initial value:
=
{
{ "CacheNegotiatedDocs" , cache_negotiated_docs , NULL , 128 , FLAG, "Either 'on' or 'off' (default)" },
{ "LanguagePriority" , set_language_priority , NULL , 4 , ITERATE, "space-delimited list of MIME language abbreviations" },
{ "ForceLanguagePriority" , set_force_priority , NULL , 4 , ITERATE, "Force LanguagePriority elections, either None, or " "Fallback and/or Prefer" },
{NULL}
}
@ FLAG
Definition http_config.h:59
@ ITERATE
Definition http_config.h:53
static const char * set_language_priority(cmd_parms *cmd, void *n_, const char *lang)
static const char * cache_negotiated_docs(cmd_parms *cmd, void *dummy, int arg)
static const char * set_force_priority(cmd_parms *cmd, void *n_, const char *w)
return NULL
Definition mod_so.c:359

Definition at line 156 of file mod_negotiation.c.