return NULL;
}
-/* find_code_page() is a fixup hook that decides if translation should be
- * enabled; if so, it sets up request data for use by the filter registration
- * hook so that it knows what to do
+/* find_code_page() is a fixup hook that checks if the module is
+ * configured and the input or output potentially need to be translated.
+ * If so, context is initialized for the filters.
*/
static int find_code_page(request_rec *r)
{
charset_req_t *reqinfo;
charset_filter_ctx_t *input_ctx, *output_ctx;
apr_status_t rv;
- const char *mime_type;
if (dc->debug >= DBGLVL_FLOW) {
ap_log_rerror(APLOG_MARK,APLOG_DEBUG, 0, r,
/* no translation when server and network charsets are set to the same value */
if (!strcasecmp(dc->charset_source, dc->charset_default)) return DECLINED;
- mime_type = r->content_type ? r->content_type : ap_default_type(r);
-
- /* If mime type isn't text or message, bail out.
- */
-
-/* XXX When we handle translation of the request body, watch out here as
- * 1.3 allowed additional mime types: multipart and
- * application/x-www-form-urlencoded
- */
-
- if (strncasecmp(mime_type, "text/", 5) &&
-#if APR_CHARSET_EBCDIC || AP_WANT_DIR_TRANSLATION
- /* On an EBCDIC machine, be willing to translate mod_autoindex-
- * generated output. Otherwise, it doesn't look too cool.
- *
- * XXX This isn't a perfect fix because this doesn't trigger us
- * to convert from the charset of the source code to ASCII. The
- * general solution seems to be to allow a generator to set an
- * indicator in the r specifying that the body is coded in the
- * implementation character set (i.e., the charset of the source
- * code). This would get several different types of documents
- * translated properly: mod_autoindex output, mod_status output,
- * mod_info output, hard-coded error documents, etc.
- */
- strcmp(mime_type, DIR_MAGIC_TYPE) &&
-#endif
- strncasecmp(mime_type, "message/", 8)) {
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "mime type is %s; no translation selected",
- mime_type);
- }
- /* We must not bail out here (i.e., the MIME test must be in the filter
- * itself, not in the fixup, because only then is the final MIME type known.
- * Examples for late changes to the MIME type include CGI handling (MIME
- * type is set in the Content-Type header produced by the CGI script), or
- * PHP (until PHP runs, the MIME type is set to application/x-httpd-php)
- */
- }
-
- if (dc->debug >= DBGLVL_GORY) {
- ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r,
- "charset_source: %s charset_default: %s",
- dc && dc->charset_source ? dc->charset_source : "(none)",
- dc && dc->charset_default ? dc->charset_default : "(none)");
- }
-
/* Get storage for the request data and the output filter context.
* We rarely need the input filter context, so allocate that separately.
*/
reqinfo->output_ctx = output_ctx;
- /* We must not open the xlation table here yet, because the final MIME
- * type is not known until we are actually called in the output filter.
- * With POST or PUT request, the case is different, because their MIME
- * type is set in the request headers, and their data are prerequisites
- * for actually calling, e.g., the CGI handler later on.
- */
- output_ctx->xlate = NULL;
-
switch (r->method_number) {
case M_PUT:
case M_POST:
}
}
- /* Opening the output translation (this used to be done in the fixup hook,
- * but that was too early: a subsequent type modification, e.g., by a
- * CGI script, would go unnoticed. Now we do it in the filter itself.)
+ /* Check the mime type to see if translation should be performed.
*/
if (!ctx->noop && ctx->xlate == NULL)
{
const char *mime_type = f->r->content_type ? f->r->content_type : ap_default_type(f->r);
- /* XXX When we handle translation of the request body, watch out here as
- * 1.3 allowed additional mime types: multipart and
- * application/x-www-form-urlencoded
- */
if (strncasecmp(mime_type, "text/", 5) == 0 ||
#if APR_CHARSET_EBCDIC
/* On an EBCDIC machine, be willing to translate mod_autoindex-