aboutsummaryrefslogtreecommitdiffstats
path: root/src/server/HttpServer.hx
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2021-07-11 22:39:30 +0300
committerRblSb <msrblsb@gmail.com>2021-07-11 22:39:30 +0300
commitafc010aeb7b7bdf750eaeb5c47db0fe345b492f5 (patch)
tree0343fdb53d47796dc96b7ef84de41def36da059a /src/server/HttpServer.hx
parentbba27c17e25a253d6fecb36dce170fea328fbcdd (diff)
Improve partial content streams
Diffstat (limited to 'src/server/HttpServer.hx')
-rw-r--r--src/server/HttpServer.hx13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/server/HttpServer.hx b/src/server/HttpServer.hx
index 2e69522..44e4f36 100644
--- a/src/server/HttpServer.hx
+++ b/src/server/HttpServer.hx
@@ -118,15 +118,18 @@ class HttpServer {
}
static function serveMedia(req:IncomingMessage, res:ServerResponse, filePath:String):Bool {
- final range:String = req.headers["range"];
- if (range == null) return false;
filePath = filePath.urlDecode();
if (!Fs.existsSync(filePath)) return false;
final videoSize = Fs.statSync(filePath).size;
- // range example: "bytes=24182784-"
+ var range:String = req.headers["range"];
+ if (range == null) range = "bytes=0-";
+ final ranges = ~/[-=]/g.split(range);
+ var start = Std.parseInt(ranges[1]);
+ if (start == null) start = 0;
final CHUNK_SIZE = 1024 * 1024 * 5; // 5 MB
- final start = Std.parseInt(~/[^0-9]/g.replace(range, ""));
- final end = Std.int(Math.min(start + CHUNK_SIZE, videoSize - 1));
+ var end = Std.parseInt(ranges[2]);
+ if (end == null) end = start + CHUNK_SIZE;
+ end = Std.int(Math.min(end, videoSize - 1));
final contentLength = end - start + 1;
res.setHeader("Content-Range", 'bytes ${start}-${end}/${videoSize}');
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage