httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cove...@apache.org
Subject svn commit: r1166282 - in /httpd/httpd/trunk: CHANGES docs/manual/mod/core.xml include/http_core.h modules/http/byterange_filter.c server/core.c
Date Wed, 07 Sep 2011 17:29:51 GMT
Author: covener
Date: Wed Sep  7 17:29:49 2011
New Revision: 1166282

URL: http://svn.apache.org/viewvc?rev=1166282&view=rev
Log:
take care of some MaxRanges feedback:
 * allow "none" to be expressed in config
 * send Accept-Ranges: none with MaxRanges none
 * stop accepting confusing/ambiguous "0", start accepting "unlimited".


Modified:
    httpd/httpd/trunk/CHANGES
    httpd/httpd/trunk/docs/manual/mod/core.xml
    httpd/httpd/trunk/include/http_core.h
    httpd/httpd/trunk/modules/http/byterange_filter.c
    httpd/httpd/trunk/server/core.c

Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1166282&r1=1166281&r2=1166282&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Wed Sep  7 17:29:49 2011
@@ -7,6 +7,10 @@ Changes with Apache 2.3.15
      the original file, ignore the ranges and send the complete file.
      PR 51714. [Stefan Fritsch, Jim Jagielski, Ruediger Pluem, Eric Covener]
 
+  *) core: Allow MaxRanges none|unlimited|default and set 'Accept-Ranges: none'
+     in the case Ranges are being ignored with MaxRanges none.
+     [Eric Covener]
+
   *) mod_ssl: revamp CRL-based revocation checking when validating
      certificates of clients or proxied servers. Completely delegate
      CRL processing to OpenSSL, and add a new [Proxy]CARevocationCheck

Modified: httpd/httpd/trunk/docs/manual/mod/core.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/core.xml?rev=1166282&r1=1166281&r2=1166282&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/core.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/core.xml Wed Sep  7 17:29:49 2011
@@ -2869,7 +2869,7 @@ connection</description>
 <name>MaxRanges</name>
 <description>Number of ranges allowed before returning the complete
 resource </description>
-<syntax>MaxRanges <var>number</var> (0 = no limit)</syntax>
+<syntax>MaxRanges default | unlimited | none | <var>number-of-ranges</var></syntax>
 <default>MaxRanges 200</default>
 <contextlist><context>server config</context><context>virtual host</context>
 <context>directory</context>
@@ -2881,6 +2881,22 @@ resource </description>
     limits the number of HTTP ranges the server is willing to 
     return to the client.  If more ranges then permitted are requested, 
     the complete resource is returned instead.</p>
+
+    <dl>  
+      <dt><strong>default</strong></dt>
+      <dd>Limits the number of ranges to a compile-time default of 200.</dd>
+   
+      <dt><strong>none</strong></dt>
+      <dd>Range headers are ignored.</dd>
+          
+      <dt><strong>unlimited</strong></dt>
+      <dd>The server does not limit the number of ranges it is
+          willing to satisfy.</dd>
+
+      <dt><var>number-of-ranges</var></dt>
+      <dd>A positive number representing the maximum number of ranges the
+      server is willing to satisfy.</dd>
+    </dl>
 </usage>
 </directivesynopsis>
 

Modified: httpd/httpd/trunk/include/http_core.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/include/http_core.h?rev=1166282&r1=1166281&r2=1166282&view=diff
==============================================================================
--- httpd/httpd/trunk/include/http_core.h (original)
+++ httpd/httpd/trunk/include/http_core.h Wed Sep  7 17:29:49 2011
@@ -605,7 +605,11 @@ typedef struct {
     /** Table of directives allowed per AllowOverrideList */
     apr_table_t *override_list;
 
-    /** Number of Ranges before returning HTTP_OK, 0/unlimited -1/unset. **/
+#define AP_MAXRANGES_UNSET     -1
+#define AP_MAXRANGES_DEFAULT   -2
+#define AP_MAXRANGES_UNLIMITED -3
+#define AP_MAXRANGES_NORANGES   0
+    /** Number of Ranges before returning HTTP_OK. **/
     int max_ranges;
 
 } core_dir_config;

