Software / code / prosody
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 |