]> granicus.if.org Git - apache/commitdiff
Finish up
authorJeff Trawick <trawick@apache.org>
Fri, 16 Nov 2007 12:36:25 +0000 (12:36 +0000)
committerJeff Trawick <trawick@apache.org>
Fri, 16 Nov 2007 12:36:25 +0000 (12:36 +0000)
  http://svn.apache.org/viewvc?view=rev&revision=102066
  http://svn.apache.org/viewvc?view=rev&revision=102205
from almost 4 years ago by removing abandoned logic from
the fixup hook.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@595646 13f79535-47bb-0310-9956-ffa450edef68

modules/filters/mod_charset_lite.c

index 1489e4316ce2a227ebc23488b667adc46906d5a4..85a3b2184bb3a657e41185f64f91683cac173140 100644 (file)
@@ -189,9 +189,9 @@ static const char *add_charset_options(cmd_parms *cmd, void *in_dc,
     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)
 {
@@ -200,7 +200,6 @@ 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,
@@ -241,53 +240,6 @@ static int find_code_page(request_rec *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.
      */
@@ -302,14 +254,6 @@ static int find_code_page(request_rec *r)
 
     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:
@@ -832,18 +776,12 @@ static apr_status_t xlate_out_filter(ap_filter_t *f, apr_bucket_brigade *bb)
         }
     }
 
-    /* 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-