mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-26 12:28:21 +01:00
Starting to use RCS in princeton again. Not behind a firewall anymore.
This commit is contained in:
parent
c51d4acf1c
commit
6789b83ff5
20
LICENSE
Normal file
20
LICENSE
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
LuaSocket 2.0 license
|
||||||
|
Copyright © 2003 Tecgraf, PUC-Rio.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
to deal in the Software without restriction, including without limitation
|
||||||
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
23
TODO
23
TODO
@ -1,24 +1,8 @@
|
|||||||
URL e URI eh a mesma coisa?
|
|
||||||
|
|
||||||
Check spelling
|
|
||||||
Fazer uma página com os exemplos.
|
|
||||||
Ajeitar links pras RFCs.
|
|
||||||
Usar DFN no lugar de <i> pra definiccoes.
|
|
||||||
Usar VAR pra argumentos?
|
|
||||||
Usar CODE pros trechos? funciona como PRE?
|
|
||||||
Usar PRE { margin-botton: 1em; } pra pular linha antes do </pre>
|
|
||||||
Trocar todos os <a name=bla> por <... id=bla>?
|
|
||||||
Make sure all .html are STRICT 4.01
|
|
||||||
Add license.txt.
|
|
||||||
Check RFC links.
|
|
||||||
Add lots of hyperlinks
|
|
||||||
Check all function names (must use . or :)
|
|
||||||
Make sure IPv4 goes away
|
|
||||||
The words function and method should follow the convention
|
|
||||||
Adjust dates in all files
|
Adjust dates in all files
|
||||||
|
|
||||||
Test the library on every system possible
|
Test the library on every system possible
|
||||||
|
|
||||||
Document socket.time and socket.sleep
|
Document socket.time and socket.sleep
|
||||||
Create the windows executable.
|
|
||||||
|
|
||||||
Implement time critical stuff from code module in C.
|
Implement time critical stuff from code module in C.
|
||||||
Add service name translation.
|
Add service name translation.
|
||||||
@ -26,7 +10,6 @@ Add service name translation.
|
|||||||
Ajeitar o protocolo da lua_socketlibopen()...
|
Ajeitar o protocolo da lua_socketlibopen()...
|
||||||
|
|
||||||
- testar os options!
|
- testar os options!
|
||||||
- testar em várias plataformas
|
|
||||||
- adicionar exemplos de expansão: pipe, local, named pipe
|
- adicionar exemplos de expansão: pipe, local, named pipe
|
||||||
|
|
||||||
* O location do "redirect" pode ser relativo ao servidor atual (não pode,
|
* O location do "redirect" pode ser relativo ao servidor atual (não pode,
|
||||||
@ -47,7 +30,6 @@ Ajeitar o protocolo da lua_socketlibopen()...
|
|||||||
- checar operações em closed sockets
|
- checar operações em closed sockets
|
||||||
- checar teste de writable socket com select
|
- checar teste de writable socket com select
|
||||||
|
|
||||||
- trocar IPv4 para networking ou ipc
|
|
||||||
|
|
||||||
- checar todos os metodos
|
- checar todos os metodos
|
||||||
- checar options em UDP
|
- checar options em UDP
|
||||||
@ -58,4 +40,3 @@ Ajeitar o protocolo da lua_socketlibopen()...
|
|||||||
- unix 92 bytes maximo no endereço, incluindo o zero
|
- unix 92 bytes maximo no endereço, incluindo o zero
|
||||||
- unix 9216 maximo de datagram size
|
- unix 9216 maximo de datagram size
|
||||||
|
|
||||||
|
|
||||||
|
19
src/ftp.lua
19
src/ftp.lua
@ -602,10 +602,12 @@ function Public.put_cb(request)
|
|||||||
local control, err = Private.open(parsed)
|
local control, err = Private.open(parsed)
|
||||||
if not control then return err end
|
if not control then return err end
|
||||||
local segment = Private.parse_path(parsed)
|
local segment = Private.parse_path(parsed)
|
||||||
return Private.change_dir(control, segment) or
|
err = Private.change_dir(control, segment) or
|
||||||
Private.change_type(control, parsed.params) or
|
Private.change_type(control, parsed.params) or
|
||||||
Private.upload(control, request, segment) or
|
Private.upload(control, request, segment) or
|
||||||
Private.close(control)
|
Private.close(control)
|
||||||
|
if err then return nil, err
|
||||||
|
else return 1 end
|
||||||
end
|
end
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
@ -616,15 +618,15 @@ end
|
|||||||
-- type: "i" for "image" mode, "a" for "ascii" mode or "d" for directory
|
-- type: "i" for "image" mode, "a" for "ascii" mode or "d" for directory
|
||||||
-- user: account user name
|
-- user: account user name
|
||||||
-- password: account password)
|
-- password: account password)
|
||||||
|
-- content: file contents
|
||||||
-- content: file contents
|
-- content: file contents
|
||||||
-- Returns
|
-- Returns
|
||||||
-- err: error message if any
|
-- err: error message if any
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Public.put(url_or_request, content)
|
function Public.put(url_or_request, content)
|
||||||
local request = Private.build_request(url_or_request)
|
local request = Private.build_request(url_or_request)
|
||||||
request.content_cb = function()
|
request.content = request.content or content
|
||||||
return content, string.len(content)
|
request.content_cb = socket.callback.send_string(request.content)
|
||||||
end
|
|
||||||
return Public.put_cb(request)
|
return Public.put_cb(request)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -641,12 +643,9 @@ end
|
|||||||
-- err: error message in case of error, nil otherwise
|
-- err: error message in case of error, nil otherwise
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Public.get(url_or_request)
|
function Public.get(url_or_request)
|
||||||
local cat = socket.concat.create()
|
local concat = socket.concat.create()
|
||||||
local request = Private.build_request(url_or_request)
|
local request = Private.build_request(url_or_request)
|
||||||
request.content_cb = function(chunk, err)
|
request.content_cb = socket.callback.receive_concat(concat)
|
||||||
if chunk then cat:addstring(chunk) end
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
local err = Public.get_cb(request)
|
local err = Public.get_cb(request)
|
||||||
return cat:getresult(), err
|
return concat:getresult(), err
|
||||||
end
|
end
|
||||||
|
38
src/http.lua
38
src/http.lua
@ -338,15 +338,15 @@ function Private.send_request(sock, method, uri, headers, body_cb)
|
|||||||
err = Private.try_send(sock, method .. " " .. uri .. " HTTP/1.1\r\n")
|
err = Private.try_send(sock, method .. " " .. uri .. " HTTP/1.1\r\n")
|
||||||
if err then return err end
|
if err then return err end
|
||||||
-- if there is a request message body, add content-length header
|
-- if there is a request message body, add content-length header
|
||||||
if body_cb then
|
chunk, size = body_cb()
|
||||||
chunk, size = body_cb()
|
if type(chunk) == "string" and type(size) == "number" then
|
||||||
if type(chunk) == "string" and type(size) == "number" then
|
if size > 0 then
|
||||||
headers["content-length"] = tostring(size)
|
headers["content-length"] = tostring(size)
|
||||||
else
|
end
|
||||||
sock:close()
|
else
|
||||||
if not chunk and type(size) == "string" then return size
|
sock:close()
|
||||||
else return "invalid callback return" end
|
if not chunk and type(size) == "string" then return size
|
||||||
end
|
else return "invalid callback return" end
|
||||||
end
|
end
|
||||||
-- send request headers
|
-- send request headers
|
||||||
err = Private.send_headers(sock, headers)
|
err = Private.send_headers(sock, headers)
|
||||||
@ -505,7 +505,10 @@ end
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Private.build_request(data)
|
function Private.build_request(data)
|
||||||
local request = {}
|
local request = {}
|
||||||
if type(data) == "table" then for i, v in data do request[i] = v end
|
if type(data) == "table" then
|
||||||
|
for i, v in data
|
||||||
|
do request[i] = v
|
||||||
|
end
|
||||||
else request.url = data end
|
else request.url = data end
|
||||||
return request
|
return request
|
||||||
end
|
end
|
||||||
@ -613,18 +616,11 @@ end
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
function Public.request(request)
|
function Public.request(request)
|
||||||
local response = {}
|
local response = {}
|
||||||
if request.body then
|
request.body_cb = socket.callback.send_string(request.body)
|
||||||
request.body_cb = function()
|
local concat = socket.concat.create()
|
||||||
return request.body, string.len(request.body)
|
response.body_cb = socket.callback.receive_concat(concat)
|
||||||
end
|
|
||||||
end
|
|
||||||
local cat = socket.concat.create()
|
|
||||||
response.body_cb = function(chunk, err)
|
|
||||||
if chunk then cat:addstring(chunk) end
|
|
||||||
return 1
|
|
||||||
end
|
|
||||||
response = Public.request_cb(request, response)
|
response = Public.request_cb(request, response)
|
||||||
response.body = cat:getresult()
|
response.body = concat:getresult()
|
||||||
response.body_cb = nil
|
response.body_cb = nil
|
||||||
return response
|
return response
|
||||||
end
|
end
|
||||||
|
@ -56,6 +56,7 @@ LUASOCKET_API int luaopen_socket(lua_State *L)
|
|||||||
#include "concat.lch"
|
#include "concat.lch"
|
||||||
#include "code.lch"
|
#include "code.lch"
|
||||||
#include "url.lch"
|
#include "url.lch"
|
||||||
|
#include "callback.lch"
|
||||||
#include "smtp.lch"
|
#include "smtp.lch"
|
||||||
#include "ftp.lch"
|
#include "ftp.lch"
|
||||||
#include "http.lch"
|
#include "http.lch"
|
||||||
@ -64,6 +65,7 @@ LUASOCKET_API int luaopen_socket(lua_State *L)
|
|||||||
lua_dofile(L, "concat.lua");
|
lua_dofile(L, "concat.lua");
|
||||||
lua_dofile(L, "code.lua");
|
lua_dofile(L, "code.lua");
|
||||||
lua_dofile(L, "url.lua");
|
lua_dofile(L, "url.lua");
|
||||||
|
lua_dofile(L, "callback.lua");
|
||||||
lua_dofile(L, "smtp.lua");
|
lua_dofile(L, "smtp.lua");
|
||||||
lua_dofile(L, "ftp.lua");
|
lua_dofile(L, "ftp.lua");
|
||||||
lua_dofile(L, "http.lua");
|
lua_dofile(L, "http.lua");
|
||||||
|
@ -47,9 +47,9 @@ check(not back and err == e, err)
|
|||||||
|
|
||||||
io.write("testing anonymous file upload: ")
|
io.write("testing anonymous file upload: ")
|
||||||
os.remove("/var/ftp/pub/index.up.html")
|
os.remove("/var/ftp/pub/index.up.html")
|
||||||
err = socket.ftp.put("ftp://localhost/pub/index.up.html;type=i", index)
|
ret, err = socket.ftp.put("ftp://localhost/pub/index.up.html;type=i", index)
|
||||||
saved = readfile("/var/ftp/pub/index.up.html")
|
saved = readfile("/var/ftp/pub/index.up.html")
|
||||||
check(not err and saved == index, err)
|
check(ret and not err and saved == index, err)
|
||||||
|
|
||||||
io.write("testing anonymous file download: ")
|
io.write("testing anonymous file download: ")
|
||||||
back, err = socket.ftp.get("ftp://localhost/pub/index.up.html;type=i")
|
back, err = socket.ftp.get("ftp://localhost/pub/index.up.html;type=i")
|
||||||
@ -65,9 +65,9 @@ check(not err and back == index, err)
|
|||||||
|
|
||||||
io.write("testing authenticated upload: ")
|
io.write("testing authenticated upload: ")
|
||||||
os.remove("/home/luasocket/index.up.html")
|
os.remove("/home/luasocket/index.up.html")
|
||||||
err = socket.ftp.put("ftp://luasocket:password@localhost/index.up.html;type=i", index)
|
ret, err = socket.ftp.put("ftp://luasocket:password@localhost/index.up.html;type=i", index)
|
||||||
saved = readfile("/home/luasocket/index.up.html")
|
saved = readfile("/home/luasocket/index.up.html")
|
||||||
check(not err and saved == index, err)
|
check(ret and not err and saved == index, err)
|
||||||
|
|
||||||
io.write("testing authenticated download: ")
|
io.write("testing authenticated download: ")
|
||||||
back, err = socket.ftp.get("ftp://luasocket:password@localhost/index.up.html;type=i")
|
back, err = socket.ftp.get("ftp://luasocket:password@localhost/index.up.html;type=i")
|
||||||
@ -97,13 +97,13 @@ back, err = socket.ftp.get("ftp://localhost/pub;type=d")
|
|||||||
check(similar(back, expected))
|
check(similar(back, expected))
|
||||||
|
|
||||||
io.write("testing upload denial: ")
|
io.write("testing upload denial: ")
|
||||||
err = socket.ftp.put("ftp://localhost/index.up.html;type=a", index)
|
ret, err = socket.ftp.put("ftp://localhost/index.up.html;type=a", index)
|
||||||
check(err, err)
|
check(err, err)
|
||||||
|
|
||||||
io.write("testing authentication failure: ")
|
io.write("testing authentication failure: ")
|
||||||
err = socket.ftp.put("ftp://luasocket:wrong@localhost/index.html;type=a", index)
|
ret, err = socket.ftp.put("ftp://luasocket:wrong@localhost/index.html;type=a", index)
|
||||||
print(err)
|
print(err)
|
||||||
check(err, err)
|
check(not ret and err, err)
|
||||||
|
|
||||||
io.write("testing wrong file: ")
|
io.write("testing wrong file: ")
|
||||||
back, err = socket.ftp.get("ftp://localhost/index.wrong.html;type=a")
|
back, err = socket.ftp.get("ftp://localhost/index.wrong.html;type=a")
|
||||||
|
Loading…
Reference in New Issue
Block a user