Modified: httpd/httpd/trunk/modules/http/byterange_filter.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http/byterange_filter.c?rev=1166282&r1=1166281&r2=1166282&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http/byterange_filter.c (original)
+++ httpd/httpd/trunk/modules/http/byterange_filter.c Wed Sep  7 17:29:49 2011
@@ -192,7 +192,12 @@ typedef struct indexes_t {
 
 static int get_max_ranges(request_rec *r) { 
     core_dir_config *core_conf = ap_get_core_module_config(r->per_dir_config);
-    return core_conf->max_ranges == -1 ? DEFAULT_MAX_RANGES : core_conf->max_ranges;
+    if (core_conf->max_ranges >= 0 || core_conf->max_ranges == AP_MAXRANGES_UNLIMITED)
{ 
+        return core_conf->max_ranges;
+    }
+
+    /* Any other negative val means the default */
+    return DEFAULT_MAX_RANGES;
 }
 
 static apr_status_t send_416(ap_filter_t *f, apr_bucket_brigade *tmpbb)
@@ -257,7 +262,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_
     num_ranges = ap_set_byterange(r, clength, &indexes);
 
     /* We have nothing to do, get out of the way. */
-    if (num_ranges == 0 || (max_ranges > 0 && num_ranges > max_ranges)) {
+    if (num_ranges == 0 || (max_ranges >= 0 && num_ranges > max_ranges)) {
         r->status = original_status;
         ap_remove_output_filter(f);
         return ap_pass_brigade(f->next, bb);

Modified: httpd/httpd/trunk/server/core.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/core.c?rev=1166282&r1=1166281&r2=1166282&view=diff
==============================================================================
--- httpd/httpd/trunk/server/core.c (original)
+++ httpd/httpd/trunk/server/core.c Wed Sep  7 17:29:49 2011
@@ -179,7 +179,7 @@ static void *create_core_dir_config(apr_
     conf->allow_encoded_slashes = 0;
     conf->decode_encoded_slashes = 0;
  
-    conf->max_ranges = -1;
+    conf->max_ranges = AP_MAXRANGES_UNSET;
 
     return (void *)conf;
 }
@@ -399,7 +399,7 @@ static void *merge_core_dir_configs(apr_
         }
     }
 
-    conf->max_ranges = new->max_ranges != -1 ? new->max_ranges : base->max_ranges;
+    conf->max_ranges = new->max_ranges != AP_MAXRANGES_UNSET ? new->max_ranges :
base->max_ranges;
 
     return (void*)conf;
 }
@@ -3267,11 +3267,26 @@ static const char *set_limit_xml_req_bod
 static const char *set_max_ranges(cmd_parms *cmd, void *conf_, const char *arg)
 {
     core_dir_config *conf = conf_;
+    int val = 0;
 
-    conf->max_ranges = atoi(arg);
-    if (conf->max_ranges < 0)
-        return "MaxRanges requires a non-negative integer (0 = unlimited)";
+    if (!strcasecmp(arg, "none")) { 
+        val = AP_MAXRANGES_NORANGES;
+    }
+    else if (!strcasecmp(arg, "default")) { 
+        val = AP_MAXRANGES_DEFAULT;
+    }
+    else if (!strcasecmp(arg, "unlimited")) { 
+        val = AP_MAXRANGES_UNLIMITED;
+    }
+    else { 
+        val = atoi(arg);
+        if (val <= 0)
+            return "MaxRanges requires 'none', 'default', 'unlimited' or " 
+                   "a positive integer";
+    }
 
+    conf->max_ranges = val;
+    
     return NULL;
 }
 AP_DECLARE(size_t) ap_get_limit_xml_body(const request_rec *r)
@@ -4196,7 +4211,9 @@ static int default_handler(request_rec *
         ap_update_mtime(r, r->finfo.mtime);
         ap_set_last_modified(r);
         ap_set_etag(r);
-        apr_table_setn(r->headers_out, "Accept-Ranges", "bytes");
+        apr_table_setn(r->headers_out, "Accept-Ranges", 
+                       (d->max_ranges == AP_MAXRANGES_NORANGES) ? "none" 
+                                                                : "bytes");
         ap_set_content_length(r, r->finfo.size);
         if (bld_content_md5) {
             apr_table_setn(r->headers_out, "Content-MD5",



Mime
View raw message