Main Page | Modules | Namespace List | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages | Examples

mod_charset_lite.c File Reference

#include "httpd.h"
#include "http_config.h"
#include "http_core.h"
#include "http_log.h"
#include "http_main.h"
#include "http_protocol.h"
#include "http_request.h"
#include "util_charset.h"
#include "apr_buckets.h"
#include "util_filter.h"
#include "apr_strings.h"
#include "apr_lib.h"
#include "apr_xlate.h"
#include "apr_want.h"

Include dependency graph for mod_charset_lite.c:

Go to the source code of this file.

Defines

#define CORE_PRIVATE
#define APR_WANT_STRFUNC
#define OUTPUT_XLATE_BUF_SIZE   (16*1024)
#define INPUT_XLATE_BUF_SIZE   (8*1024)
#define XLATE_MIN_BUFF_LEFT   128
#define FATTEST_CHAR   8
#define XLATEOUT_FILTER_NAME   "XLATEOUT"
#define XLATEIN_FILTER_NAME   "XLATEIN"
#define DBGLVL_GORY   9
#define DBGLVL_FLOW   4
#define DBGLVL_PMC   2

Typedefs

typedef charset_dir_t charset_dir_t
typedef charset_filter_ctx_t charset_filter_ctx_t
typedef charset_req_t charset_req_t

Enumerations

enum  ees_t {
  EES_INIT = 0, EES_LIMIT, EES_INCOMPLETE_CHAR, EES_BUCKET_READ,
  EES_DOWNSTREAM, EES_BAD_INPUT
}

Functions

static void * create_charset_dir_conf (apr_pool_t *p, char *dummy)
static void * merge_charset_dir_conf (apr_pool_t *p, void *basev, void *overridesv)
static const char * add_charset_source (cmd_parms *cmd, void *in_dc, const char *name)
static const char * add_charset_default (cmd_parms *cmd, void *in_dc, const char *name)
static const char * add_charset_options (cmd_parms *cmd, void *in_dc, const char *flag)
static int find_code_page (request_rec *r)
static int configured_in_list (request_rec *r, const char *filter_name, struct ap_filter_t *filter_list)
static int configured_on_input (request_rec *r, const char *filter_name)
static int configured_on_output (request_rec *r, const char *filter_name)
static void xlate_insert_filter (request_rec *r)
static apr_status_t send_downstream (ap_filter_t *f, const char *tmp, apr_size_t len)
static apr_status_t send_eos (ap_filter_t *f)
static apr_status_t set_aside_partial_char (charset_filter_ctx_t *ctx, const char *partial, apr_size_t partial_len)
static apr_status_t finish_partial_char (charset_filter_ctx_t *ctx, const char **cur_str, apr_size_t *cur_len, char **out_str, apr_size_t *out_len)
static void log_xlate_error (ap_filter_t *f, apr_status_t rv)
static void chk_filter_chain (ap_filter_t *f)
static apr_status_t xlate_brigade (charset_filter_ctx_t *ctx, apr_bucket_brigade *bb, char *buffer, apr_size_t *buffer_avail, int *hit_eos)
static apr_status_t xlate_out_filter (ap_filter_t *f, apr_bucket_brigade *bb)
static int xlate_in_filter (ap_filter_t *f, apr_bucket_brigade *bb, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
static void charset_register_hooks (apr_pool_t *p)

Variables

module AP_MODULE_DECLARE_DATA charset_lite_module
static const command_rec cmds []


Define Documentation

#define APR_WANT_STRFUNC
 

Definition at line 41 of file mod_charset_lite.c.

#define CORE_PRIVATE
 

Definition at line 29 of file mod_charset_lite.c.

#define DBGLVL_FLOW   4
 

Definition at line 108 of file mod_charset_lite.c.

Referenced by find_code_page(), and xlate_insert_filter().

#define DBGLVL_GORY   9
 

Definition at line 107 of file mod_charset_lite.c.

Referenced by drain_available_output(), ef_output_filter(), find_code_page(), pass_data_to_filter(), xlate_in_filter(), and xlate_out_filter().

#define DBGLVL_PMC   2
 

Definition at line 110 of file mod_charset_lite.c.

Referenced by chk_filter_chain(), and find_code_page().

#define FATTEST_CHAR   8
 

Definition at line 51 of file mod_charset_lite.c.

#define INPUT_XLATE_BUF_SIZE   (8*1024)
 

Definition at line 45 of file mod_charset_lite.c.

Referenced by find_code_page(), and xlate_in_filter().

#define OUTPUT_XLATE_BUF_SIZE   (16*1024)
 

Definition at line 44 of file mod_charset_lite.c.

Referenced by xlate_out_filter().

#define XLATE_MIN_BUFF_LEFT   128
 

Definition at line 47 of file mod_charset_lite.c.

Referenced by xlate_brigade(), and xlate_out_filter().

#define XLATEIN_FILTER_NAME   "XLATEIN"
 

Definition at line 70 of file mod_charset_lite.c.

Referenced by charset_register_hooks(), and xlate_insert_filter().

#define XLATEOUT_FILTER_NAME   "XLATEOUT"
 

Definition at line 68 of file mod_charset_lite.c.

Referenced by charset_register_hooks(), chk_filter_chain(), and xlate_insert_filter().


Typedef Documentation

typedef struct charset_dir_t charset_dir_t
 

typedef struct charset_filter_ctx_t charset_filter_ctx_t
 

typedef struct charset_req_t charset_req_t
 


Enumeration Type Documentation

enum ees_t
 

Enumeration values:
EES_INIT 
EES_LIMIT 
EES_INCOMPLETE_CHAR 
EES_BUCKET_READ 
EES_DOWNSTREAM 
EES_BAD_INPUT 

Definition at line 58 of file mod_charset_lite.c.


Function Documentation

static const char* add_charset_default cmd_parms cmd,
void *  in_dc,
const char *  name
[static]
 

Definition at line 156 of file mod_charset_lite.c.

References charset_dir_t::charset_default, and NULL.

static const char* add_charset_options cmd_parms cmd,
void *  in_dc,
const char *  flag
[static]
 

Definition at line 167 of file mod_charset_lite.c.

References charset_dir_t::debug, charset_dir_t::implicit_add, NULL, strcasecmp(), strncasecmp(), and cmd_parms_struct::temp_pool.

Here is the call graph for this function:

static const char* add_charset_source cmd_parms cmd,
void *  in_dc,
const char *  name
[static]
 

Definition at line 145 of file mod_charset_lite.c.

References charset_dir_t::charset_source, and NULL.

static void charset_register_hooks apr_pool_t p  )  [static]
 

