diff options
author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-06-15 06:24:00 +0000 |
---|---|---|
committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-06-15 06:24:00 +0000 |
commit | 58096449c6044b7aade5cd41cfd71c6bec1d273d (patch) | |
tree | 1814ffebe89c4c2556d84f97f66db37a7e8b4554 /src/tp.lua | |
parent | 9ed7f955e5fc69af9bf1794fa2c8cd227981ba24 (diff) | |
download | luasocket-58096449c6044b7aade5cd41cfd71c6bec1d273d.tar.gz luasocket-58096449c6044b7aade5cd41cfd71c6bec1d273d.tar.bz2 luasocket-58096449c6044b7aade5cd41cfd71c6bec1d273d.zip |
Manual is almost done. HTTP is missing.
Implemented new distribution scheme.
Select is now purely C.
HTTP reimplemented seems faster dunno why.
LTN12 functions that coroutines fail gracefully.
Diffstat (limited to 'src/tp.lua')
-rw-r--r-- | src/tp.lua | 26 |
1 files changed, 15 insertions, 11 deletions
@@ -2,24 +2,28 @@ | |||
2 | -- Unified SMTP/FTP subsystem | 2 | -- Unified SMTP/FTP subsystem |
3 | -- LuaSocket toolkit. | 3 | -- LuaSocket toolkit. |
4 | -- Author: Diego Nehab | 4 | -- Author: Diego Nehab |
5 | -- Conforming to: RFC 2616, LTN7 | ||
6 | -- RCS ID: $Id$ | 5 | -- RCS ID: $Id$ |
7 | ----------------------------------------------------------------------------- | 6 | ----------------------------------------------------------------------------- |
8 | 7 | ||
9 | ----------------------------------------------------------------------------- | 8 | ----------------------------------------------------------------------------- |
10 | -- Load other required modules | 9 | -- Load required modules |
11 | ----------------------------------------------------------------------------- | 10 | ----------------------------------------------------------------------------- |
12 | local socket = require("socket") | 11 | local socket = require("socket") |
12 | local ltn12 = require("ltn12") | ||
13 | 13 | ||
14 | ----------------------------------------------------------------------------- | 14 | ----------------------------------------------------------------------------- |
15 | -- Setup namespace | 15 | -- Setup namespace |
16 | ----------------------------------------------------------------------------- | 16 | ----------------------------------------------------------------------------- |
17 | tp = {} | 17 | _LOADED["tp"] = getfenv(1) |
18 | setmetatable(tp, { __index = _G }) | ||
19 | setfenv(1, tp) | ||
20 | 18 | ||
19 | ----------------------------------------------------------------------------- | ||
20 | -- Program constants | ||
21 | ----------------------------------------------------------------------------- | ||
21 | TIMEOUT = 60 | 22 | TIMEOUT = 60 |
22 | 23 | ||
24 | ----------------------------------------------------------------------------- | ||
25 | -- Implementation | ||
26 | ----------------------------------------------------------------------------- | ||
23 | -- gets server reply (works for SMTP and FTP) | 27 | -- gets server reply (works for SMTP and FTP) |
24 | local function get_reply(control) | 28 | local function get_reply(control) |
25 | local code, current, sep | 29 | local code, current, sep |
@@ -37,7 +41,6 @@ local function get_reply(control) | |||
37 | -- reply ends with same code | 41 | -- reply ends with same code |
38 | until code == current and sep == " " | 42 | until code == current and sep == " " |
39 | end | 43 | end |
40 | print(reply) | ||
41 | return code, reply | 44 | return code, reply |
42 | end | 45 | end |
43 | 46 | ||
@@ -46,6 +49,7 @@ local metat = { __index = {} } | |||
46 | 49 | ||
47 | function metat.__index:check(ok) | 50 | function metat.__index:check(ok) |
48 | local code, reply = get_reply(self.control) | 51 | local code, reply = get_reply(self.control) |
52 | print(reply) | ||
49 | if not code then return nil, reply end | 53 | if not code then return nil, reply end |
50 | if type(ok) ~= "function" then | 54 | if type(ok) ~= "function" then |
51 | if type(ok) == "table" then | 55 | if type(ok) == "table" then |
@@ -103,11 +107,11 @@ function metat.__index:close() | |||
103 | end | 107 | end |
104 | 108 | ||
105 | -- connect with server and return control object | 109 | -- connect with server and return control object |
106 | function connect(host, port) | 110 | connect = socket.protect(function(host, port, timeout) |
107 | local control, err = socket.connect(host, port) | 111 | local control = socket.try(socket.tcp()) |
108 | if not control then return nil, err end | 112 | socket.try(control:settimeout(timeout or TIMEOUT)) |
109 | control:settimeout(TIMEOUT) | 113 | socket.try(control:connect(host, port)) |
110 | return setmetatable({control = control}, metat) | 114 | return setmetatable({control = control}, metat) |
111 | end | 115 | end) |
112 | 116 | ||
113 | return tp | 117 | return tp |