aboutsummaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2004-03-16 06:42:53 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2004-03-16 06:42:53 +0000
commitbcc0c2a9f0be2ca796ef5206a78e283fe15e6186 (patch)
tree65c269d4854aa5ff4a0b2c8eede5cdb18d716033 /etc
parentb6edaac2841137cf0ef5105f75358bbab4570d87 (diff)
downloadluasocket-bcc0c2a9f0be2ca796ef5206a78e283fe15e6186.tar.gz
luasocket-bcc0c2a9f0be2ca796ef5206a78e283fe15e6186.tar.bz2
luasocket-bcc0c2a9f0be2ca796ef5206a78e283fe15e6186.zip
New filter scheme.
ltn12 and mime updated. smtp/ftp broken.
Diffstat (limited to 'etc')
-rw-r--r--etc/b64.lua17
-rw-r--r--etc/get.lua47
2 files changed, 27 insertions, 37 deletions
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 @@
1local source = ltn12.source.file(io.stdin)
2local sink = ltn12.sink.file(io.stdout)
1local convert 3local convert
2if arg and arg[1] == '-d' then 4if arg and arg[1] == '-d' then
3 convert = socket.mime.decode("base64") 5 convert = mime.decode("base64")
4else 6else
5 local base64 = socket.mime.encode("base64") 7 local base64 = mime.encode("base64")
6 local wrap = socket.mime.wrap() 8 local wrap = mime.wrap()
7 convert = socket.mime.chain(base64, wrap) 9 convert = ltn12.filter.chain(base64, wrap)
8end
9while 1 do
10 local chunk = io.read(4096)
11 io.write(convert(chunk))
12 if not chunk then break end
13end 10end
11source = ltn12.source.chain(source, convert)
12ltn12.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)
80 end 80 end
81end 81end
82 82
83-- downloads a file using the ftp protocol 83-- determines the size of a http file
84function getbyftp(url, file) 84function gethttpsize(url)
85 local save = socket.callback.receive.file(file or io.stdout) 85 local respt = socket.http.request {method = "HEAD", url = url}
86 if file then 86 if respt.code == 200 then
87 save = socket.callback.receive.chain(stats(gethttpsize(url)), save) 87 return tonumber(respt.headers["content-length"])
88 end 88 end
89 local err = socket.ftp.get_cb {
90 url = url,
91 content_cb = save,
92 type = "i"
93 }
94 if err then print(err) end
95end 89end
96 90
97-- downloads a file using the http protocol 91-- downloads a file using the http protocol
98function getbyhttp(url, file) 92function getbyhttp(url, file)
99 local save = socket.callback.receive.file(file or io.stdout) 93 local save = ltn12.sink.file(file or io.stdout)
100 if file then 94 -- only print feedback if output is not stdout
101 save = socket.callback.receive.chain(stats(gethttpsize(url)), save) 95 if file then save = ltn12.sink.chain(stats(gethttpsize(url)), save) end
102 end 96 local respt = socket.http.request_cb({url = url, sink = save})
103 local response = socket.http.request_cb({url = url}, {body_cb = save}) 97 if respt.code ~= 200 then print(respt.status or respt.error) end
104 if response.code ~= 200 then print(response.status or response.error) end
105end 98end
106 99
107-- determines the size of a http file 100-- downloads a file using the ftp protocol
108function gethttpsize(url) 101function getbyftp(url, file)
109 local response = socket.http.request { 102 local save = ltn12.sink.file(file or io.stdout)
110 method = "HEAD", 103 -- only print feedback if output is not stdout
111 url = url 104 -- and we don't know how big the file is
112 } 105 if file then save = ltn12.sink.chain(stats(), save) end
113 if response.code == 200 then 106 local ret, err = socket.ftp.get_cb {url = url, sink = save, type = "i"}
114 return tonumber(response.headers["content-length"]) 107 if err then print(err) end
115 end
116end 108end
117 109
118-- determines the scheme 110-- determines the scheme
@@ -130,7 +122,6 @@ function get(url, name)
130 if scheme == "ftp" then getbyftp(url, fout) 122 if scheme == "ftp" then getbyftp(url, fout)
131 elseif scheme == "http" then getbyhttp(url, fout) 123 elseif scheme == "http" then getbyhttp(url, fout)
132 else print("unknown scheme" .. scheme) end 124 else print("unknown scheme" .. scheme) end
133 if name then fout:close() end
134end 125end
135 126
136-- main program 127-- main program