Author: michiel
Date: 2010-07-01 17:10:39 +0200 (Thu, 01 Jul 2010)
New Revision: 42782

Modified:
   
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
Log:
MMB-1909

Modified: 
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
===================================================================
--- 
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
       2010-07-01 14:43:16 UTC (rev 42781)
+++ 
mmbase/trunk/applications/resources/src/main/java/org/mmbase/servlet/FileServlet.java
       2010-07-01 15:10:39 UTC (rev 42782)
@@ -458,11 +458,15 @@
         }
 
         String range = req.getHeader("Range");
-        log.debug("Range: " + range);
+
         if (range != null) {
             String r[] = range.split("=");
             if (r.length == 2 && r[0].trim().toLowerCase().equals("bytes")) {
-                return new ChainedRange(r[1], file.length());
+                ChainedRange parsed = new ChainedRange(r[1], file.length());
+                if (log.isDebugEnabled()) {
+                    log.debug("Range: " + range + " -> " + r[1] + " -> " + 
parsed);
+                }
+                return parsed;
             }
         }
         return null;
@@ -479,14 +483,25 @@
             long pos = 0;
             while (pos < range.max) {
                 long available = range.available(pos);
-                while(available > 0) {
+                while(available > 0L) {
+                    if (log.isTraceEnabled()) {
+                        log.trace("streaming " + available);
+                    }
                     int b = in.read(buf, 0, (int) Math.min(available, 1024L));
-                    out.write(buf, 0, b);
-                    pos += b;
-                    available -= b;
+                    if (b > 0) {
+                        out.write(buf, 0, b);
+                        pos += b;
+                        available -= b;
+                    } else {
+                        //log.warn(" buf " + b);
+                        available = 0;
+                    }
                 }
                 long notavailable = range.notavailable(pos);
-                if (notavailable > 0) {
+                if (log.isTraceEnabled()) {
+                    log.trace("skipping " + notavailable);
+                }
+                if (notavailable > 0L) {
                     in.skip(notavailable);
                     pos += notavailable;
                 }

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to