diff options
author | Greg Wilkins | 2010-02-15 05:14:07 +0000 |
---|---|---|
committer | Greg Wilkins | 2010-02-15 05:14:07 +0000 |
commit | 37fe212f3576ea31af07d87316e7f7308b1c9716 (patch) | |
tree | fb04de001220ab1aceff361a0b5a4b0e23eb1638 /jetty-servlet/src/main | |
parent | ec3a5b4f6106b8f610d02b88f0fb37a0d09d3a2c (diff) | |
download | org.eclipse.jetty.project-37fe212f3576ea31af07d87316e7f7308b1c9716.tar.gz org.eclipse.jetty.project-37fe212f3576ea31af07d87316e7f7308b1c9716.tar.xz org.eclipse.jetty.project-37fe212f3576ea31af07d87316e7f7308b1c9716.zip |
JETTY-983 range handling cleanup
git-svn-id: svn+ssh://dev.eclipse.org/svnroot/rt/org.eclipse.jetty/jetty/trunk@1267 7e9141cc-0065-0410-87d8-b60c137991c4
Diffstat (limited to 'jetty-servlet/src/main')
-rw-r--r-- | jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java | 43 |
1 files changed, 10 insertions, 33 deletions
diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java index 82f6dbe3f9..1f5571130d 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/DefaultServlet.java @@ -339,7 +339,6 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory String servletPath=null; String pathInfo=null; Enumeration reqRanges = null; - boolean byteRangeRules = false; Boolean included =request.getAttribute(Dispatcher.INCLUDE_REQUEST_URI)!=null; if (included!=null && included.booleanValue()) { @@ -357,21 +356,10 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory servletPath = request.getServletPath(); pathInfo = request.getPathInfo(); - // Is this a Content-Range request? - reqRanges = request.getHeaders(HttpHeaders.CONTENT_RANGE); + // Is this a Range request? + reqRanges = request.getHeaders(HttpHeaders.RANGE); if (!hasDefinedRange(reqRanges)) - { - // Is this a Range request? - reqRanges = request.getHeaders(HttpHeaders.RANGE); - if (hasDefinedRange(reqRanges)) - { - byteRangeRules = true; - } - else - { - reqRanges = null; - } - } + reqRanges = null; } String pathInContext=URIUtil.addPaths(servletPath,pathInfo); @@ -474,7 +462,7 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory if (mt!=null) response.setContentType(mt); } - sendData(request,response,included.booleanValue(),resource,content,reqRanges,byteRangeRules); + sendData(request,response,included.booleanValue(),resource,content,reqRanges); } } } @@ -724,18 +712,17 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory boolean include, Resource resource, HttpContent content, - Enumeration reqRanges, - boolean byteRangeRules) + Enumeration reqRanges) throws IOException { - long content_length=resource.length(); + long content_length=content==null?resource.length():content.getContentLength(); // Get the output stream (or writer) OutputStream out =null; try{out = response.getOutputStream();} catch(IllegalStateException e) {out = new WriterOutputStream(response.getWriter());} - if ( reqRanges == null || !reqRanges.hasMoreElements()) + if ( reqRanges == null || !reqRanges.hasMoreElements() || content_length<0) { // if there were no ranges, send entire entity if (include) @@ -774,7 +761,9 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory else { // Parse the satisfiable ranges - List ranges =InclusiveByteRange.satisfiableRanges(reqRanges,byteRangeRules,content_length); + List ranges =InclusiveByteRange.satisfiableRanges(reqRanges,content_length); + + System.err.println(ranges+" "+request.getHeader(HttpHeaders.RANGE)+" "+content_length); // if there are no satisfiable ranges, send 416 response if (ranges==null || ranges.size()==0) @@ -802,18 +791,6 @@ public class DefaultServlet extends HttpServlet implements ResourceFactory return; } - // If not following byte range rules (such as when using the "Content-Range" request) - // There is no possibility of sending a multi-part range. - // See http://tools.ietf.org/html/rfc2616#section-14.16 - if (!byteRangeRules) - { - writeHeaders(response,content,content_length); - response.setStatus(HttpServletResponse.SC_REQUESTED_RANGE_NOT_SATISFIABLE); - response.setHeader(HttpHeaders.CONTENT_RANGE,InclusiveByteRange.to416HeaderRangeString(content_length)); - resource.writeTo(out,0,content_length); - return; - } - // multiple non-overlapping valid ranges cause a multipart // 216 response which does not require an overall // content-length header |