]> granicus.if.org Git - apache/commitdiff
First commit to introduce accessor function to set r->content_type..
authorBill Stoddard <stoddard@apache.org>
Wed, 20 Mar 2002 01:58:47 +0000 (01:58 +0000)
committerBill Stoddard <stoddard@apache.org>
Wed, 20 Mar 2002 01:58:47 +0000 (01:58 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94027 13f79535-47bb-0310-9956-ffa450edef68

19 files changed:
modules/dav/main/mod_dav.c
modules/experimental/cache_storage.c
modules/experimental/mod_example.c
modules/filters/mod_include.c
modules/generators/mod_autoindex.c
modules/generators/mod_cgi.c
modules/generators/mod_cgid.c
modules/generators/mod_info.c
modules/generators/mod_status.c
modules/http/http_protocol.c
modules/http/http_request.c
modules/http/mod_mime.c
modules/mappers/mod_imap.c
modules/mappers/mod_negotiation.c
modules/mappers/mod_rewrite.c
modules/metadata/mod_cern_meta.c
modules/metadata/mod_mime_magic.c
modules/proxy/proxy_ftp.c
modules/proxy/proxy_http.c

index e35cb3563ad564ad56fb7a12bab14523ceec3640..3a0aaf725d678a340a9346225da86042061b80fe 100644 (file)
@@ -345,7 +345,7 @@ static int dav_error_response(request_rec *r, int status, const char *body)
     /* ### I really don't think this is needed; gotta test */
     r->status_line = ap_get_status_line(status);
 
-    r->content_type = "text/html";
+    ap_rset_content_type("text/html", r);
 
     /* since we're returning DONE, ensure the request body is consumed. */
     (void) ap_discard_request_body(r);
@@ -382,7 +382,7 @@ static int dav_error_response_tag(request_rec *r,
     /* ### I really don't think this is needed; gotta test */
     r->status_line = ap_get_status_line(err->status);
 
-    r->content_type = DAV_XML_CONTENT_TYPE;
+    ap_rset_content_type(DAV_XML_CONTENT_TYPE, r);
 
     /* since we're returning DONE, ensure the request body is consumed. */
     (void) ap_discard_request_body(r);
@@ -455,7 +455,7 @@ static void dav_send_multistatus(request_rec *r, int status,
 {
     /* Set the correct status and Content-Type */
     r->status = status;
-    r->content_type = DAV_XML_CONTENT_TYPE;
+    ap_rset_content_type(DAV_XML_CONTENT_TYPE, r);
 
     /* Send the headers and actual multistatus response now... */
     ap_rputs(DAV_XML_HEADER DEBUG_CR
@@ -1693,7 +1693,7 @@ static int dav_method_options(request_rec *r)
 
     /* send the options response */
     r->status = HTTP_OK;
-    r->content_type = DAV_XML_CONTENT_TYPE;
+    ap_rset_content_type(DAV_XML_CONTENT_TYPE, r);
 
     /* send the headers and response body */
     ap_rputs(DAV_XML_HEADER DEBUG_CR
@@ -2920,7 +2920,7 @@ static int dav_method_lock(request_rec *r)
     (*locks_hooks->close_lockdb)(lockdb);
 
     r->status = HTTP_OK;
-    r->content_type = DAV_XML_CONTENT_TYPE;
+    ap_rset_content_type(DAV_XML_CONTENT_TYPE, r);
 
     ap_rputs(DAV_XML_HEADER DEBUG_CR "<D:prop xmlns:D=\"DAV:\">" DEBUG_CR, r);
     if (lock == NULL)
@@ -3878,7 +3878,7 @@ static int dav_method_report(request_rec *r)
 
     /* set up defaults for the report response */
     r->status = HTTP_OK;
-    r->content_type = DAV_XML_CONTENT_TYPE;
+    ap_rset_content_type(DAV_XML_CONTENT_TYPE, r);
 
     /* run report hook */
     if ((err = (*vsn_hooks->deliver_report)(r, resource, doc,
@@ -4125,7 +4125,7 @@ static int dav_method_merge(request_rec *r)
        is going to do something different (i.e. an error), then it must
        return a dav_error, and we'll reset these values properly. */
     r->status = HTTP_OK;
-    r->content_type = "text/xml";
+    ap_rset_content_type("text/xml", r);
 
     /* ### should we do any preliminary response generation? probably not,
        ### because we may have an error, thus demanding something else in
index d3cb540484d5996bd5f261e1edcd2378f89b4248..99860c3748b9030fac14f6b723df1998364b62b5 100644 (file)
@@ -237,7 +237,7 @@ apr_status_t cache_read_entity_headers(cache_handle_t *h, request_rec *r)
         return rv;
     }
 
-    r->content_type = apr_pstrdup(r->pool, info->content_type);
+    ap_rset_content_type(apr_pstrdup(r->pool, info->content_type), r);
     r->filename = apr_pstrdup(r->pool, info->filename );
 
     return APR_SUCCESS;
index 027cadd4c0efc692be6a8a9d904652899e98b5a9..c691e94da698dfe282f30a0ec61a6dad11744d4b 100644 (file)
@@ -552,7 +552,7 @@ static int x_handler(request_rec *r)
      * We also need to start a timer so the server can know if the connexion
      * is broken.
      */
-    r->content_type = "text/html";
+    ap_rset_content_type("text/html", r);
     /*
      * If we're only supposed to send header information (HEAD request), we're
      * already there.
index 0b9d1c92fabf0dde1ee517cb0138e6319659eb04..c96d47bc10db85ef0b1723b4fa30e55b6f52bd47 100644 (file)
@@ -3453,7 +3453,7 @@ static int include_fixup(request_rec *r)
     if (r->handler && (strcmp(r->handler, "server-parsed") == 0)) 
     {
         if (!r->content_type || !*r->content_type) {
-            r->content_type = "text/html";
+            ap_rset_content_type("text/html", r);
         }
         r->handler = "default-handler";
     }
index 9e3741a0ff578c90290a15bcd01e606b871a59f4..ce9c8523b016cfcbe1a9e2f1e1ef3b48a804aee2 100644 (file)
@@ -1895,9 +1895,9 @@ static int index_directory(request_rec *r,
     }
 
 #if APR_HAS_UNICODE_FS 
-    r->content_type = "text/html;charset=utf-8";
+    ap_rset_content_type("text/html;charset=utf-8", r);
 #else
-    r->content_type = "text/html";
+    ap_rset_content_type("text/html", r);
 #endif
     if (autoindex_opts & TRACK_MODIFIED) {
         ap_update_mtime(r, r->finfo.mtime);
index 69226a8da4245f34a944d83ba750c3007a4f13a5..ed475d616d863eec80cf4d2a3ced870596efa6fd 100644 (file)
@@ -788,7 +788,7 @@ static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
      * typing rules would have called it something else.
      */
 
-    rr->content_type = CGI_MAGIC_TYPE;
+    ap_rset_content_type(CGI_MAGIC_TYPE, rr);
 
     /* Run it. */
 
index 17f1c6f71c1aa86b1e19b495adae004cd8291346..5056218befe72d68e238abc641497ff951c3b1cc 100644 (file)
@@ -1216,8 +1216,7 @@ static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
     /* Force sub_req to be treated as a CGI request, even if ordinary
      * typing rules would have called it something else.
      */
-
-    rr->content_type = CGI_MAGIC_TYPE;
+    ap_rset_content_type(CGI_MAGIC_TYPE, rr);
 
     /* Run it. */
 
index 8f9553cb47c60cbeeac7fd432bab6caf239dd34f..56d5edfc7529698edcbb9edf4d76fb80ac4f6b68 100644 (file)
@@ -377,7 +377,7 @@ static int display_info(request_rec *r)
     if (r->method_number != M_GET)
        return DECLINED;
 
-    r->content_type = "text/html";
+    ap_rset_content_type("text/html", r);
     if (r->header_only) {
         return 0;
     }
index d859a74318a4ec29e798f7edb51d45da54af4c64..c51ca99232c875fec00f4887ae39a5c0660cd6cb 100644 (file)
@@ -283,7 +283,7 @@ static int status_handler(request_rec *r)
     if (r->method_number != M_GET)
         return DECLINED;
 
-    r->content_type = "text/html";
+    ap_rset_content_type("text/html", r);
 
     /*
      * Simple table-driven form data set parser that lets you alter the header
@@ -312,7 +312,7 @@ static int status_handler(request_rec *r)
                     no_table_report = 1;
                     break;
                 case STAT_OPT_AUTO:
-                    r->content_type = "text/plain";
+                    ap_rset_content_type("text/plain", r);
                     short_report = 1;
                     break;
                 }
index cffdcb7ddb0dba38183032327263cb2953ee59f3..b354fb28a492ce77b54c4f7691667bf2b1387950 100644 (file)
@@ -1145,7 +1145,7 @@ AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r)
         return rv;
     }
 
-    r->content_type = "message/http";
+    ap_rset_content_type("message/http", r);
 
     /* Now we recreate the request, and echo it back */
 
@@ -1253,6 +1253,17 @@ static void fixup_vary(request_rec *r)
                        apr_array_pstrcat(r->pool, varies, ','));
     }
 }
+AP_DECLARE(void) ap_rset_content_type(char *ct, request_rec *r)
+{
+    r->content_type = ct;
+
+    /* Insert filters requested by the AddOutputFiltersByType 
+     * configuration directive. Content-type filters must be 
+     * inserted after the content handlers have run because 
+     * only then, do we reliably know the content-type.
+     */
+    ap_add_output_filters_by_type(r);
+}
 
 typedef struct header_filter_ctx {
     int headers_sent;
@@ -2039,7 +2050,7 @@ AP_DECLARE(void) ap_send_error_response(request_rec *r, int recursive_error)
         r->content_languages = NULL;
         r->content_encoding = NULL;
         r->clength = 0;
-        r->content_type = "text/html; charset=iso-8859-1";
+        ap_rset_content_type("text/html; charset=iso-8859-1", r);
 
         if ((status == HTTP_METHOD_NOT_ALLOWED)
             || (status == HTTP_NOT_IMPLEMENTED)) {
@@ -2593,10 +2604,10 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
 
         if (num_ranges > 1) {
             ctx->orig_ct = r->content_type;
-            r->content_type = apr_pstrcat(r->pool, "multipart",
-                                          use_range_x(r) ? "/x-" : "/",
-                                          "byteranges; boundary=",
-                                          r->boundary, NULL);
+            ap_rset_content_type(apr_pstrcat(r->pool, "multipart",
+                                             use_range_x(r) ? "/x-" : "/",
+                                             "byteranges; boundary=",
+                                             r->boundary, NULL), r);
         }
 
         /* create a brigade in case we never call ap_save_brigade() */
index ae5e9ccfad50665250c71addaf2e5d4af5cefa51..f3a450c6730b6d6859540bd3af16e8c4bcbbf66b 100644 (file)
@@ -386,7 +386,7 @@ AP_DECLARE(void) ap_internal_fast_redirect(request_rec *rr, request_rec *r)
     r->args = rr->args;
     r->finfo = rr->finfo;
     r->handler = rr->handler;
-    r->content_type = rr->content_type;
+    ap_rset_content_type(rr->content_type, r);
     r->content_encoding = rr->content_encoding;
     r->content_languages = rr->content_languages;
     r->per_dir_config = rr->per_dir_config;
@@ -428,7 +428,7 @@ AP_DECLARE(void) ap_internal_redirect_handler(const char *new_uri, request_rec *
     int access_status;
     request_rec *new = internal_internal_redirect(new_uri, r);
     if (r->handler)
-        new->content_type = r->content_type;
+        ap_rset_content_type(r->content_type, new);
     access_status = ap_process_request_internal(new);
     if (access_status == OK) {
         if ((access_status = ap_invoke_handler(new)) != 0) {
index 7eaab71a3e6f78e461690f9899169b936632f195..c4cd832c1a81a69ab5c20867a5c72822a99ea652 100644 (file)
@@ -76,7 +76,7 @@
 #include "http_config.h"
 #include "http_log.h"
 #include "http_request.h"
-
+#include "http_protocol.h"
 
 /* XXXX - fix me / EBCDIC
  *        there was a cludge here which would use its
@@ -744,7 +744,7 @@ static int find_ct(request_rec *r)
     int found_metadata = 0;
 
     if (r->finfo.filetype == APR_DIR) {
-        r->content_type = DIR_MAGIC_TYPE;
+        ap_rset_content_type(DIR_MAGIC_TYPE, r);
         return OK;
     }
 
@@ -793,7 +793,7 @@ static int find_ct(request_rec *r)
         if (exinfo == NULL || !exinfo->forced_type) {
             if ((type = apr_hash_get(mime_type_extensions, ext,
                                      APR_HASH_KEY_STRING)) != NULL) {
-                r->content_type = type;
+                ap_rset_content_type((char*) type, r);
                 found = 1;
             }
         }
@@ -801,7 +801,7 @@ static int find_ct(request_rec *r)
         if (exinfo != NULL) {
 
             if (exinfo->forced_type) {
-                r->content_type = exinfo->forced_type;
+                ap_rset_content_type(exinfo->forced_type, r);
                 found = 1;
             }
 
@@ -885,29 +885,29 @@ static int find_ct(request_rec *r)
 
        if ((ctp = analyze_ct(r, r->content_type))) {
            param *pp = ctp->param;
-           r->content_type = apr_pstrcat(r->pool, ctp->type, "/",
-                                        ctp->subtype, NULL);
+           ap_rset_content_type(apr_pstrcat(r->pool, ctp->type, "/",
+                                             ctp->subtype, NULL), r);
            while (pp != NULL) {
                if (charset && !strcmp(pp->attr, "charset")) {
                    if (!override) {
-                       r->content_type = apr_pstrcat(r->pool, r->content_type,
-                                                    "; charset=", charset,
-                                                    NULL);
+                       ap_rset_content_type(apr_pstrcat(r->pool, r->content_type,
+                                                         "; charset=", charset,
+                                                         NULL), r);
                        override = 1;
                    }
                }
                else {
-                   r->content_type = apr_pstrcat(r->pool, r->content_type,
-                                                "; ", pp->attr,
-                                                "=", pp->val,
-                                                NULL);
+                   ap_rset_content_type(apr_pstrcat(r->pool, r->content_type,
+                                                     "; ", pp->attr,
+                                                     "=", pp->val,
+                                                     NULL), r);
                }
                pp = pp->next;
            }
            if (charset && !override) {
-               r->content_type = apr_pstrcat(r->pool, r->content_type,
-                                            "; charset=", charset,
-                                            NULL);
+               ap_rset_content_type(apr_pstrcat(r->pool, r->content_type,
+                                                 "; charset=", charset,
+                                                 NULL), r);
            }
        }
     }
index ecf365764d25499babdc088b8b274880c43a3770..001f95b0002965862743e06a2f63484fcc13934e 100644 (file)
@@ -521,7 +521,7 @@ static int imap_reply(request_rec *r, char *redirect)
 
 static void menu_header(request_rec *r, char *menu)
 {
-    r->content_type = "text/html";
+    ap_rset_content_type("text/html", r);
 
     ap_rvputs(r, DOCTYPE_HTML_3_2, "<html><head>\n<title>Menu for ", r->uri,
            "</title>\n</head><body>\n", NULL);
index 9e28a750f05e71055d1897f4c4e83c0a12a2dd7b..4a19579d5f14c8d51057bf44bfdd76fc4f95c60b 100644 (file)
@@ -1115,7 +1115,7 @@ static int read_types_multi(negotiation_state *neg)
          * might be doing.
          */
         if (sub_req->handler && !sub_req->content_type) {
-            sub_req->content_type = CGI_MAGIC_TYPE;
+            ap_rset_content_type(CGI_MAGIC_TYPE, sub_req);
         }
 
         /* 
index b97ddf4f083b80dac22b29c05f10868f90b70d2a..bc3b87de048230863c405dfa22ee83abfe0d4c44 100644 (file)
@@ -1311,7 +1311,7 @@ static int hook_mimetype(request_rec *r)
     else {
         rewritelog(r, 1, "force filename %s to have MIME-type '%s'",
                    r->filename, t);
-        r->content_type = t;
+        ap_rset_content_type(t, r);
         return OK;
     }
 }
@@ -1959,7 +1959,7 @@ static int apply_rewrite_rule(request_rec *r, rewriterule_entry *p,
                  */
                 rewritelog(r, 1, "[per-dir %s] force %s to have MIME-type "
                            "'%s'", perdir, r->filename, p->forced_mimetype);
-                r->content_type = p->forced_mimetype;
+                ap_rset_content_type(p->forced_mimetype, r);
             }
         }
         return 2;
index 2808a44d813e648ff200c98e31f109ef9c83e336..8325759a2a5c3b0f79a1aacef0ea3267f3140d0c 100644 (file)
 #include "util_script.h"
 #include "http_log.h"
 #include "http_request.h"
+#include "http_protocol.h"
 #include "apr_lib.h"
 
 #define DIR_CMD_PERMS OR_INDEXES
@@ -292,7 +293,7 @@ static int scan_meta_file(request_rec *r, apr_file_t *f)
 
            tmp = apr_pstrdup(r->pool, l);
            ap_content_type_tolower(tmp);
-           r->content_type = tmp;
+           ap_rset_content_type(tmp, r);
        }
        else if (!strcasecmp(w, "Status")) {
            sscanf(l, "%d", &r->status);
index 5c9d925260957f994074da5494ad820ad852eff9..47a31b300278cdab4a9e258665ebb8abcfed8e96 100644 (file)
@@ -833,7 +833,7 @@ static int magic_rsl_to_request(request_rec *r)
        /* XXX: this could be done at config time I'm sure... but I'm
         * confused by all this magic_rsl stuff. -djg */
        ap_content_type_tolower(tmp);
-       r->content_type = tmp;
+       ap_rset_content_type(tmp, r);
     }
     if (state == rsl_encoding) {
         char *tmp;
@@ -2369,7 +2369,7 @@ static int revision_suffix(request_rec *r)
 
     /* extract content type/encoding/language from sub-request */
     if (sub->content_type) {
-       r->content_type = apr_pstrdup(r->pool, sub->content_type);
+       ap_rset_content_type(apr_pstrdup(r->pool, sub->content_type), r);
 #if MIME_MAGIC_DEBUG
        ap_log_rerror(APLOG_MARK, APLOG_NOERRNO | APLOG_DEBUG, 0, r,
                    MODNAME ": subrequest %s got %s",
index 41cdf2c7ca07891547217f2396dd582cd7dd76cf..d80b4e5d1a30400e6831f070cfd2add9a4bac8bf 100644 (file)
@@ -1710,7 +1710,7 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
 
     /* set content-type */
     if (dirlisting) {
-        r->content_type = "text/html";
+        ap_rset_content_type("text/html", r);
     }
     else {
         if (r->content_type) {
@@ -1718,7 +1718,7 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
                      "proxy: FTP: Content-Type set to %s", r->content_type);
         }
         else {
-            r->content_type = ap_default_type(r);
+            ap_rset_content_type(ap_default_type(r), r);
         }
         if (xfer_type != 'A' && size != NULL) {
             /* We "trust" the ftp server to really serve (size) bytes... */
index 8130e2c213f78f4d9a1fdb95ae08815fd4bdd05c..bf72da994b71e9e51e668bf4ea198a645354adb4 100644 (file)
@@ -701,7 +701,7 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
                                                   "close");
                 ap_proxy_clear_connection(p, r->headers_out);
                 if ((buf = apr_table_get(r->headers_out, "Content-Type"))) {
-                    r->content_type = apr_pstrdup(p, buf);
+                    ap_rset_content_type(apr_pstrdup(p, buf), r);
                 }            
                 ap_proxy_pre_http_request(origin,rp);
             }