comparison plugins/mod_http_file_share.lua @ 14074:b688908622a1

Merge 13.0->trunk
author Kim Alvefur <zash@zash.se>
date Fri, 13 Feb 2026 15:22:46 +0100
parents eae7d0350a52 dfbc60d47668
children c83aee2a0b11
comparison
equal deleted inserted replaced
14072:beb5a667c20d 14074:b688908622a1
431 return 410; 431 return 410;
432 end 432 end
433 433
434 local request_range = request.headers.range; 434 local request_range = request.headers.range;
435 local response_range; 435 local response_range;
436 if request_range then 436 -- "bytes=0-" just means "the whole file", so ignore it along with non-byte-range requests
437 local last_byte = string.format("%d", tonumber(filesize) - 1); 437 if request_range and request_range ~= "bytes=0-" and request_range:find("^bytes=") then
438 local size = tonumber(filesize);
439 local last_byte = string.format("%d", size - 1);
438 local range_start, range_end = request_range:match("^bytes=(%d+)%-(%d*)$") 440 local range_start, range_end = request_range:match("^bytes=(%d+)%-(%d*)$")
439 -- Only support resumption, ie ranges from somewhere in the middle until the end of the file. 441 -- Only support resumption, ie ranges from somewhere in the middle until the end of the file.
440 if (range_start and range_start ~= "0") and (range_end == "" or range_end == last_byte) then 442 if range_end == "" or range_end == last_byte then
441 local pos, size = tonumber(range_start), tonumber(filesize); 443 local pos = tonumber(range_start);
442 local new_pos = pos < size and handle:seek("set", pos); 444 local new_pos = pos < size and handle:seek("set", pos);
443 if new_pos and new_pos < size then 445 if new_pos and new_pos < size then
444 response_range = "bytes "..range_start.."-"..last_byte.."/"..filesize; 446 response_range = string.format("bytes %d-%d/%s", range_start, last_byte, filesize);
445 filesize = string.format("%d", size-pos); 447 filesize = string.format("%d", size-pos);
446 else 448 else
447 handle:close(); 449 handle:close();
448 return 416; 450 return 416;
449 end 451 end
450 else
451 handle:close();
452 return 416;
453 end 452 end
454 end 453 end
455 454
456 455
457 if not filetype then 456 if not filetype then