diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ftp.lua | 9 | ||||
| -rw-r--r-- | src/ltn12.lua | 58 |
2 files changed, 35 insertions, 32 deletions
diff --git a/src/ftp.lua b/src/ftp.lua index 43c62c2..9902c88 100644 --- a/src/ftp.lua +++ b/src/ftp.lua | |||
| @@ -125,8 +125,10 @@ function metat.__index:send(sendt) | |||
| 125 | if string.find(code, "1..") then self.try(self.tp:check("2..")) end | 125 | if string.find(code, "1..") then self.try(self.tp:check("2..")) end |
| 126 | -- done with data connection | 126 | -- done with data connection |
| 127 | self.data:close() | 127 | self.data:close() |
| 128 | -- find out how many bytes were sent | ||
| 129 | local sent = socket.skip(1, self.data:getstats()) | ||
| 128 | self.data = nil | 130 | self.data = nil |
| 129 | return 1 | 131 | return sent |
| 130 | end | 132 | end |
| 131 | 133 | ||
| 132 | function metat.__index:receive(recvt) | 134 | function metat.__index:receive(recvt) |
| @@ -186,9 +188,10 @@ local function tput(putt) | |||
| 186 | f:login(putt.user, putt.password) | 188 | f:login(putt.user, putt.password) |
| 187 | if putt.type then f:type(putt.type) end | 189 | if putt.type then f:type(putt.type) end |
| 188 | f:pasv() | 190 | f:pasv() |
| 189 | f:send(putt) | 191 | local sent = f:send(putt) |
| 190 | f:quit() | 192 | f:quit() |
| 191 | return f:close() | 193 | f:close() |
| 194 | return sent | ||
| 192 | end | 195 | end |
| 193 | 196 | ||
| 194 | local default = { | 197 | local default = { |
diff --git a/src/ltn12.lua b/src/ltn12.lua index 6c5ea28..9917ce8 100644 --- a/src/ltn12.lua +++ b/src/ltn12.lua | |||
| @@ -31,40 +31,40 @@ function filter.cycle(low, ctx, extra) | |||
| 31 | end | 31 | end |
| 32 | end | 32 | end |
| 33 | 33 | ||
| 34 | -- chains a bunch of filters together | 34 | local function chain2(f1, f2) |
| 35 | -- by Wim Couwenberg | 35 | local ff1, ff2 = "", "" |
| 36 | function filter.chain(...) | ||
| 37 | local current = 1 | ||
| 38 | local bottom = 1 | ||
| 39 | local top = table.getn(arg) | ||
| 40 | local retry = "" | ||
| 41 | return function(chunk) | 36 | return function(chunk) |
| 42 | if chunk ~= retry then | 37 | local rf1 = chunk and "" |
| 43 | current = bottom | 38 | local rf2 = ff1 and "" |
| 44 | retry = chunk and retry | 39 | -- if f2 still has pending data, get it and return it |
| 40 | if ff2 ~= rf2 then | ||
| 41 | ff2 = f2(rf2) | ||
| 42 | if ff2 ~= "" then return ff2 end | ||
| 43 | end | ||
| 44 | -- here we know f2 needs more data | ||
| 45 | -- we try to get it from f1 | ||
| 46 | ff1 = f1(chunk) | ||
| 47 | while 1 do | ||
| 48 | -- if f1 can't produce data, we need more data from the user | ||
| 49 | if ff1 == "" then return "" end | ||
| 50 | -- otherwise we pass new data to f2 until it produces something | ||
| 51 | -- or f1 runs out of data too | ||
| 52 | ff2 = f2(ff1) | ||
| 53 | if ff2 ~= "" then return ff2 end | ||
| 54 | ff1 = f1(rf1) | ||
| 45 | end | 55 | end |
| 46 | repeat | ||
| 47 | if current == bottom then | ||
| 48 | chunk = arg[current](chunk) | ||
| 49 | if chunk == "" or bottom == top then return chunk | ||
| 50 | elseif chunk then current = current + 1 | ||
| 51 | else | ||
| 52 | bottom = bottom + 1 | ||
| 53 | current = bottom | ||
| 54 | end | ||
| 55 | else | ||
| 56 | chunk = arg[current](chunk or "") | ||
| 57 | if chunk == "" then | ||
| 58 | chunk = retry | ||
| 59 | current = current - 1 | ||
| 60 | elseif current == top then return chunk | ||
| 61 | else current = current + 1 | ||
| 62 | end | ||
| 63 | end | ||
| 64 | until false | ||
| 65 | end | 56 | end |
| 66 | end | 57 | end |
| 67 | 58 | ||
| 59 | -- chains a bunch of filters together | ||
| 60 | function filter.chain(...) | ||
| 61 | local f = arg[1] | ||
| 62 | for i = 2, table.getn(arg) do | ||
| 63 | f = chain2(f, arg[i]) | ||
| 64 | end | ||
| 65 | return f | ||
| 66 | end | ||
| 67 | |||
| 68 | ----------------------------------------------------------------------------- | 68 | ----------------------------------------------------------------------------- |
| 69 | -- Source stuff | 69 | -- Source stuff |
| 70 | ----------------------------------------------------------------------------- | 70 | ----------------------------------------------------------------------------- |
