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