41#define APR_WANT_STRFUNC
44#define OUTPUT_XLATE_BUF_SIZE (16*1024)
45#define INPUT_XLATE_BUF_SIZE (8*1024)
47#define XLATE_MIN_BUFF_LEFT 128
68#define XLATEOUT_FILTER_NAME "XLATEOUT"
70#define XLATEIN_FILTER_NAME "XLATEIN"
108module AP_MODULE_DECLARE_DATA charset_lite_module;
128 over->charset_default ?
over->charset_default :
base->charset_default;
130 over->charset_source ?
over->charset_source :
base->charset_source;
132 over->implicit_add != IA_INIT ?
over->implicit_add :
base->implicit_add;
134 over->force_xlate != FX_INIT ?
over->force_xlate :
base->force_xlate;
181 "Invalid CharsetOptions option: ",
196 &charset_lite_module);
202 "uri: %s file: %s method: %d "
203 "imt: %s flags: %s%s%s %s->%s",
217 "incomplete configuration: src %s, dst %s",
256 reqinfo->output_ctx = output_ctx;
270 reqinfo->input_ctx = input_ctx;
275 "can't open translation %s->%s",
280 input_ctx->
is_sb = 0;
296 filter = filter->
next;
318 &charset_lite_module);
320 &charset_lite_module);
324 "xlate output filter not added implicitly because "
325 "CharsetOptions included 'NoImplicitAdd'");
335 "xlate output filter not added implicitly because %s",
337 "no output configuration available" :
338 "another module added the filter");
345 "xlate input filter not added implicitly because %s",
347 "no input configuration available" :
348 "another module added the filter");
482 msg =
APLOGNO(02193)
"xlate filter - a built-in restriction was encountered";
486 msg =
APLOGNO(02194)
"xlate filter - an input character was invalid";
490 msg =
APLOGNO(02195)
"xlate filter - bucket read routine failed";
506 msg =
APLOGNO(02197)
"xlate filter - an error occurred in a lower filter";
509 msg =
APLOGNO(02198)
"xlate filter - returning error";
558 curf = output ?
f->r->output_filters :
f->r->input_filters;
568 curctx->dc->charset_source)) {
583 const char *symbol = output ?
"->" :
"<-";
588 "translation %s%s%s; existing "
589 "translation %s%s%s",
590 f->r->uri ?
"uri" :
"file",
591 f->r->uri ?
f->r->uri :
f->r->filename,
595 curctx->dc->charset_source,
597 curctx->dc->charset_default);
601 const char *symbol = output ?
"->" :
"<-";
605 "chk_filter_chain() - can't disable "
606 "translation %s%s%s; existing "
607 "translation %s%s%s",
611 curctx->dc->charset_source,
613 curctx->dc->charset_default);
757 &charset_lite_module);
759 &charset_lite_module);
791 const char *mime_type =
f->r->content_type;
816 "can't open translation %s->%s",
830 "mime type is %s; no translation selected",
837 "xlate_out_filter() - "
838 "charset_source: %s charset_default: %s",
845 if (!
ctx->noop && !
ctx->is_sb) {
980 &charset_lite_module);
982 &charset_lite_module);
1012 "xlate_in_filter() - "
1013 "charset_source: %s charset_default: %s",
1015 dc && dc->charset_default ? dc->charset_default :
"(none)");
1020 if (!
ctx->noop && !
ctx->is_sb
1032 "Request body length may change, resulting in "
1033 "misprocessing by some modules or scripts");
1067 NULL,
f->r->connection->bucket_alloc);
1107 "source (html,cgi,ssi) file charset"),
1112 "name of default charset"),
1117 "valid options: ImplicitAdd, NoImplicitAdd, TranslateAllMimeTypes, "
1118 "NoTranslateAllMimeTypes"),
const char apr_size_t len
APR-UTIL Buckets/Bucket Brigades.
APR general purpose library routines.
APR Standard Headers Support.
APR I18N translation library.
#define AP_INIT_TAKE1(directive, func, mconfig, where, help)
#define ap_get_module_config(v, m)
#define AP_DECLARE_MODULE(foo)
#define AP_INIT_ITERATE(directive, func, mconfig, where, help)
#define ap_set_module_config(v, m, val)
apr_status_t ap_pass_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket)
ap_filter_t * ap_add_input_filter(const char *name, void *ctx, request_rec *r, conn_rec *c)
ap_filter_rec_t * ap_register_output_filter(const char *name, ap_out_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype)
ap_filter_t * ap_add_output_filter(const char *name, void *ctx, request_rec *r, conn_rec *c)
apr_status_t ap_filter_rec_t * ap_register_input_filter(const char *name, ap_in_filter_func filter_func, ap_init_filter_func filter_init, ap_filter_type ftype)
apr_status_t ap_get_brigade(ap_filter_t *filter, apr_bucket_brigade *bucket, ap_input_mode_t mode, apr_read_type_e block, apr_off_t readbytes)
void ap_hook_fixups(ap_HOOK_fixups_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
void ap_hook_insert_filter(ap_HOOK_insert_filter_t *pf, const char *const *aszPre, const char *const *aszSucc, int nOrder)
unsigned int const unsigned char apr_size_t char apr_size_t out_len
#define APR_BUCKET_REMOVE(e)
#define APR_BUCKET_IS_METADATA(e)
#define APR_BRIGADE_PREPEND(a, b)
#define APR_BRIGADE_INSERT_TAIL(b, e)
#define apr_bucket_split(e, point)
#define APR_BRIGADE_INSERT_HEAD(b, e)
#define APR_BUCKET_NEXT(e)
#define APR_BRIGADE_CONCAT(a, b)
#define APR_BRIGADE_EMPTY(b)
#define APR_BRIGADE_SENTINEL(b)
#define apr_bucket_delete(e)
#define APR_BUCKET_IS_EOS(e)
apr_brigade_flush void * ctx
apr_bucket apr_bucket_brigade * a
#define APR_BRIGADE_FIRST(b)
#define apr_bucket_read(e, str, len, block)
apr_dbd_transaction_t int mode
const char apr_ssize_t int partial
#define APR_HOOK_REALLY_LAST
struct apr_xlate_t apr_xlate_t
#define HTTP_INTERNAL_SERVER_ERROR
#define STANDARD20_MODULE_STUFF
void ap_bin2hex(const void *src, apr_size_t srclen, char *dest)
int ap_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
const char apr_int32_t flag
int strcasecmp(const char *a, const char *b)
apr_vformatter_buff_t * c
#define apr_pcalloc(p, size)
static const char * add_charset_source(cmd_parms *cmd, void *in_dc, const char *name)
static int configured_on_output(request_rec *r, const char *filter_name)
static void * merge_charset_dir_conf(apr_pool_t *p, void *basev, void *overridesv)
static int configured_on_input(request_rec *r, const char *filter_name)
static void xlate_insert_filter(request_rec *r)
#define XLATEIN_FILTER_NAME
static apr_status_t send_downstream(ap_filter_t *f, const char *tmp, apr_size_t len)
static int configured_in_list(request_rec *r, const char *filter_name, struct ap_filter_t *filter_list)
#define OUTPUT_XLATE_BUF_SIZE
static void * create_charset_dir_conf(apr_pool_t *p, char *dummy)
static void chk_filter_chain(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 apr_status_t 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 apr_status_t send_bucket_downstream(ap_filter_t *f, apr_bucket *b)
static void charset_register_hooks(apr_pool_t *p)
static void log_xlate_error(ap_filter_t *f, apr_status_t rv)
static const command_rec cmds[]
#define INPUT_XLATE_BUF_SIZE
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 const char * add_charset_options(cmd_parms *cmd, void *in_dc, const char *flag)
static int find_code_page(request_rec *r)
static apr_status_t send_eos(ap_filter_t *f)
#define XLATE_MIN_BUFF_LEFT
#define XLATEOUT_FILTER_NAME
static const char * add_charset_default(cmd_parms *cmd, void *in_dc, const char *name)
static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
The representation of a filter chain.
const char * charset_source
enum charset_dir_t::@13 implicit_add
enum charset_dir_t::@14 force_xlate
const char * charset_default
apr_bucket_brigade * tmpbb
charset_filter_ctx_t * input_ctx
charset_filter_ctx_t * output_ctx
Structure to store things which are per connection.
struct apr_bucket_alloc_t * bucket_alloc
A structure that represents the current request.
const char * content_type
struct ap_filter_t * output_filters
struct ap_filter_t * input_filters
struct ap_conf_vector_t * request_config
struct ap_conf_vector_t * per_dir_config
ap_input_mode_t
input filtering modes