Comparison

plugins/mod_http_file_share.lua @ 13787:3e72cdca6beb

Merge 13.0->trunk
author Kim Alvefur <zash@zash.se>
date Sun, 23 Mar 2025 17:24:49 +0100
parent 13786:284b100acda1
child 13854:0b01f40df0f9
comparison
equal deleted inserted replaced
13783:833fa5d08d13 13787:3e72cdca6beb
427 end 427 end
428 428
429 local request_range = request.headers.range; 429 local request_range = request.headers.range;
430 local response_range; 430 local response_range;
431 if request_range then 431 if request_range then
432 local last_byte = string.format("%d", tonumber(filesize) - 1);
432 local range_start, range_end = request_range:match("^bytes=(%d+)%-(%d*)$") 433 local range_start, range_end = request_range:match("^bytes=(%d+)%-(%d*)$")
433 -- Only support resumption, ie ranges from somewhere in the middle until the end of the file. 434 -- Only support resumption, ie ranges from somewhere in the middle until the end of the file.
434 if (range_start and range_start ~= "0") and (range_end == "" or range_end == filesize) then 435 if (range_start and range_start ~= "0") and (range_end == "" or range_end == last_byte) then
435 local pos, size = tonumber(range_start), tonumber(filesize); 436 local pos, size = tonumber(range_start), tonumber(filesize);
436 local new_pos = pos < size and handle:seek("set", pos); 437 local new_pos = pos < size and handle:seek("set", pos);
437 if new_pos and new_pos < size then 438 if new_pos and new_pos < size then
438 response_range = "bytes "..range_start.."-"..filesize.."/"..filesize; 439 response_range = "bytes "..range_start.."-"..last_byte.."/"..filesize;
439 filesize = string.format("%d", size-pos); 440 filesize = string.format("%d", size-pos);
440 else 441 else
441 handle:close(); 442 handle:close();
442 return 416; 443 return 416;
443 end 444 end
445 else
446 handle:close();
447 return 416;
444 end 448 end
445 end 449 end
446 450
447 451
448 if not filetype then 452 if not filetype then