Definition at line 1062 of file mod_charset_lite.c.

References AP_FTYPE_RESOURCE, APR_HOOK_MIDDLE, APR_HOOK_REALLY_LAST, find_code_page(), NULL, xlate_in_filter(), xlate_insert_filter(), xlate_out_filter(), XLATEIN_FILTER_NAME, and XLATEOUT_FILTER_NAME.

Here is the call graph for this function:

static void chk_filter_chain ap_filter_t f  )  [static]
 

Definition at line 574 of file mod_charset_lite.c.

References APLOG_DEBUG, APLOG_ERR, APLOG_MARK, charset_dir_t::charset_default, charset_dir_t::charset_source, ap_filter_t::ctx, ctx, DBGLVL_PMC, charset_filter_ctx_t::dc, debug, request_rec::filename, ap_filter_t::frec, request_rec::input_filters, ap_filter_rec_t::name, ap_filter_t::next, charset_filter_ctx_t::noop, NULL, request_rec::output_filters, ap_filter_t::r, strcasecmp(), request_rec::uri, and XLATEOUT_FILTER_NAME.

Referenced by xlate_in_filter(), and xlate_out_filter().

Here is the call graph for this function:

static int configured_in_list request_rec r,
const char *  filter_name,
struct ap_filter_t filter_list
[static]
 

Definition at line 326 of file mod_charset_lite.c.

References ap_filter_t::frec, ap_filter_rec_t::name, ap_filter_t::next, and strcasecmp().

Referenced by configured_on_input(), and configured_on_output().

Here is the call graph for this function:

static int configured_on_input request_rec r,
const char *  filter_name
[static]
 

Definition at line 340 of file mod_charset_lite.c.

References configured_in_list(), and request_rec::input_filters.

Referenced by xlate_insert_filter().

Here is the call graph for this function:

static int configured_on_output request_rec r,
const char *  filter_name
[static]
 

Definition at line 345 of file mod_charset_lite.c.

References configured_in_list(), and request_rec::output_filters.

Referenced by xlate_insert_filter().

Here is the call graph for this function:

static void* create_charset_dir_conf apr_pool_t p,
char *  dummy
[static]
 

Definition at line 114 of file mod_charset_lite.c.

References apr_pcalloc, and charset_dir_t::debug.

static int find_code_page request_rec r  )  [static]
 

Definition at line 195 of file mod_charset_lite.c.

