From bcc0c2a9f0be2ca796ef5206a78e283fe15e6186 Mon Sep 17 00:00:00 2001 From: Diego Nehab <diego@tecgraf.puc-rio.br> Date: Tue, 16 Mar 2004 06:42:53 +0000 Subject: New filter scheme. ltn12 and mime updated. smtp/ftp broken. --- etc/b64.lua | 17 ++++++++--------- etc/get.lua | 47 +++++++++++++++++++---------------------------- 2 files changed, 27 insertions(+), 37 deletions(-) (limited to 'etc') diff --git a/etc/b64.lua b/etc/b64.lua index de83578..ea157c4 100644 --- a/etc/b64.lua +++ b/etc/b64.lua @@ -1,13 +1,12 @@ +local source = ltn12.source.file(io.stdin) +local sink = ltn12.sink.file(io.stdout) local convert if arg and arg[1] == '-d' then - convert = socket.mime.decode("base64") + convert = mime.decode("base64") else - local base64 = socket.mime.encode("base64") - local wrap = socket.mime.wrap() - convert = socket.mime.chain(base64, wrap) -end -while 1 do - local chunk = io.read(4096) - io.write(convert(chunk)) - if not chunk then break end + local base64 = mime.encode("base64") + local wrap = mime.wrap() + convert = ltn12.filter.chain(base64, wrap) end +source = ltn12.source.chain(source, convert) +ltn12.pump(source, sink) diff --git a/etc/get.lua b/etc/get.lua index d6760b8..0306b54 100644 --- a/etc/get.lua +++ b/etc/get.lua @@ -80,39 +80,31 @@ function stats(size) end end --- downloads a file using the ftp protocol -function getbyftp(url, file) - local save = socket.callback.receive.file(file or io.stdout) - if file then - save = socket.callback.receive.chain(stats(gethttpsize(url)), save) - end - local err = socket.ftp.get_cb { - url = url, - content_cb = save, - type = "i" - } - if err then print(err) end +-- determines the size of a http file +function gethttpsize(url) + local respt = socket.http.request {method = "HEAD", url = url} + if respt.code == 200 then + return tonumber(respt.headers["content-length"]) + end end -- downloads a file using the http protocol function getbyhttp(url, file) - local save = socket.callback.receive.file(file or io.stdout) - if file then - save = socket.callback.receive.chain(stats(gethttpsize(url)), save) - end - local response = socket.http.request_cb({url = url}, {body_cb = save}) - if response.code ~= 200 then print(response.status or response.error) end + local save = ltn12.sink.file(file or io.stdout) + -- only print feedback if output is not stdout + if file then save = ltn12.sink.chain(stats(gethttpsize(url)), save) end + local respt = socket.http.request_cb({url = url, sink = save}) + if respt.code ~= 200 then print(respt.status or respt.error) end end --- determines the size of a http file -function gethttpsize(url) - local response = socket.http.request { - method = "HEAD", - url = url - } - if response.code == 200 then - return tonumber(response.headers["content-length"]) - end +-- downloads a file using the ftp protocol +function getbyftp(url, file) + local save = ltn12.sink.file(file or io.stdout) + -- only print feedback if output is not stdout + -- and we don't know how big the file is + if file then save = ltn12.sink.chain(stats(), save) end + local ret, err = socket.ftp.get_cb {url = url, sink = save, type = "i"} + if err then print(err) end end -- determines the scheme @@ -130,7 +122,6 @@ function get(url, name) if scheme == "ftp" then getbyftp(url, fout) elseif scheme == "http" then getbyhttp(url, fout) else print("unknown scheme" .. scheme) end - if name then fout:close() end end -- main program -- cgit v1.2.3-55-g6feb