@@ -560,6 +560,57 @@ baos, new Deflater(Deflater.DEFAULT_COMPRESSION,
560560 servletResponse .setStatus (HttpServletResponse .SC_OK );
561561 os .write (body );
562562 os .flush ();
563+ baseRequest .setHandled (true );
564+ return ;
565+ } else if (method .equals ("GET" ) && uri .startsWith ("/range/" )) {
566+ Utils .copy (is , Utils .NULL_OUTPUT_STREAM );
567+
568+ long size = Long .parseLong (uri .substring ("/range/" .length ()));
569+ long start ;
570+ long end ;
571+ String range = request .getHeader ("Range" );
572+ if (range != null && range .startsWith ("bytes=" )) {
573+ range = range .substring ("bytes=" .length ());
574+ String [] ranges = range .split ("-" , 2 );
575+ if (ranges [0 ].isEmpty ()) {
576+ start = size - Long .parseLong (ranges [1 ]);
577+ end = size - 1 ;
578+ } else if (ranges [1 ].isEmpty ()) {
579+ start = Long .parseLong (ranges [0 ]);
580+ end = size - 1 ;
581+ } else {
582+ start = Long .parseLong (ranges [0 ]);
583+ end = Long .parseLong (ranges [1 ]);
584+ }
585+ if (end + 1 > size || start > end ) {
586+ servletResponse .setStatus (HttpServletResponse .
587+ SC_REQUESTED_RANGE_NOT_SATISFIABLE );
588+ servletResponse .addHeader ("ETag" , "range" + size );
589+ servletResponse .addHeader ("Content-Range" ,
590+ "bytes */" + size );
591+ baseRequest .setHandled (true );
592+ return ;
593+ }
594+ servletResponse .setStatus (
595+ HttpServletResponse .SC_PARTIAL_CONTENT );
596+ } else {
597+ start = 0 ;
598+ end = size - 1 ;
599+ servletResponse .setStatus (HttpServletResponse .SC_OK );
600+ }
601+
602+ servletResponse .addHeader ("ETag" , "range" + size );
603+ servletResponse .addHeader ("Content-Length" ,
604+ String .valueOf (end - start + 1 ));
605+ servletResponse .addHeader ("Content-Range" ,
606+ "bytes " + start + "-" + end + "/" + size );
607+ servletResponse .addHeader ("Accept-ranges" , "bytes" );
608+
609+ for (long i = start ; i <= end ; ++i ) {
610+ os .write ((char ) ('a' + (i % 26 )));
611+ }
612+ os .flush ();
613+
563614 baseRequest .setHandled (true );
564615 return ;
565616 } else if (method .equals ("GET" ) && uri .equals ("/image/jpeg" )) {
0 commit comments