References ap_get_module_config, ap_set_module_config, APLOG_DEBUG, APLOG_ERR, APLOG_MARK, apr_pcalloc, APR_SUCCESS, charset_filter_ctx_t::bb, conn_rec::bucket_alloc, charset_dir_t::charset_default, charset_lite_module, charset_dir_t::charset_source, request_rec::connection, request_rec::content_type, DBGLVL_FLOW, DBGLVL_GORY, DBGLVL_PMC, charset_filter_ctx_t::dc, charset_req_t::dc, charset_dir_t::debug, DECLINED, DIR_MAGIC_TYPE, request_rec::filename, HTTP_INTERNAL_SERVER_ERROR, charset_req_t::input_ctx, INPUT_XLATE_BUF_SIZE, M_POST, M_PUT, request_rec::main, request_rec::method_number, charset_req_t::output_ctx, request_rec::per_dir_config, request_rec::pool, request_rec::prev, request_rec::proxyreq, request_rec::request_config, strncasecmp(), charset_filter_ctx_t::tmp, request_rec::uri, and charset_filter_ctx_t::xlate.

Referenced by charset_register_hooks().

Here is the call graph for this function:

static apr_status_t finish_partial_char charset_filter_ctx_t ctx,
const char **  cur_str,
apr_size_t *  cur_len,
char **  out_str,
apr_size_t *  out_len
[static]
 

Definition at line 461 of file mod_charset_lite.c.

References APR_INCOMPLETE, APR_SUCCESS, charset_filter_ctx_t::buf, charset_filter_ctx_t::ees, EES_LIMIT, charset_filter_ctx_t::saved, and charset_filter_ctx_t::xlate.

Referenced by xlate_brigade(), and xlate_out_filter().

static void log_xlate_error ap_filter_t f,
apr_status_t  rv
[static]
 

Definition at line 503 of file mod_charset_lite.c.

References APLOG_ERR, APLOG_MARK, charset_filter_ctx_t::buf, ctx, cur, charset_filter_ctx_t::ees, EES_BAD_INPUT, EES_BUCKET_READ, EES_DOWNSTREAM, EES_INCOMPLETE_CHAR, and EES_LIMIT.

Referenced by xlate_in_filter(), and xlate_out_filter().

static void* merge_charset_dir_conf apr_pool_t p,
void *  basev,
void *  overridesv
[static]
 

Definition at line 122 of file mod_charset_lite.c.

References apr_pcalloc, base, charset_dir_t::charset_default, charset_dir_t::charset_source, charset_dir_t::debug, and charset_dir_t::implicit_add.

static apr_status_t send_downstream ap_filter_t f,
const char *  tmp,
apr_size_t  len
[static]
 

Definition at line 403 of file mod_charset_lite.c.

References APR_BRIGADE_INSERT_TAIL, APR_SUCCESS, b, bb, conn_rec::bucket_alloc, c, request_rec::connection, ap_filter_t::ctx, ctx, charset_filter_ctx_t::ees, EES_DOWNSTREAM, ap_filter_t::next, request_rec::pool, ap_filter_t::r, and r.

Referenced by xlate_out_filter().

static apr_status_t send_eos ap_filter_t f  )  [static]
 

Definition at line 422 of file mod_charset_lite.c.

References APR_BRIGADE_INSERT_TAIL, APR_SUCCESS, b, bb, conn_rec::bucket_alloc, c, request_rec::connection, ctx, charset_filter_ctx_t::ees, EES_DOWNSTREAM, request_rec::pool, and r.

Referenced by xlate_out_filter().

static apr_status_t set_aside_partial_char charset_filter_ctx_t ctx,
const char *  partial,
apr_size_t  partial_len
[static]
 

Definition at line 441 of file mod_charset_lite.c.

References APR_INCOMPLETE, APR_SUCCESS, and EES_LIMIT.

Referenced by xlate_brigade(), and xlate_out_filter().

static apr_status_t xlate_brigade charset_filter_ctx_t ctx,
apr_bucket_brigade bb,
char *  buffer,
apr_size_t *  buffer_avail,
int hit_eos
[static]
 

Definition at line 676 of file mod_charset_lite.c.

References APR_BLOCK_READ, APR_BRIGADE_EMPTY, APR_BRIGADE_FIRST, APR_BRIGADE_SENTINEL, apr_bucket_delete, APR_BUCKET_IS_EOS, apr_bucket_read, apr_bucket_split, APR_INCOMPLETE, APR_SUCCESS, b, bucket, charset_filter_ctx_t::ees, EES_BUCKET_READ, EES_INCOMPLETE_CHAR, finish_partial_char(), NULL, charset_filter_ctx_t::saved, set_aside_partial_char(), charset_filter_ctx_t::xlate, and XLATE_MIN_BUFF_LEFT.

