mirror of
https://github.com/lunarmodules/luasocket.git
synced 2024-12-25 12:08:21 +01:00
Updates for 2.0.1 on the way.
This commit is contained in:
parent
09ad4b299c
commit
93806208c7
48
TODO
48
TODO
@ -1,25 +1,11 @@
|
|||||||
|
ftp send should return server replies?
|
||||||
fix unix.c to return just a function
|
make sure there are no object files in the distribution tarball
|
||||||
get rid of setmetatable(, nil) since packages don't need this anymore in
|
http handling of 100-continue, see DB patch
|
||||||
5.1
|
DB ftp.lua bug.
|
||||||
|
test unix.c to return just a function and works with require"unix"
|
||||||
new instalation scheme???
|
get rid of setmetatable(, nil) since packages don't need this anymore in 5.1
|
||||||
|
compat-5.1 novo
|
||||||
test empty socket.select no windows.
|
ajeitar pra lua-5.1
|
||||||
|
|
||||||
bug by mathew percival?
|
|
||||||
|
|
||||||
test it on Windows!!!
|
|
||||||
|
|
||||||
leave code for losers that don't have nanosleep
|
|
||||||
|
|
||||||
ftp.send/recv return bytes transfered?
|
|
||||||
new scheme to choose family/protocol of object to create
|
|
||||||
change ltn13 to make sure drawbacks are obvious
|
|
||||||
- check discussion
|
|
||||||
use mike's "don't set to blocking before closing unless needed" patch?
|
|
||||||
take a look at DB's smtp patch (add "extra argument" table)
|
|
||||||
|
|
||||||
|
|
||||||
adicionar exemplos de expansão: pipe, local, named pipe
|
adicionar exemplos de expansão: pipe, local, named pipe
|
||||||
testar os options!
|
testar os options!
|
||||||
@ -27,21 +13,3 @@ testar os options!
|
|||||||
- proteger get*by*.* com um mutex GLOBAL!
|
- proteger get*by*.* com um mutex GLOBAL!
|
||||||
- proteger ou atomizar o conjunto (timedout, receive), (timedout, send)
|
- proteger ou atomizar o conjunto (timedout, receive), (timedout, send)
|
||||||
- inet_ntoa também é uma merda.
|
- inet_ntoa também é uma merda.
|
||||||
|
|
||||||
* protect doesn't catch errors by error and assert
|
|
||||||
* BUG NO SET DO TINYIRC!!! SINISTRO.
|
|
||||||
* _VERSION, _DEBUG, etc.
|
|
||||||
* talk about new create field in HTTP, FTP and SMTP
|
|
||||||
* talk about the non-blocking connect in the manual
|
|
||||||
* think about how to extend http, ftp, smtp to use special send and receive
|
|
||||||
* functions for non-blocking so they can be used in the context of the
|
|
||||||
* dispatcher!
|
|
||||||
* adjust manual for new sock:send returns.
|
|
||||||
* think about a dispatcher.
|
|
||||||
* - it creates a server and receives a function that will do the work on
|
|
||||||
* received connections
|
|
||||||
* - this function is invoked with the client socket
|
|
||||||
* - it calls special send and receive functions that yield on timeout
|
|
||||||
* arranjar um jeito de fazer multipart/alternative
|
|
||||||
* what the hell does __unload do?
|
|
||||||
* it's there just in case someone wants to use it.
|
|
||||||
|
2
config
2
config
@ -21,7 +21,7 @@ LUALIB=-Llua-5.0.2/lib
|
|||||||
#------
|
#------
|
||||||
# Compat-5.1 directory
|
# Compat-5.1 directory
|
||||||
#
|
#
|
||||||
COMPAT=compat-5.1r4
|
COMPAT=compat-5.1r5
|
||||||
|
|
||||||
#------
|
#------
|
||||||
# Top of your Lua installation
|
# Top of your Lua installation
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
-- RCS ID: $$
|
-- RCS ID: $$
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
local base = _G
|
local base = _G
|
||||||
|
local table = require("table")
|
||||||
local socket = require("socket")
|
local socket = require("socket")
|
||||||
local coroutine = require("coroutine")
|
local coroutine = require("coroutine")
|
||||||
module("dispatch")
|
module("dispatch")
|
||||||
@ -50,7 +51,7 @@ function socket.protect(f)
|
|||||||
return function(...)
|
return function(...)
|
||||||
local co = coroutine.create(f)
|
local co = coroutine.create(f)
|
||||||
while true do
|
while true do
|
||||||
local results = {coroutine.resume(co, unpack(arg))}
|
local results = {coroutine.resume(co, base.unpack(arg))}
|
||||||
local status = table.remove(results, 1)
|
local status = table.remove(results, 1)
|
||||||
if not status then
|
if not status then
|
||||||
if type(results[1]) == 'table' then
|
if type(results[1]) == 'table' then
|
||||||
@ -58,9 +59,9 @@ function socket.protect(f)
|
|||||||
else error(results[1]) end
|
else error(results[1]) end
|
||||||
end
|
end
|
||||||
if coroutine.status(co) == "suspended" then
|
if coroutine.status(co) == "suspended" then
|
||||||
arg = {coroutine.yield(unpack(results))}
|
arg = {coroutine.yield(base.unpack(results))}
|
||||||
else
|
else
|
||||||
return unpack(results)
|
return base.unpack(results)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -72,7 +73,7 @@ end
|
|||||||
local function newset()
|
local function newset()
|
||||||
local reverse = {}
|
local reverse = {}
|
||||||
local set = {}
|
local set = {}
|
||||||
return setmetatable(set, {__index = {
|
return base.setmetatable(set, {__index = {
|
||||||
insert = function(set, value)
|
insert = function(set, value)
|
||||||
if not reverse[value] then
|
if not reverse[value] then
|
||||||
table.insert(set, value)
|
table.insert(set, value)
|
||||||
@ -105,7 +106,7 @@ local function cowrap(dispatcher, tcp, error)
|
|||||||
local metat = { __index = function(table, key)
|
local metat = { __index = function(table, key)
|
||||||
table[key] = function(...)
|
table[key] = function(...)
|
||||||
arg[1] = tcp
|
arg[1] = tcp
|
||||||
return tcp[key](unpack(arg))
|
return tcp[key](base.unpack(arg))
|
||||||
end
|
end
|
||||||
return table[key]
|
return table[key]
|
||||||
end}
|
end}
|
||||||
@ -202,7 +203,7 @@ local function cowrap(dispatcher, tcp, error)
|
|||||||
dispatcher.receiving.cortn[tcp] = nil
|
dispatcher.receiving.cortn[tcp] = nil
|
||||||
return tcp:close()
|
return tcp:close()
|
||||||
end
|
end
|
||||||
return setmetatable(wrap, metat)
|
return base.setmetatable(wrap, metat)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@ -253,17 +254,17 @@ function cometat.__index:step()
|
|||||||
self.sending.set, 1)
|
self.sending.set, 1)
|
||||||
-- for all readable connections, resume their cortns and reschedule
|
-- for all readable connections, resume their cortns and reschedule
|
||||||
-- when they yield back to us
|
-- when they yield back to us
|
||||||
for _, tcp in ipairs(readable) do
|
for _, tcp in base.ipairs(readable) do
|
||||||
schedule(wakeup(self.receiving, tcp))
|
schedule(wakeup(self.receiving, tcp))
|
||||||
end
|
end
|
||||||
-- for all writable connections, do the same
|
-- for all writable connections, do the same
|
||||||
for _, tcp in ipairs(writable) do
|
for _, tcp in base.ipairs(writable) do
|
||||||
schedule(wakeup(self.sending, tcp))
|
schedule(wakeup(self.sending, tcp))
|
||||||
end
|
end
|
||||||
-- politely ask replacement I/O functions in idle cortns to
|
-- politely ask replacement I/O functions in idle cortns to
|
||||||
-- return reporting a timeout
|
-- return reporting a timeout
|
||||||
local now = socket.gettime()
|
local now = socket.gettime()
|
||||||
for tcp, stamp in pairs(self.stamp) do
|
for tcp, stamp in base.pairs(self.stamp) do
|
||||||
if tcp.class == "tcp{client}" and now - stamp > TIMEOUT then
|
if tcp.class == "tcp{client}" and now - stamp > TIMEOUT then
|
||||||
abort(self.sending, tcp)
|
abort(self.sending, tcp)
|
||||||
abort(self.receiving, tcp)
|
abort(self.receiving, tcp)
|
||||||
@ -296,6 +297,6 @@ function handlert.coroutine()
|
|||||||
function dispatcher.tcp()
|
function dispatcher.tcp()
|
||||||
return cowrap(dispatcher, socket.tcp())
|
return cowrap(dispatcher, socket.tcp())
|
||||||
end
|
end
|
||||||
return setmetatable(dispatcher, cometat)
|
return base.setmetatable(dispatcher, cometat)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -268,7 +268,7 @@ function tredirect(reqt, location)
|
|||||||
headers = reqt.headers,
|
headers = reqt.headers,
|
||||||
proxy = reqt.proxy,
|
proxy = reqt.proxy,
|
||||||
nredirects = (reqt.nredirects or 0) + 1,
|
nredirects = (reqt.nredirects or 0) + 1,
|
||||||
connect = reqt.connect
|
create = reqt.create
|
||||||
}
|
}
|
||||||
-- pass location header back as a hint we redirected
|
-- pass location header back as a hint we redirected
|
||||||
headers.location = headers.location or location
|
headers.location = headers.location or location
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
local dict = require"socket.dict"
|
local dict = require"socket.dict"
|
||||||
|
|
||||||
|
print(dict.get("dict://localhost/d:teste"))
|
||||||
|
|
||||||
for i,v in pairs(dict.get("dict://localhost/d:teste")) do print(v) end
|
for i,v in pairs(dict.get("dict://localhost/d:teste")) do print(v) end
|
||||||
|
@ -32,13 +32,6 @@ r, e = smtp.send{
|
|||||||
port = 2525
|
port = 2525
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
os.exit()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- creates a source to send a message with two parts. The first part is
|
-- creates a source to send a message with two parts. The first part is
|
||||||
-- plain text, the second part is a PNG image, encoded as base64.
|
-- plain text, the second part is a PNG image, encoded as base64.
|
||||||
source = smtp.message{
|
source = smtp.message{
|
||||||
@ -67,13 +60,13 @@ source = smtp.message{
|
|||||||
-- chunks are loaded into memory and translation happens on the fly.
|
-- chunks are loaded into memory and translation happens on the fly.
|
||||||
[2] = {
|
[2] = {
|
||||||
headers = {
|
headers = {
|
||||||
["content-type"] = 'image/png; name="image.png"',
|
["content-type"] = 'image/png; name="luasocket.png"',
|
||||||
["content-disposition"] = 'attachment; filename="image.png"',
|
["content-disposition"] = 'attachment; filename="luasocket.png"',
|
||||||
["content-description"] = 'a beautiful image',
|
["content-description"] = 'a beautiful image',
|
||||||
["content-transfer-encoding"] = "BASE64"
|
["content-transfer-encoding"] = "BASE64"
|
||||||
},
|
},
|
||||||
body = ltn12.source.chain(
|
body = ltn12.source.chain(
|
||||||
ltn12.source.file(io.open("image.png", "rb")),
|
ltn12.source.file(io.open("luasocket.png", "rb")),
|
||||||
ltn12.filter.chain(
|
ltn12.filter.chain(
|
||||||
mime.encode("base64"),
|
mime.encode("base64"),
|
||||||
mime.wrap()
|
mime.wrap()
|
||||||
|
Loading…
Reference in New Issue
Block a user