Referenced by xlate_in_filter().

Here is the call graph for this function:

static int xlate_in_filter ap_filter_t f,
apr_bucket_brigade bb,
ap_input_mode_t  mode,
apr_read_type_e  block,
apr_off_t  readbytes
[static]
 

Definition at line 945 of file mod_charset_lite.c.

References ap_get_module_config, APLOG_DEBUG, APLOG_MARK, APR_BRIGADE_CONCAT, APR_BRIGADE_EMPTY, APR_BRIGADE_INSERT_HEAD, APR_BRIGADE_PREPEND, apr_pcalloc, APR_SUCCESS, charset_filter_ctx_t::bb, conn_rec::bucket_alloc, charset_dir_t::charset_default, charset_lite_module, charset_dir_t::charset_source, chk_filter_chain(), request_rec::connection, ap_filter_t::ctx, ctx, DBGLVL_GORY, charset_filter_ctx_t::dc, charset_dir_t::debug, e, INPUT_XLATE_BUF_SIZE, log_xlate_error(), ap_filter_t::next, charset_filter_ctx_t::noop, NULL, request_rec::per_dir_config, request_rec::pool, ap_filter_t::r, charset_filter_ctx_t::ran, request_rec::request_config, charset_filter_ctx_t::tmp, and xlate_brigade().

Referenced by charset_register_hooks().

Here is the call graph for this function:

static void xlate_insert_filter request_rec r  )  [static]
 

Definition at line 353 of file mod_charset_lite.c.

References ap_get_module_config, APLOG_DEBUG, APLOG_MARK, charset_lite_module, configured_on_input(), configured_on_output(), request_rec::connection, DBGLVL_FLOW, charset_dir_t::debug, charset_req_t::input_ctx, charset_req_t::output_ctx, request_rec::per_dir_config, request_rec::request_config, XLATEIN_FILTER_NAME, and XLATEOUT_FILTER_NAME.

Referenced by charset_register_hooks().

Here is the call graph for this function:

static apr_status_t xlate_out_filter ap_filter_t f,
apr_bucket_brigade bb
[static]
 

Definition at line 785 of file mod_charset_lite.c.

References ap_get_module_config, APLOG_DEBUG, APLOG_MARK, APR_BLOCK_READ, APR_BRIGADE_FIRST, APR_BRIGADE_SENTINEL, apr_bucket_delete, APR_BUCKET_IS_EOS, APR_BUCKET_NEXT, apr_bucket_read, APR_INCOMPLETE, apr_pcalloc, APR_SUCCESS, charset_dir_t::charset_default, charset_lite_module, charset_dir_t::charset_source, chk_filter_chain(), ctx, DBGLVL_GORY, charset_filter_ctx_t::dc, charset_dir_t::debug, done, charset_filter_ctx_t::ees, EES_BUCKET_READ, EES_INCOMPLETE_CHAR, finish_partial_char(), log_xlate_error(), charset_filter_ctx_t::noop, NULL, OUTPUT_XLATE_BUF_SIZE, charset_filter_ctx_t::ran, charset_filter_ctx_t::saved, send_downstream(), send_eos(), set_aside_partial_char(), charset_filter_ctx_t::xlate, and XLATE_MIN_BUFF_LEFT.

Referenced by charset_register_hooks().

Here is the call graph for this function:


Variable Documentation

module AP_MODULE_DECLARE_DATA charset_lite_module
 

Initial value:

Definition at line 1072 of file mod_charset_lite.c.

Referenced by find_code_page(), xlate_in_filter(), xlate_insert_filter(), and xlate_out_filter().

const command_rec cmds[] [static]
 

Initial value:

{
    AP_INIT_TAKE1("CharsetSourceEnc",
                  add_charset_source,
                  NULL,
                  OR_FILEINFO,
                  "source (html,cgi,ssi) file charset"),
    AP_INIT_TAKE1("CharsetDefault", 
                  add_charset_default,
                  NULL,
                  OR_FILEINFO, 
                  "name of default charset"),
    AP_INIT_ITERATE("CharsetOptions",
                    add_charset_options,
                    NULL,
                    OR_FILEINFO,
                    "valid options: ImplicitAdd, NoImplicitAdd, DebugLevel=n"),
    {NULL}
}

Definition at line 1042 of file mod_charset_lite.c.